diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index f3af92d9e934..4ac592cca57a 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -305,6 +305,7 @@ enabled: - x-pack/test/functional/apps/ml/stack_management_jobs/config.ts - x-pack/test/functional/apps/monitoring/config.ts - x-pack/test/functional/apps/observability_logs_explorer/config.ts + - x-pack/test/functional/apps/dataset_quality/config.ts - x-pack/test/functional/apps/painless_lab/config.ts - x-pack/test/functional/apps/remote_clusters/config.ts - x-pack/test/functional/apps/reporting_management/config.ts diff --git a/.buildkite/hooks/post-command b/.buildkite/hooks/post-command index 13e0f4d79582..21a4326498fc 100755 --- a/.buildkite/hooks/post-command +++ b/.buildkite/hooks/post-command @@ -1,7 +1,3 @@ #!/usr/bin/env bash -if [[ "$BUILDKITE_AGENT_NAME" =~ ^bk-agent ]]; then - echo "Pipeline file triggered from outside the kibana executors, skipping post_command" -else - .buildkite/scripts/lifecycle/post_command.sh -fi +source .buildkite/scripts/lifecycle/post_command.sh diff --git a/.buildkite/hooks/pre-command b/.buildkite/hooks/pre-command index 725591fdf19b..58a2c5f0b499 100644 --- a/.buildkite/hooks/pre-command +++ b/.buildkite/hooks/pre-command @@ -1,8 +1,3 @@ #!/usr/bin/env bash -if [[ "$BUILDKITE_AGENT_NAME" =~ ^bk-agent ]]; then - echo "Pipeline file triggered from outside the kibana executors, skipping .buildkite/scripts/lifecycle/pre_command.sh" - export SONAR_LOGIN=$(vault read -field=token secret/ci/elastic-kibana/sonarqube) -else - source .buildkite/scripts/lifecycle/pre_command.sh -fi +source .buildkite/scripts/lifecycle/pre_command.sh diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index 5b19d688aa3f..401f25347ebc 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -22,7 +22,7 @@ "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", - "mocha": "^10.2.0", + "mocha": "^10.3.0", "nock": "^12.0.2", "ts-node": "^10.7.0", "typescript": "^4.6.4" @@ -351,11 +351,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", - "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -529,12 +529,6 @@ "node": ">= 0.8" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -772,20 +766,19 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -802,28 +795,6 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -1082,9 +1053,9 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -1094,13 +1065,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -1115,10 +1085,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/ansi-colors": { @@ -1169,18 +1135,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/nock": { "version": "12.0.3", "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz", @@ -1271,15 +1225,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -1423,9 +1368,9 @@ ] }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -2001,11 +1946,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", - "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -2138,12 +2083,6 @@ "delayed-stream": "~1.0.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -2301,38 +2240,16 @@ "dev": true }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "glob-parent": { @@ -2529,9 +2446,9 @@ } }, "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -2541,14 +2458,13 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", + "serialize-javascript": "^6.0.2", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", @@ -2595,12 +2511,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, "nock": { "version": "12.0.3", "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz", @@ -2659,12 +2569,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2741,9 +2645,9 @@ "dev": true }, "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { "randombytes": "^2.1.0" diff --git a/.buildkite/package.json b/.buildkite/package.json index 0321711b7480..be91750b4e79 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -6,6 +6,9 @@ "test": "mocha", "test:watch": "mocha --watch" }, + "overrides": { + "serialize-javascript": "^6.0.2" + }, "dependencies": { "@octokit/rest": "^18.10.0", "axios": "^1.6.3", @@ -21,7 +24,7 @@ "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", - "mocha": "^10.2.0", + "mocha": "^10.3.0", "nock": "^12.0.2", "ts-node": "^10.7.0", "typescript": "^4.6.4" diff --git a/.buildkite/pipelines/emergency_release.yml b/.buildkite/pipelines/emergency_release.yml index 07ab52417f9a..df9b1dea3cfb 100644 --- a/.buildkite/pipelines/emergency_release.yml +++ b/.buildkite/pipelines/emergency_release.yml @@ -1,4 +1,5 @@ env: + SKIP_NODE_SETUP: true VERSION: ${BUILDKITE_COMMIT:0:12} EMERGENCY_RELEASE_REMOTE_SERVICE_CONFIG: https://raw.githubusercontent.com/elastic/serverless-gitops/main/gen/gpctl/kibana/emergency.yaml diff --git a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml index 8fc5da666d56..1952900c1aab 100644 --- a/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml +++ b/.buildkite/pipelines/es_serverless/emergency_release_branch_testing.yml @@ -9,9 +9,7 @@ notify: if: "build.state == 'passed' || build.state == 'failed' || build.state == 'scheduled'" steps: - - trigger: "kibana-artifacts-container-image" - label: ":docker: Build Kibana Artifacts Container Image" - build: - branch: $BUILDKITE_BRANCH - commit: $BUILDKITE_COMMIT - message: Running PR build for $BUILDKITE_BRANCH + - command: "ts-node .buildkite/scripts/serverless/emergency_release/trigger_container_build.ts" + label: "Trigger container build if there are new commits" + env: + DRY_RUN: $DRY_RUN diff --git a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml index 121785327591..c24a1d504cd8 100644 --- a/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml +++ b/.buildkite/pipelines/quality-gates/pipeline.kibana-tests.yaml @@ -16,6 +16,7 @@ agents: memory: "8G" env: + SKIP_NODE_SETUP: true TEAM_CHANNEL: "#kibana-mission-control" ENVIRONMENT: ${ENVIRONMENT?} diff --git a/.buildkite/pipelines/sonarqube.yml b/.buildkite/pipelines/sonarqube.yml index 827c52815c1f..61e275011140 100644 --- a/.buildkite/pipelines/sonarqube.yml +++ b/.buildkite/pipelines/sonarqube.yml @@ -1,3 +1,7 @@ +env: + SKIP_NODE_SETUP: true + +steps: - label: ":sonarqube: Continuous Code Inspection" agents: image: docker.elastic.co/cloud-ci/sonarqube/buildkite-scanner:latest diff --git a/.buildkite/scripts/common/env.sh b/.buildkite/scripts/common/env.sh index 89c9dce5a3b8..0cdd9451171e 100755 --- a/.buildkite/scripts/common/env.sh +++ b/.buildkite/scripts/common/env.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +echo '--- Setup environment vars' + export CI=true KIBANA_DIR=$(pwd) @@ -70,9 +72,6 @@ export TEST_BROWSER_HEADLESS=1 export ELASTIC_APM_ENVIRONMENT=ci export ELASTIC_APM_TRANSACTION_SAMPLE_RATE=0.1 -export ELASTIC_APM_SERVER_URL=https://kibana-ci-apm.apm.us-central1.gcp.cloud.es.io -# Not really a secret, if APM supported public auth we would use it and APM requires that we use this name -export ELASTIC_APM_SECRET_TOKEN=7YKhoXsO4MzjhXjx2c if is_pr; then if is_pr_with_label "ci:collect-apm"; then diff --git a/.buildkite/scripts/common/setup_buildkite_deps.sh b/.buildkite/scripts/common/setup_buildkite_deps.sh new file mode 100644 index 000000000000..3d826d274694 --- /dev/null +++ b/.buildkite/scripts/common/setup_buildkite_deps.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo '--- Install/build buildkite dependencies' + +if [[ "$(type -t retry)" != "function" ]]; then + source "$(dirname "${BASH_SOURCE[0]}")/util.sh" +fi + +# `rm -rf ; npm install -g ts-node` will cause ts-node bin files to be messed up +# but literally just calling `npm install -g ts-node` a second time fixes it +# this is only on newer versions of npm +npm_install_global ts-node +if ! ts-node --version; then + npm_install_global ts-node + ts-node --version; +fi + +cd '.buildkite' +retry 5 15 npm ci +cd - diff --git a/.buildkite/scripts/common/setup_job_env.sh b/.buildkite/scripts/common/setup_job_env.sh new file mode 100644 index 000000000000..6b07beebcfa9 --- /dev/null +++ b/.buildkite/scripts/common/setup_job_env.sh @@ -0,0 +1,181 @@ +#!/usr/bin/env bash + +set -euo pipefail + +echo '--- Job Environment Setup' + +if [[ "$(type -t vault_get)" != "function" ]]; then + source .buildkite/scripts/common/vault_fns.sh +fi + +# Set up general-purpose tokens and credentials +{ + BUILDKITE_TOKEN="$(vault_get buildkite-ci buildkite_token_all_jobs)" + export BUILDKITE_TOKEN + + GITHUB_TOKEN=$(vault_get kibanamachine github_token) + export GITHUB_TOKEN + + KIBANA_CI_GITHUB_TOKEN=$(vault_get kibana-ci-github github_token) + export KIBANA_CI_GITHUB_TOKEN + + KIBANA_DOCKER_USERNAME="$(vault_get container-registry username)" + export KIBANA_DOCKER_USERNAME + + KIBANA_DOCKER_PASSWORD="$(vault_get container-registry password)" + export KIBANA_DOCKER_PASSWORD +} + +# Set up a custom ES Snapshot Manifest if one has been specified for this build +{ + ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} + export ES_SNAPSHOT_MANIFEST + + if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then + cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest + This build is running using a custom Elasticsearch snapshot. + + ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST + + To use this locally, simply prefix your commands with: + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" + \`\`\` + + e.g. + + \`\`\` + ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js + \`\`\` +EOF + fi +} + +# If a custom manifest isn't specified, then use the default one that we resolve earlier in the build +{ + if [[ ! "${ES_SNAPSHOT_MANIFEST:-}" ]]; then + ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST_DEFAULT --default '')} + export ES_SNAPSHOT_MANIFEST + echo "Using default ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST" + fi +} + +# Setup CI Stats +{ + CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" + export CI_STATS_BUILD_ID + + CI_STATS_TOKEN="$(vault_get kibana_ci_stats api_token)" + export CI_STATS_TOKEN + + CI_STATS_HOST="$(vault_get kibana_ci_stats api_host)" + export CI_STATS_HOST + + if [[ "$CI_STATS_BUILD_ID" ]]; then + echo "CI Stats Build ID: $CI_STATS_BUILD_ID" + + KIBANA_CI_STATS_CONFIG=$(jq -n \ + --arg buildId "$CI_STATS_BUILD_ID" \ + --arg apiUrl "https://$CI_STATS_HOST" \ + --arg apiToken "$CI_STATS_TOKEN" \ + '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ + ) + export KIBANA_CI_STATS_CONFIG + fi +} + +# Set up misc keys +{ + KIBANA_CI_REPORTER_KEY=$(vault_get kibanamachine-reporter value) + export KIBANA_CI_REPORTER_KEY + + EC_API_KEY="$(vault_get kibana-ci-cloud-deploy pr_deploy_api_key)" + export EC_API_KEY + + PROJECT_API_KEY="$(vault_get kibana-ci-project-deploy pr_deploy_api_key)" + export PROJECT_API_KEY + + PROJECT_API_DOMAIN="$(vault_get kibana-ci-project-deploy pr_deploy_domain)" + export PROJECT_API_DOMAIN + + SYNTHETICS_SERVICE_USERNAME="$(vault_get kibana-ci-synthetics-credentials username)" + export SYNTHETICS_SERVICE_USERNAME + + SYNTHETICS_SERVICE_PASSWORD="$(vault_get kibana-ci-synthetics-credentials password)" + export SYNTHETICS_SERVICE_PASSWORD + + SYNTHETICS_SERVICE_MANIFEST="$(vault_get kibana-ci-synthetics-credentials manifest)" + export SYNTHETICS_SERVICE_MANIFEST + + SYNTHETICS_REMOTE_KIBANA_USERNAME="$(vault_get kibana-ci-synthetics-remote-credentials username)" + export SYNTHETICS_REMOTE_KIBANA_USERNAME + + SYNTHETICS_REMOTE_KIBANA_PASSWORD="$(vault_get kibana-ci-synthetics-remote-credentials password)" + export SYNTHETICS_REMOTE_KIBANA_PASSWORD + + SYNTHETICS_REMOTE_KIBANA_URL=${SYNTHETICS_REMOTE_KIBANA_URL-"$(vault_get kibana-ci-synthetics-remote-credentials url)"} + export SYNTHETICS_REMOTE_KIBANA_URL + + DEPLOY_TAGGER_SLACK_WEBHOOK_URL=${DEPLOY_TAGGER_SLACK_WEBHOOK_URL:-"$(vault_get kibana-serverless-release-tools DEPLOY_TAGGER_SLACK_WEBHOOK_URL)"} + export DEPLOY_TAGGER_SLACK_WEBHOOK_URL + + SONAR_LOGIN=$(vault_get sonarqube token) + export SONAR_LOGIN + + ELASTIC_APM_SERVER_URL=$(vault_get project-kibana-ci-apm apm_server_url) + export ELASTIC_APM_SERVER_URL + + ELASTIC_APM_API_KEY=$(vault_get project-kibana-ci-apm apm_server_api_key) + export ELASTIC_APM_API_KEY +} + +# Set up GCS Service Account for CDN +{ + GCS_SA_CDN_KEY="$(vault_get gcs-sa-cdn-prod key)" + export GCS_SA_CDN_KEY + + GCS_SA_CDN_EMAIL="$(vault_get gcs-sa-cdn-prod email)" + export GCS_SA_CDN_EMAIL + + GCS_SA_CDN_BUCKET="$(vault_get gcs-sa-cdn-prod bucket)" + export GCS_SA_CDN_BUCKET + + GCS_SA_CDN_URL="$(vault_get gcs-sa-cdn-prod cdn)" + export GCS_SA_CDN_URL +} + +# Setup Failed Test Reporter Elasticsearch credentials +{ + TEST_FAILURES_ES_CLOUD_ID=$(vault_get failed_tests_reporter_es cloud_id) + export TEST_FAILURES_ES_CLOUD_ID + + TEST_FAILURES_ES_USERNAME=$(vault_get failed_tests_reporter_es username) + export TEST_FAILURES_ES_USERNAME + + TEST_FAILURES_ES_PASSWORD=$(vault_get failed_tests_reporter_es password) + export TEST_FAILURES_ES_PASSWORD +} + +# Setup Bazel Remote/Local Cache Credentials +{ + BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE="$HOME/.kibana-ci-bazel-remote-cache-local-dev.json" + export BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE + vault_get kibana-ci-bazel-remote-cache-local-dev service_account_json > "$BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE" + + BAZEL_REMOTE_CACHE_CREDENTIALS_FILE="$HOME/.kibana-ci-bazel-remote-cache-gcs.json" + export BAZEL_REMOTE_CACHE_CREDENTIALS_FILE + vault_get kibana-ci-bazel-remote-cache-sa-key key | base64 -d > "$BAZEL_REMOTE_CACHE_CREDENTIALS_FILE" +} + +# Setup GCS Service Account Proxy for CI +{ + KIBANA_SERVICE_ACCOUNT_PROXY_KEY="$(mktemp -d)/kibana-gcloud-service-account.json" + export KIBANA_SERVICE_ACCOUNT_PROXY_KEY + vault_get kibana-ci-sa-proxy-key key | base64 -d > "$KIBANA_SERVICE_ACCOUNT_PROXY_KEY" +} + +PIPELINE_PRE_COMMAND=${PIPELINE_PRE_COMMAND:-".buildkite/scripts/lifecycle/pipelines/$BUILDKITE_PIPELINE_SLUG/pre_command.sh"} +if [[ -f "$PIPELINE_PRE_COMMAND" ]]; then + source "$PIPELINE_PRE_COMMAND" +fi diff --git a/.buildkite/scripts/lifecycle/post_command.sh b/.buildkite/scripts/lifecycle/post_command.sh index 91854422855a..218184d36f65 100755 --- a/.buildkite/scripts/lifecycle/post_command.sh +++ b/.buildkite/scripts/lifecycle/post_command.sh @@ -6,8 +6,12 @@ echo '--- Log out of gcloud' ./.buildkite/scripts/common/activate_service_account.sh --unset-impersonation || echo "Failed to unset impersonation" ./.buildkite/scripts/common/activate_service_account.sh --logout-gcloud || echo "Failed to log out of gcloud" -echo '--- Agent Debug Info' -ts-node .buildkite/scripts/lifecycle/print_agent_links.ts || true +if [[ "${SKIP_NODE_SETUP:-}" =~ ^(1|true)$ ]]; then + echo '--- Skipping Agent Debug Info' +else + echo '--- Agent Debug Info' + ts-node .buildkite/scripts/lifecycle/print_agent_links.ts || true +fi IS_TEST_EXECUTION_STEP="$(buildkite-agent meta-data get "${BUILDKITE_JOB_ID}_is_test_execution_step" --default '')" diff --git a/.buildkite/scripts/lifecycle/pre_command.sh b/.buildkite/scripts/lifecycle/pre_command.sh index 6079df9a9add..0ac12e62a7b0 100755 --- a/.buildkite/scripts/lifecycle/pre_command.sh +++ b/.buildkite/scripts/lifecycle/pre_command.sh @@ -3,184 +3,22 @@ set -euo pipefail source .buildkite/scripts/common/util.sh - -echo '--- Setup environment vars' source .buildkite/scripts/common/env.sh -source .buildkite/scripts/common/setup_node.sh - -BUILDKITE_TOKEN="$(vault_get buildkite-ci buildkite_token_all_jobs)" -export BUILDKITE_TOKEN +source .buildkite/scripts/common/setup_job_env.sh -echo '--- Install/build buildkite dependencies' +if [[ "${SKIP_NODE_SETUP:-}" =~ ^(1|true)$ ]]; then + echo "Skipping node setup (SKIP_NODE_SETUP=$SKIP_NODE_SETUP)" +else + source .buildkite/scripts/common/setup_node.sh + source .buildkite/scripts/common/setup_buildkite_deps.sh -# `rm -rf ; npm install -g ts-node` will cause ts-node bin files to be messed up -# but literally just calling `npm install -g ts-node` a second time fixes it -# this is only on newer versions of npm -npm_install_global ts-node -if ! ts-node --version; then - npm_install_global ts-node - ts-node --version; + echo '--- Agent Debug/SSH Info' + ts-node .buildkite/scripts/lifecycle/print_agent_links.ts || true fi -cd '.buildkite' -retry 5 15 npm ci -cd .. - -echo '--- Agent Debug/SSH Info' -ts-node .buildkite/scripts/lifecycle/print_agent_links.ts || true - if [[ "$(curl -is metadata.google.internal || true)" ]]; then echo "" echo "To SSH into this agent, run:" echo "gcloud compute ssh --tunnel-through-iap --project elastic-kibana-ci --zone \"$(curl -sH Metadata-Flavor:Google http://metadata.google.internal/computeMetadata/v1/instance/zone)\" \"$(curl -sH Metadata-Flavor:Google http://metadata.google.internal/computeMetadata/v1/instance/name)\"" echo "" fi - -echo '--- Job Environment Setup' - -# Set up a custom ES Snapshot Manifest if one has been specified for this build -{ - ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST --default '')} - export ES_SNAPSHOT_MANIFEST - - if [[ "${ES_SNAPSHOT_MANIFEST:-}" ]]; then - cat << EOF | buildkite-agent annotate --style "info" --context es-snapshot-manifest - This build is running using a custom Elasticsearch snapshot. - - ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST - - To use this locally, simply prefix your commands with: - - \`\`\` - ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" - \`\`\` - - e.g. - - \`\`\` - ES_SNAPSHOT_MANIFEST="$ES_SNAPSHOT_MANIFEST" node scripts/functional_tests_server.js - \`\`\` -EOF - fi -} - -# If a custom manifest isn't specified, then use the default one that we resolve earlier in the build -{ - if [[ ! "${ES_SNAPSHOT_MANIFEST:-}" ]]; then - ES_SNAPSHOT_MANIFEST=${ES_SNAPSHOT_MANIFEST:-$(buildkite-agent meta-data get ES_SNAPSHOT_MANIFEST_DEFAULT --default '')} - export ES_SNAPSHOT_MANIFEST - echo "Using default ES Snapshot Manifest: $ES_SNAPSHOT_MANIFEST" - fi -} - -# Setup CI Stats -{ - CI_STATS_BUILD_ID="$(buildkite-agent meta-data get ci_stats_build_id --default '')" - export CI_STATS_BUILD_ID - - CI_STATS_TOKEN="$(vault_get kibana_ci_stats api_token)" - export CI_STATS_TOKEN - - CI_STATS_HOST="$(vault_get kibana_ci_stats api_host)" - export CI_STATS_HOST - - if [[ "$CI_STATS_BUILD_ID" ]]; then - echo "CI Stats Build ID: $CI_STATS_BUILD_ID" - - KIBANA_CI_STATS_CONFIG=$(jq -n \ - --arg buildId "$CI_STATS_BUILD_ID" \ - --arg apiUrl "https://$CI_STATS_HOST" \ - --arg apiToken "$CI_STATS_TOKEN" \ - '{buildId: $buildId, apiUrl: $apiUrl, apiToken: $apiToken}' \ - ) - export KIBANA_CI_STATS_CONFIG - fi -} - -GITHUB_TOKEN=$(vault_get kibanamachine github_token) -export GITHUB_TOKEN - -KIBANA_CI_GITHUB_TOKEN=$(vault_get kibana-ci-github github_token) -export KIBANA_CI_GITHUB_TOKEN - -KIBANA_CI_REPORTER_KEY=$(vault_get kibanamachine-reporter value) -export KIBANA_CI_REPORTER_KEY - -KIBANA_DOCKER_USERNAME="$(vault_get container-registry username)" -export KIBANA_DOCKER_USERNAME - -KIBANA_DOCKER_PASSWORD="$(vault_get container-registry password)" -export KIBANA_DOCKER_PASSWORD - -EC_API_KEY="$(vault_get kibana-ci-cloud-deploy pr_deploy_api_key)" -export EC_API_KEY - -PROJECT_API_KEY="$(vault_get kibana-ci-project-deploy pr_deploy_api_key)" -export PROJECT_API_KEY - -PROJECT_API_DOMAIN="$(vault_get kibana-ci-project-deploy pr_deploy_domain)" -export PROJECT_API_DOMAIN - -SYNTHETICS_SERVICE_USERNAME="$(vault_get kibana-ci-synthetics-credentials username)" -export SYNTHETICS_SERVICE_USERNAME - -SYNTHETICS_SERVICE_PASSWORD="$(vault_get kibana-ci-synthetics-credentials password)" -export SYNTHETICS_SERVICE_PASSWORD - -SYNTHETICS_SERVICE_MANIFEST="$(vault_get kibana-ci-synthetics-credentials manifest)" -export SYNTHETICS_SERVICE_MANIFEST - -SYNTHETICS_REMOTE_KIBANA_USERNAME="$(vault_get kibana-ci-synthetics-remote-credentials username)" -export SYNTHETICS_REMOTE_KIBANA_USERNAME - -SYNTHETICS_REMOTE_KIBANA_PASSWORD="$(vault_get kibana-ci-synthetics-remote-credentials password)" -export SYNTHETICS_REMOTE_KIBANA_PASSWORD - -SYNTHETICS_REMOTE_KIBANA_URL=${SYNTHETICS_REMOTE_KIBANA_URL-"$(vault_get kibana-ci-synthetics-remote-credentials url)"} -export SYNTHETICS_REMOTE_KIBANA_URL - -DEPLOY_TAGGER_SLACK_WEBHOOK_URL=${DEPLOY_TAGGER_SLACK_WEBHOOK_URL:-"$(vault_get kibana-serverless-release-tools DEPLOY_TAGGER_SLACK_WEBHOOK_URL)"} -export DEPLOY_TAGGER_SLACK_WEBHOOK_URL - -GCS_SA_CDN_KEY="$(vault_get gcs-sa-cdn-prod key)" -export GCS_SA_CDN_KEY - -GCS_SA_CDN_EMAIL="$(vault_get gcs-sa-cdn-prod email)" -export GCS_SA_CDN_EMAIL - -GCS_SA_CDN_BUCKET="$(vault_get gcs-sa-cdn-prod bucket)" -export GCS_SA_CDN_BUCKET - -GCS_SA_CDN_URL="$(vault_get gcs-sa-cdn-prod cdn)" -export GCS_SA_CDN_URL - -# Setup Failed Test Reporter Elasticsearch credentials -{ - TEST_FAILURES_ES_CLOUD_ID=$(vault_get failed_tests_reporter_es cloud_id) - export TEST_FAILURES_ES_CLOUD_ID - - TEST_FAILURES_ES_USERNAME=$(vault_get failed_tests_reporter_es username) - export TEST_FAILURES_ES_USERNAME - - TEST_FAILURES_ES_PASSWORD=$(vault_get failed_tests_reporter_es password) - export TEST_FAILURES_ES_PASSWORD -} - -BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE="$HOME/.kibana-ci-bazel-remote-cache-local-dev.json" -export BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE -vault_get kibana-ci-bazel-remote-cache-local-dev service_account_json > "$BAZEL_LOCAL_DEV_CACHE_CREDENTIALS_FILE" - -# Export key for accessing bazel remote cache's GCS bucket -BAZEL_REMOTE_CACHE_CREDENTIALS_FILE="$HOME/.kibana-ci-bazel-remote-cache-gcs.json" -export BAZEL_REMOTE_CACHE_CREDENTIALS_FILE -vault_get kibana-ci-bazel-remote-cache-sa-key key | base64 -d > "$BAZEL_REMOTE_CACHE_CREDENTIALS_FILE" - -# Setup GCS Service Account Proxy for CI -KIBANA_SERVICE_ACCOUNT_PROXY_KEY="$(mktemp -d)/kibana-gcloud-service-account.json" -export KIBANA_SERVICE_ACCOUNT_PROXY_KEY -vault_get kibana-ci-sa-proxy-key key | base64 -d > "$KIBANA_SERVICE_ACCOUNT_PROXY_KEY" - -PIPELINE_PRE_COMMAND=${PIPELINE_PRE_COMMAND:-".buildkite/scripts/lifecycle/pipelines/$BUILDKITE_PIPELINE_SLUG/pre_command.sh"} -if [[ -f "$PIPELINE_PRE_COMMAND" ]]; then - source "$PIPELINE_PRE_COMMAND" -fi diff --git a/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts b/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts index 8fa778fe8a67..231977979c41 100644 --- a/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts +++ b/.buildkite/scripts/serverless/create_deploy_tag/generate_gpctl_trigger.ts @@ -20,7 +20,7 @@ async function main() { function uploadTriggerStep(commitSha: string) { const triggerStep: BuildkiteTriggerStep = { - label: ':releasethekaken: Trigger GPCTL / Release Kibana', + label: ':ship: Trigger GPCTL / Release Kibana', trigger: 'gpctl-promote', async: true, build: { diff --git a/.buildkite/scripts/serverless/emergency_release/trigger_container_build.ts b/.buildkite/scripts/serverless/emergency_release/trigger_container_build.ts new file mode 100644 index 000000000000..daf7c904ffd4 --- /dev/null +++ b/.buildkite/scripts/serverless/emergency_release/trigger_container_build.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { execSync } from 'child_process'; +import { BuildkiteClient, BuildkiteTriggerStep } from '#pipeline-utils'; + +const DRY_RUN = !!process.env.DRY_RUN?.match(/^(true|1)$/i); +const buildkite = new BuildkiteClient(); + +async function main() { + const commitSha = process.env.OVERRIDE_COMMIT || process.env.BUILDKITE_COMMIT; + + if (!isCurrentHeadInMain(commitSha!)) { + if (!DRY_RUN) { + console.log( + `DRY_RUN: Commit ${commitSha} isn't in main, triggering container build :green_heart:` + ); + } else { + console.log(`Commit ${commitSha} isn't in main, triggering container build :green_heart:`); + uploadTriggerBuildStep(); + } + } else { + if (!DRY_RUN) { + console.log(`DRY_RUN: Commit ${commitSha} is in main, no build necessary :yellow_heart:`); + } else { + console.log(`Commit ${commitSha} is in main, no trigger necessary :yellow_heart:`); + } + } +} + +function isCurrentHeadInMain(commitSha: string) { + const containmentTest = execSync( + `git branch -r --contains '${commitSha}' | grep -E "(upstream|origin)/main" | wc -l` + ).toString(); + + return parseInt(containmentTest, 10) >= 1; +} + +function uploadTriggerBuildStep() { + const triggerStep: BuildkiteTriggerStep = { + label: ':point_right: Trigger emergency commit container build', + trigger: 'kibana-artifacts-container-image', + build: { + message: `Triggered by '${process.env.BUILDKITE_PIPELINE_NAME || 'unknown'}'`, + env: {}, + }, + }; + + buildkite.uploadSteps([triggerStep]); +} + +main() + .then(() => { + console.log('Trigger container build step uploaded.'); + }) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh b/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh index a0399977457a..6107169c63cb 100755 --- a/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh +++ b/.buildkite/scripts/steps/code_coverage/reporting/downloadPrevSha.sh @@ -2,13 +2,9 @@ set -euo pipefail -# TODO: Safe to remove this after 2024-03-01 (https://github.com/elastic/kibana/issues/175904) -gsutil -m cp -r gs://elastic-bekitzur-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?" - -# TODO: Activate after the above is removed -#.buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live -#gsutil -m cp -r gs://elastic-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?" -#.buildkite/scripts/common/activate_service_account.sh --unset-impersonation +.buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live +gsutil -m cp -r gs://elastic-kibana-coverage-live/previous_pointer/previous.txt . || echo "### Previous Pointer NOT FOUND?" +.buildkite/scripts/common/activate_service_account.sh --unset-impersonation if [ -e ./previous.txt ]; then mv previous.txt downloaded_previous.txt diff --git a/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh b/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh index 2164a4cd6425..18f41bdba64a 100755 --- a/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh +++ b/.buildkite/scripts/steps/code_coverage/reporting/uploadPrevSha.sh @@ -9,9 +9,6 @@ collectPrevious() { } collectPrevious -# TODO: Safe to remove this after 2024-03-01 (https://github.com/elastic/kibana/issues/175904) -gsutil cp previous.txt gs://elastic-bekitzur-kibana-coverage-live/previous_pointer/ - .buildkite/scripts/common/activate_service_account.sh gs://elastic-kibana-coverage-live gsutil cp previous.txt gs://elastic-kibana-coverage-live/previous_pointer/ .buildkite/scripts/common/activate_service_account.sh --unset-impersonation diff --git a/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh b/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh index 701704a3a8b2..ba3b86fed9d3 100755 --- a/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh +++ b/.buildkite/scripts/steps/code_coverage/reporting/uploadStaticSite.sh @@ -4,25 +4,8 @@ set -euo pipefail xs=("$@") -# TODO: Safe to remove this block after 2024-03-01 (https://github.com/elastic/kibana/issues/175904) - also clean up usages -echo "--- Uploading static site (legacy)" -uploadPrefix_old="gs://elastic-bekitzur-kibana-coverage-live/" -uploadPrefixWithTimeStamp_old="${uploadPrefix_old}${TIME_STAMP}/" -uploadBase_old() { - for x in 'src/dev/code_coverage/www/index.html' 'src/dev/code_coverage/www/404.html'; do - gsutil -m -q cp -r -a public-read -z js,css,html "${x}" "${uploadPrefix_old}" - done -} -uploadRest_old() { - for x in "${xs[@]}"; do - gsutil -m -q cp -r -a public-read -z js,css,html "target/kibana-coverage/${x}-combined" "${uploadPrefixWithTimeStamp_old}" - done -} -.buildkite/scripts/common/activate_service_account.sh --logout-gcloud -uploadBase_old -uploadRest_old - echo "--- Uploading static site" + uploadPrefix="gs://elastic-kibana-coverage-live/" uploadPrefixWithTimeStamp="${uploadPrefix}${TIME_STAMP}/" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7ff008e0356d..d37047a85383 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -569,6 +569,7 @@ test/common/plugins/newsfeed @elastic/kibana-core src/plugins/no_data_page @elastic/appex-sharedux x-pack/plugins/notifications @elastic/appex-sharedux packages/kbn-object-versioning @elastic/appex-sharedux +x-pack/plugins/observability_solution/observability_ai_assistant_app @elastic/obs-knowledge-team x-pack/plugins/observability_solution/observability_ai_assistant @elastic/obs-knowledge-team x-pack/packages/observability/alert_details @elastic/obs-ux-management-team x-pack/packages/observability/alerting_test_data @elastic/obs-ux-management-team @@ -1055,7 +1056,6 @@ x-pack/plugins/observability_solution/infra/server/lib/alerting @elastic/obs-ux- /x-pack/test/functional/apps/monitoring @elastic/obs-ux-infra_services-team @elastic/stack-monitoring /x-pack/test/api_integration/apis/monitoring @elastic/obs-ux-infra_services-team @elastic/stack-monitoring /x-pack/test/api_integration/apis/monitoring_collection @elastic/obs-ux-infra_services-team @elastic/stack-monitoring -/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer @elastic/obs-ux-logs-team # Fleet /fleet_packages.json @elastic/fleet @@ -1086,7 +1086,11 @@ x-pack/plugins/observability_solution/infra/server/lib/alerting @elastic/obs-ux- # Logs /x-pack/test/api_integration/apis/logs_ui @elastic/obs-ux-logs-team +/x-pack/test/dataset_quality_api_integration @elastic/obs-ux-logs-team /x-pack/test/functional/apps/observability_logs_explorer @elastic/obs-ux-logs-team +/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer @elastic/obs-ux-logs-team +/x-pack/test/functional/apps/dataset_quality @elastic/obs-ux-logs-team +/x-pack/test_serverless/functional/test_suites/observability/dataset_quality @elastic/obs-ux-logs-team # Observability onboarding tour /x-pack/plugins/observability_solution/observability_shared/public/components/tour @elastic/platform-onboarding diff --git a/api_docs/actions.devdocs.json b/api_docs/actions.devdocs.json index 4fd722c036e8..fa2885287bbc 100644 --- a/api_docs/actions.devdocs.json +++ b/api_docs/actions.devdocs.json @@ -2682,6 +2682,61 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getService", + "type": "Function", + "tags": [], + "label": "getService", + "description": [], + "signature": [ + "((params: ", + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ServiceParams", + "text": "ServiceParams" + }, + ") => ", + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.SubActionConnector", + "text": "SubActionConnector" + }, + ") | undefined" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "actions", + "id": "def-server.ActionType.getService.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + { + "pluginId": "actions", + "scope": "server", + "docId": "kibActionsPluginApi", + "section": "def-server.ServiceParams", + "text": "ServiceParams" + }, + "" + ], + "path": "x-pack/plugins/actions/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6c84218b3500..5537dd212e59 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-o | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 279 | 0 | 273 | 31 | +| 281 | 0 | 275 | 31 | ## Client diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 1369bff2ff25..6a2a3ea26ff7 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_observability.mdx b/api_docs/ai_assistant_management_observability.mdx index 5ba561f0ce7f..52338cc79d08 100644 --- a/api_docs/ai_assistant_management_observability.mdx +++ b/api_docs/ai_assistant_management_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementObservability title: "aiAssistantManagementObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementObservability plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementObservability'] --- import aiAssistantManagementObservabilityObj from './ai_assistant_management_observability.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 768fae761989..e612a3d95494 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-03-11 +date: 2024-03-13 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 97e7a2014401..179b491661a1 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-03-11 +date: 2024-03-13 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 e04b3283ad3a..682853229d16 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index bfdec5f3ee2e..b7cac2784d10 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -418,7 +418,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/transactions/flamegraph\" | \"GET /internal/apm/services/{serviceName}/transactions/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_service_summary\" | \"POST /internal/apm/assistant/get_correlation_values\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" ], "path": "x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -523,7 +523,7 @@ "SavedApmCustomDashboard", ">; } & ", "APMRouteCreateOptions", - "; \"GET /internal/apm/services/{serviceName}/transactions/functions\": { endpoint: \"GET /internal/apm/services/{serviceName}/transactions/functions\"; params?: ", + "; \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -533,6 +533,12 @@ "IntersectionC", "<[", "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", + "TypeC", "<{ environment: ", "UnionC", "<[", @@ -553,25 +559,51 @@ }, ">]>; }>, ", "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; startIndex: ", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>, ", + "TypeC", + "<{ startIndex: ", "Type", "; endIndex: ", "Type", - "; transactionName: ", - "StringC", - "; transactionType: ", - "StringC", - "; }>, ", + "; }>, ", "TypeC", "<{ kuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", "; } & { start: number; end: number; startIndex: number; endIndex: number; transactionName: string; transactionType: string; } & { kuery: string; }; }; }) => Promise<", + ">; } & { documentType: ", + "ApmDocumentType", + ".TransactionMetric | ", + "ApmDocumentType", + ".ServiceTransactionMetric | ", + "ApmDocumentType", + ".TransactionEvent; rollupInterval: ", + "RollupInterval", + "; } & { startIndex: number; endIndex: number; } & { kuery: string; }; }; }) => Promise<{ functions: ", { "pluginId": "@kbn/profiling-utils", "scope": "common", @@ -589,9 +629,9 @@ "section": "def-common.TopNFunctions", "text": "TopNFunctions" }, - " | undefined>; } & ", + "; hostNames: string[]; } | undefined>; } & ", "APMRouteCreateOptions", - "; \"GET /internal/apm/services/{serviceName}/transactions/flamegraph\": { endpoint: \"GET /internal/apm/services/{serviceName}/transactions/flamegraph\"; params?: ", + "; \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -601,9 +641,11 @@ "IntersectionC", "<[", "TypeC", - "<{ kuery: ", - "StringC", - "; }>, ", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>, ", "TypeC", "<{ environment: ", "UnionC", @@ -625,17 +667,45 @@ }, ">]>; }>, ", "TypeC", - "<{ transactionName: ", - "StringC", - "; start: ", - "Type", - "; end: ", - "Type", - "; transactionType: ", + "<{ documentType: ", + "UnionC", + "<[", + "LiteralC", + "<", + "ApmDocumentType", + ".ServiceTransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionMetric>, ", + "LiteralC", + "<", + "ApmDocumentType", + ".TransactionEvent>]>; rollupInterval: ", + "UnionC", + "<[", + "LiteralC", + "<", + "RollupInterval", + ".OneMinute>, ", + "LiteralC", + "<", + "RollupInterval", + ".TenMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".SixtyMinutes>, ", + "LiteralC", + "<", + "RollupInterval", + ".None>]>; }>, ", + "TypeC", + "<{ kuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { kuery: string; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", "; } & { transactionName: string; start: number; end: number; transactionType: string; }; }; }) => Promise<", + ">; } & { documentType: ", + "ApmDocumentType", + ".TransactionMetric | ", + "ApmDocumentType", + ".ServiceTransactionMetric | ", + "ApmDocumentType", + ".TransactionEvent; rollupInterval: ", + "RollupInterval", + "; } & { kuery: string; }; }; }) => Promise<{ flamegraph: ", { "pluginId": "@kbn/profiling-utils", "scope": "common", @@ -653,7 +731,7 @@ "section": "def-common.BaseFlameGraph", "text": "BaseFlameGraph" }, - " | undefined>; } & ", + "; hostNames: string[]; } | undefined>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/services/{serviceName}/profiling/functions\": { endpoint: \"GET /internal/apm/services/{serviceName}/profiling/functions\"; params?: ", "TypeC", @@ -665,12 +743,6 @@ "IntersectionC", "<[", "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; }>, ", - "TypeC", "<{ environment: ", "UnionC", "<[", @@ -690,52 +762,28 @@ "text": "NonEmptyStringBrand" }, ">]>; }>, ", + "PartialC", + "<{ transactionName: ", + "StringC", + "; }>, ", "TypeC", - "<{ documentType: ", - "UnionC", - "<[", - "LiteralC", - "<", - "ApmDocumentType", - ".ServiceTransactionMetric>, ", - "LiteralC", - "<", - "ApmDocumentType", - ".TransactionMetric>, ", - "LiteralC", - "<", - "ApmDocumentType", - ".TransactionEvent>]>; rollupInterval: ", - "UnionC", - "<[", - "LiteralC", - "<", - "RollupInterval", - ".OneMinute>, ", - "LiteralC", - "<", - "RollupInterval", - ".TenMinutes>, ", - "LiteralC", - "<", - "RollupInterval", - ".SixtyMinutes>, ", - "LiteralC", - "<", - "RollupInterval", - ".None>]>; }>, ", - "TypeC", - "<{ startIndex: ", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; startIndex: ", "Type", "; endIndex: ", "Type", - "; }>, ", + "; transactionType: ", + "StringC", + "; }>, ", "TypeC", "<{ kuery: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + " & { params: { path: { serviceName: string; }; query: { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", "; } & { documentType: ", - "ApmDocumentType", - ".TransactionMetric | ", - "ApmDocumentType", - ".ServiceTransactionMetric | ", - "ApmDocumentType", - ".TransactionEvent; rollupInterval: ", - "RollupInterval", - "; } & { startIndex: number; endIndex: number; } & { kuery: string; }; }; }) => Promise<{ functions: ", + ">; } & { transactionName?: string | undefined; } & { start: number; end: number; startIndex: number; endIndex: number; transactionType: string; } & { kuery: string; }; }; }) => Promise<", { "pluginId": "@kbn/profiling-utils", "scope": "common", @@ -761,7 +801,7 @@ "section": "def-common.TopNFunctions", "text": "TopNFunctions" }, - "; hostNames: string[]; } | undefined>; } & ", + " | undefined>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/profiling/status\": { endpoint: \"GET /internal/apm/profiling/status\"; params?: undefined; handler: ({}: ", "APMRouteHandlerResources", @@ -777,11 +817,9 @@ "IntersectionC", "<[", "TypeC", - "<{ start: ", - "Type", - "; end: ", - "Type", - "; }>, ", + "<{ kuery: ", + "StringC", + "; }>, ", "TypeC", "<{ environment: ", "UnionC", @@ -802,46 +840,20 @@ "text": "NonEmptyStringBrand" }, ">]>; }>, ", + "PartialC", + "<{ transactionName: ", + "StringC", + "; }>, ", "TypeC", - "<{ documentType: ", - "UnionC", - "<[", - "LiteralC", - "<", - "ApmDocumentType", - ".ServiceTransactionMetric>, ", - "LiteralC", - "<", - "ApmDocumentType", - ".TransactionMetric>, ", - "LiteralC", - "<", - "ApmDocumentType", - ".TransactionEvent>]>; rollupInterval: ", - "UnionC", - "<[", - "LiteralC", - "<", - "RollupInterval", - ".OneMinute>, ", - "LiteralC", - "<", - "RollupInterval", - ".TenMinutes>, ", - "LiteralC", - "<", - "RollupInterval", - ".SixtyMinutes>, ", - "LiteralC", - "<", - "RollupInterval", - ".None>]>; }>, ", - "TypeC", - "<{ kuery: ", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; transactionType: ", "StringC", "; }>]>; }> | undefined; handler: ({}: ", "APMRouteHandlerResources", - " & { params: { path: { serviceName: string; }; query: { start: number; end: number; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", + " & { params: { path: { serviceName: string; }; query: { kuery: string; } & { environment: \"ENVIRONMENT_NOT_DEFINED\" | \"ENVIRONMENT_ALL\" | ", "Branded", "; } & { documentType: ", - "ApmDocumentType", - ".TransactionMetric | ", - "ApmDocumentType", - ".ServiceTransactionMetric | ", - "ApmDocumentType", - ".TransactionEvent; rollupInterval: ", - "RollupInterval", - "; } & { kuery: string; }; }; }) => Promise<{ flamegraph: ", + ">; } & { transactionName?: string | undefined; } & { start: number; end: number; transactionType: string; }; }; }) => Promise<", { "pluginId": "@kbn/profiling-utils", "scope": "common", @@ -867,7 +871,7 @@ "section": "def-common.BaseFlameGraph", "text": "BaseFlameGraph" }, - "; hostNames: string[]; } | undefined>; } & ", + " | undefined>; } & ", "APMRouteCreateOptions", "; \"GET /internal/apm/assistant/get_downstream_dependencies\": { endpoint: \"GET /internal/apm/assistant/get_downstream_dependencies\"; params?: ", "TypeC", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 499fda091f6a..bbbdbc4e9acc 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-03-11 +date: 2024-03-13 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 1c8274e6ba15..c928e496bfb1 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 010077cb7d93..108d290939c2 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index c5e957b26ee6..ad897f930dee 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index 2688588e9c01..2316e98d09c1 100644 --- a/api_docs/bfetch.mdx +++ b/api_docs/bfetch.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/bfetch title: "bfetch" image: https://source.unsplash.com/400x175/?github description: API docs for the bfetch plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 1363a05a9480..1838ee58f61f 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index 102a94ec712f..5fde56fa05cb 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-03-11 +date: 2024-03-13 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 55bc7ac7e120..4897df4c4b86 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-03-11 +date: 2024-03-13 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 099637146ef8..df5af9031d59 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-03-11 +date: 2024-03-13 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 47fffb64d6e4..bebab0cbb824 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-03-11 +date: 2024-03-13 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 b69dc9bb26af..a34e1859c27b 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index adc0510f9eca..9328c6c2d7bb 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index a2a4ffc570e9..f8b512c0bd92 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-03-11 +date: 2024-03-13 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 fea8fd9c32e2..d8883fb02ede 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-03-11 +date: 2024-03-13 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 381516bb5c97..0f4d73bfaadf 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index e83761396014..38d1a78dcab8 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -181,7 +181,7 @@ "label": "dispatch", "description": [], "signature": [ - "{ setLastSavedInput: (payload: ", + "{ setControlWithInvalidSelectionsId: (payload: string | undefined) => void; setLastSavedInput: (payload: ", { "pluginId": "controls", "scope": "common", @@ -189,7 +189,11 @@ "section": "def-common.PersistableControlGroupInput", "text": "PersistableControlGroupInput" }, - ") => void; setControlWithInvalidSelectionsId: (payload: string | undefined) => void; setControlStyle: (payload: ", + " | undefined) => void; setLastSavedFilters: (payload: ", + "ControlGroupFilterOutput", + " | undefined) => void; setUnpublishedFilters: (payload: ", + "ControlGroupFilterOutput", + " | undefined) => void; setControlStyle: (payload: ", "ControlStyle", ") => void; setChainingSystem: (payload: ", "ControlGroupChainingSystem", @@ -540,6 +544,52 @@ ], "returnComment": [] }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupContainer.setSavedState", + "type": "Function", + "tags": [], + "label": "setSavedState", + "description": [], + "signature": [ + "(lastSavedInput: ", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.PersistableControlGroupInput", + "text": "PersistableControlGroupInput" + }, + ") => void" + ], + "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupContainer.setSavedState.$1", + "type": "Object", + "tags": [], + "label": "lastSavedInput", + "description": [], + "signature": [ + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.PersistableControlGroupInput", + "text": "PersistableControlGroupInput" + } + ], + "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "controls", "id": "def-public.ControlGroupContainer.resetToLastSavedState", @@ -588,7 +638,7 @@ "section": "def-common.ControlGroupInput", "text": "ControlGroupInput" }, - ">, \"id\" | \"controlStyle\" | \"ignoreParentSettings\" | \"panels\" | \"chainingSystem\">" + ">, \"id\" | \"controlStyle\" | \"ignoreParentSettings\" | \"panels\" | \"chainingSystem\" | \"showApplySelections\">" ], "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", "deprecated": false, @@ -1164,6 +1214,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupContainer.publishFilters", + "type": "Function", + "tags": [], + "label": "publishFilters", + "description": [], + "signature": [ + "({ filters, timeslice }: ", + "ControlGroupFilterOutput", + ") => void" + ], + "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupContainer.publishFilters.$1", + "type": "CompoundType", + "tags": [], + "label": "{ filters, timeslice }", + "description": [], + "signature": [ + "ControlGroupFilterOutput" + ], + "path": "src/plugins/controls/public/control_group/embeddable/control_group_container.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "controls", "id": "def-public.ControlGroupContainer.createNewPanelState", @@ -2026,7 +2110,10 @@ "text": "ControlOutput" }, ", any> implements ", - "IClearableControl" + "IClearableControl", + "<", + "ControlInput", + ">" ], "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", "deprecated": false, @@ -2344,6 +2431,56 @@ ], "returnComment": [] }, + { + "parentPluginId": "controls", + "id": "def-public.OptionsListEmbeddable.selectionsToFilters", + "type": "Function", + "tags": [], + "label": "selectionsToFilters", + "description": [], + "signature": [ + "(input: Partial<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.OptionsListEmbeddableInput", + "text": "OptionsListEmbeddableInput" + }, + ">) => Promise<", + "ControlFilterOutput", + ">" + ], + "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.OptionsListEmbeddable.selectionsToFilters.$1", + "type": "Object", + "tags": [], + "label": "input", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.OptionsListEmbeddableInput", + "text": "OptionsListEmbeddableInput" + }, + ">" + ], + "path": "src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "controls", "id": "def-public.OptionsListEmbeddable.clearSelections", @@ -3158,7 +3295,10 @@ "text": "ControlOutput" }, ", any> implements ", - "IClearableControl" + "IClearableControl", + "<", + "ControlInput", + ">" ], "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", "deprecated": false, @@ -3474,6 +3614,56 @@ ], "returnComment": [] }, + { + "parentPluginId": "controls", + "id": "def-public.RangeSliderEmbeddable.selectionsToFilters", + "type": "Function", + "tags": [], + "label": "selectionsToFilters", + "description": [], + "signature": [ + "(input: Partial<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.RangeSliderEmbeddableInput", + "text": "RangeSliderEmbeddableInput" + }, + ">) => Promise<", + "ControlFilterOutput", + ">" + ], + "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "controls", + "id": "def-public.RangeSliderEmbeddable.selectionsToFilters.$1", + "type": "Object", + "tags": [], + "label": "input", + "description": [], + "signature": [ + "Partial<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.RangeSliderEmbeddableInput", + "text": "RangeSliderEmbeddableInput" + }, + ">" + ], + "path": "src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "controls", "id": "def-public.RangeSliderEmbeddable.clearSelections", @@ -4383,69 +4573,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "controls", - "id": "def-public.CommonControlOutput", - "type": "Interface", - "tags": [], - "label": "CommonControlOutput", - "description": [], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "controls", - "id": "def-public.CommonControlOutput.filters", - "type": "Array", - "tags": [], - "label": "filters", - "description": [], - "signature": [ - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.Filter", - "text": "Filter" - }, - "[] | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.CommonControlOutput.dataViewId", - "type": "string", - "tags": [], - "label": "dataViewId", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "controls", - "id": "def-public.CommonControlOutput.timeslice", - "type": "Object", - "tags": [], - "label": "timeslice", - "description": [], - "signature": [ - "[number, number] | undefined" - ], - "path": "src/plugins/controls/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "controls", "id": "def-public.ControlEditorProps", @@ -4671,6 +4798,20 @@ "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-public.ControlGroupInput.showApplySelections", + "type": "CompoundType", + "tags": [], + "label": "showApplySelections", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/control_group/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -5610,6 +5751,24 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "controls", + "id": "def-public.CommonControlOutput", + "type": "Type", + "tags": [], + "label": "CommonControlOutput", + "description": [], + "signature": [ + "ControlFilterOutput", + " & ", + "ControlTimesliceOutput", + " & { dataViewId?: string | undefined; }" + ], + "path": "src/plugins/controls/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "controls", "id": "def-public.CONTROL_GROUP_TYPE", @@ -5640,7 +5799,9 @@ "section": "def-public.IEmbeddable", "text": "IEmbeddable" }, - " & { isChained?: (() => boolean) | undefined; renderPrepend?: (() => React.ReactNode) | undefined; }" + " & { isChained?: (() => boolean) | undefined; renderPrepend?: (() => React.ReactNode) | undefined; selectionsToFilters?: ((input: Partial) => Promise<", + "ControlGroupFilterOutput", + ">) | undefined; }" ], "path": "src/plugins/controls/public/types.ts", "deprecated": false, @@ -5812,15 +5973,11 @@ "section": "def-public.ContainerOutput", "text": "ContainerOutput" }, - " & Omit<", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.CommonControlOutput", - "text": "CommonControlOutput" - }, - ", \"dataViewId\"> & { dataViewIds: string[]; }" + " & ", + "ControlFilterOutput", + " & ", + "ControlTimesliceOutput", + " & { dataViewIds: string[]; }" ], "path": "src/plugins/controls/public/control_group/types.ts", "deprecated": false, @@ -5866,7 +6023,9 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; timeslice?: [number, number] | undefined; controlStyle?: ", + " | undefined; timeslice?: ", + "TimeSlice", + " | undefined; controlStyle?: ", "ControlStyle", " | undefined; ignoreParentSettings?: ", "ParentIgnoreSettings", @@ -5893,13 +6052,10 @@ "text": "EmbeddableOutput" }, " & ", - { - "pluginId": "controls", - "scope": "public", - "docId": "kibControlsPluginApi", - "section": "def-public.CommonControlOutput", - "text": "CommonControlOutput" - } + "ControlFilterOutput", + " & ", + "ControlTimesliceOutput", + " & { dataViewId?: string | undefined; }" ], "path": "src/plugins/controls/public/types.ts", "deprecated": false, @@ -5975,7 +6131,9 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; timeslice?: [number, number] | undefined; controlStyle?: ", + " | undefined; timeslice?: ", + "TimeSlice", + " | undefined; controlStyle?: ", "ControlStyle", " | undefined; ignoreParentSettings?: ", "ParentIgnoreSettings", @@ -6466,7 +6624,7 @@ "ParentIgnoreSettings", " | undefined; chainingSystem: ", "ControlGroupChainingSystem", - "; } | undefined" + "; showApplySelections?: boolean | undefined; } | undefined" ], "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", "deprecated": false, @@ -6571,7 +6729,7 @@ "section": "def-common.PersistableControlGroupInput", "text": "PersistableControlGroupInput" }, - " | undefined) => boolean" + " | undefined, compareSelections?: boolean) => boolean" ], "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", "deprecated": false, @@ -6620,6 +6778,21 @@ "deprecated": false, "trackAdoption": false, "isRequired": false + }, + { + "parentPluginId": "controls", + "id": "def-common.persistableControlGroupInputIsEqual.$3", + "type": "boolean", + "tags": [], + "label": "compareSelections", + "description": [], + "signature": [ + "boolean" + ], + "path": "src/plugins/controls/common/control_group/control_group_persistence.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [], @@ -6905,6 +7078,20 @@ "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "controls", + "id": "def-common.ControlGroupInput.showApplySelections", + "type": "CompoundType", + "tags": [], + "label": "showApplySelections", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "src/plugins/controls/common/control_group/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -7438,7 +7625,9 @@ "section": "def-common.TimeRange", "text": "TimeRange" }, - " | undefined; timeslice?: [number, number] | undefined; controlStyle?: ", + " | undefined; timeslice?: ", + "TimeSlice", + " | undefined; controlStyle?: ", "ControlStyle", " | undefined; ignoreParentSettings?: ", "ParentIgnoreSettings", @@ -7544,7 +7733,7 @@ }, "; chainingSystem: ", "ControlGroupChainingSystem", - "; }" + "; showApplySelections?: boolean | undefined; }" ], "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, @@ -7561,7 +7750,7 @@ "\nOnly parts of the Control Group Input should be persisted" ], "signature": [ - "(\"controlStyle\" | \"ignoreParentSettings\" | \"panels\" | \"chainingSystem\")[]" + "(\"controlStyle\" | \"ignoreParentSettings\" | \"panels\" | \"chainingSystem\" | \"showApplySelections\")[]" ], "path": "src/plugins/controls/common/control_group/types.ts", "deprecated": false, diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index afab8c6b6b6e..9ea5ef9031e7 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.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 | |-------------------|-----------|------------------------|-----------------| -| 332 | 0 | 324 | 16 | +| 340 | 0 | 332 | 20 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 4d7d25e37dc0..fff7e25ccb8a 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-03-11 +date: 2024-03-13 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 361449f99a88..01fcb69b8a2f 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -608,7 +608,13 @@ "label": "AwaitingDashboardAPI", "description": [], "signature": [ - "DashboardContainer", + { + "pluginId": "dashboard", + "scope": "public", + "docId": "kibDashboardPluginApi", + "section": "def-public.DashboardAPI", + "text": "DashboardAPI" + }, " | null" ], "path": "src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts", @@ -669,7 +675,40 @@ "label": "DashboardAPI", "description": [], "signature": [ - "DashboardContainer" + "DashboardContainer", + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasType", + "text": "HasType" + }, + "<\"dashboard\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesLocalUnifiedSearch", + "text": "PublishesLocalUnifiedSearch" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesPanelTitle", + "text": "PublishesPanelTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesSavedObjectId", + "text": "PublishesSavedObjectId" + }, + ">" ], "path": "src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts", "deprecated": false, @@ -1973,25 +2012,17 @@ "label": "DashboardAttributes", "description": [], "signature": [ - "{ controlGroupInput?: ", - { - "pluginId": "controls", - "scope": "common", - "docId": "kibControlsPluginApi", - "section": "def-common.RawControlGroupAttributes", - "text": "RawControlGroupAttributes" - }, - " | undefined; refreshInterval?: ", + "Omit<", { - "pluginId": "data", + "pluginId": "dashboard", "scope": "common", - "docId": "kibDataQueryPluginApi", - "section": "def-common.RefreshInterval", - "text": "RefreshInterval" + "docId": "kibDashboardPluginApi", + "section": "def-common.DashboardAttributes", + "text": "DashboardAttributes" }, - " | undefined; timeRestore: boolean; optionsJSON?: string | undefined; useMargins?: boolean | undefined; description: string; panelsJSON: string; timeFrom?: string | undefined; version: number; timeTo?: string | undefined; title: string; kibanaSavedObjectMeta: { searchSourceJSON: string; }; }" + ", \"controlGroupInput\"> & { controlGroupInput?: ControlGroupAttributesV2 | undefined; }" ], - "path": "src/plugins/dashboard/common/content_management/v1/types.ts", + "path": "src/plugins/dashboard/common/content_management/v2/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 1ada88c7e3c8..89a8df053ba5 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 81d2b0f15555..90e9e836c318 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 0d86872147bb..c82de1c55c3b 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 3ca1cf631448..6bdaaeb8eb5e 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 879cc6a80711..5089c2756715 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 57935a218882..a3efde9e9fa9 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-03-11 +date: 2024-03-13 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 310cac82f896..30190b9d9821 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-03-11 +date: 2024-03-13 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 2a26619383ae..854a23bfc616 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index f1edddf7d18f..af3c446808ff 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 51a460c8d7f4..1bb3230a9578 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-03-11 +date: 2024-03-13 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 68d450f2a08e..17cdc19d4ecc 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-03-11 +date: 2024-03-13 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 9ab9bca5a744..98201fc8bb86 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -22,7 +22,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | actions, ml, savedObjectsTagging, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, ml, dataVisualizer, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, savedObjects, embeddable, visualizations, canvas, graph, ml, @kbn/core-saved-objects-common, @kbn/core-saved-objects-server, actions, alerting, savedSearch, enterpriseSearch, securitySolution, taskManager, @kbn/core-saved-objects-server-internal, @kbn/core-saved-objects-api-server | - | -| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, taskManager, spaces, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, apmDataAccess, visualizations, ml, observability, savedSearch, canvas, fleet, cloudSecurityPosture, logsShared, graph, lists, maps, infra, securitySolution, apm, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | +| | @kbn/core-saved-objects-base-server-internal, @kbn/core-saved-objects-migration-server-internal, @kbn/core-saved-objects-server-internal, @kbn/core-ui-settings-server-internal, @kbn/core-usage-data-server-internal, spaces, taskManager, actions, @kbn/core-saved-objects-migration-server-mocks, share, dataViews, data, alerting, lens, cases, apmDataAccess, visualizations, ml, observability, savedSearch, canvas, fleet, cloudSecurityPosture, logsShared, graph, lists, maps, infra, securitySolution, apm, synthetics, uptime, dashboard, eventAnnotation, links, savedObjectsManagement, @kbn/core-test-helpers-so-type-serializer, @kbn/core-saved-objects-api-server-internal | - | | | stackAlerts, alerting, securitySolution, inputControlVis | - | | | graph, stackAlerts, inputControlVis, securitySolution, savedObjects | - | | | dashboard, dataVisualizer, stackAlerts, expressionPartitionVis | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 18dca14dfec9..aca5e7b79a5b 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 0dbd06eb4ae3..6cf70680d5a2 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 141022bd25c4..1ab80efc44c3 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-03-11 +date: 2024-03-13 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 ffc7d66bdf6f..3c175e610a0b 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-03-11 +date: 2024-03-13 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 953172099ec9..0558e4c25c42 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 6a3d5c586698..a53a9ec8e094 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-03-11 +date: 2024-03-13 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 c8e19dea0f9d..6ebda24a1163 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index e6fe7d3157f4..fbdfaa6630d6 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -7712,7 +7712,7 @@ "tags": [], "label": "EmbeddablePanel", "description": [ - "\nLoads and renders a legacy embeddable." + "\nLoads and renders a legacy embeddable.\n\nAncestry chain must use 'key' attribute to reset DOM and state when embeddable changes\nFor example " ], "signature": [ "(props: ", diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 9cdf7f30d9bf..eec7ccc7d540 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-03-11 +date: 2024-03-13 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 57d3a89ec52c..3b480b36f866 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-03-11 +date: 2024-03-13 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 fe37cdb4407b..92c1a7a7c726 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-03-11 +date: 2024-03-13 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 caff4e864c17..254e40562dbc 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 8e0b761798a0..bf16ab93025b 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 76cbfa9a93fa..1c89cdaaf457 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-03-11 +date: 2024-03-13 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 feaefca6a12f..03ebb1fb5f6f 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-03-11 +date: 2024-03-13 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 cb9ad6b6dfac..154df8c7444c 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json index 7d1c278b1382..fecfc6b9a577 100644 --- a/api_docs/exploratory_view.devdocs.json +++ b/api_docs/exploratory_view.devdocs.json @@ -1341,8 +1341,8 @@ "pluginId": "observabilityAIAssistant", "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantPluginStart", - "text": "ObservabilityAIAssistantPluginStart" + "section": "def-public.ObservabilityAIAssistantPublicStart", + "text": "ObservabilityAIAssistantPublicStart" } ], "path": "x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts", diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index cefb133b56db..cb033c81358d 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-03-11 +date: 2024-03-13 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 a9972f46c975..4c113283337e 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-03-11 +date: 2024-03-13 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 576eeb9401cf..bc366191b378 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 7352f4c26735..f6a224328aa2 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 7ce1ee9e708c..59786f0398fe 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-03-11 +date: 2024-03-13 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 a003ced7bacc..37f51d20b02d 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-03-11 +date: 2024-03-13 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 236871d90577..302717dcda55 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-03-11 +date: 2024-03-13 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 4da1f10a01bc..7cbc9b44c76f 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-03-11 +date: 2024-03-13 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 3219a0f0aa48..c308921a6537 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-03-11 +date: 2024-03-13 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 c39cb69f0555..551528feb539 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-03-11 +date: 2024-03-13 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 f8bd2a4a94fe..ce9d42d3ffd1 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-03-11 +date: 2024-03-13 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 87c45b4b4b6b..2255d15a6f6b 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-03-11 +date: 2024-03-13 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 6dfc9907c412..1d0c401f701f 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-03-11 +date: 2024-03-13 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 54e7e03d88e8..0e2ae04e8659 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-03-11 +date: 2024-03-13 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 1a846cf5043d..2bd30352b756 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 5e7eda58f65d..6f2818de986b 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 9333e63031f9..148dd545131a 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 0361673614b4..0027790c79d8 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-03-11 +date: 2024-03-13 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 933033efc084..51d5cb36e5a8 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-03-11 +date: 2024-03-13 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 1758a967639f..179a12c33037 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-03-11 +date: 2024-03-13 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 ac959cede413..04d57b352912 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -19152,7 +19152,7 @@ "label": "fleet", "description": [], "signature": [ - "{ all: boolean; setup: boolean; readEnrollmentTokens: boolean; readAgentPolicies: boolean; }" + "{ all: boolean; setup: boolean; readEnrollmentTokens: boolean; readAgentPolicies: boolean; allAgentPolicies: boolean; readAgents: boolean; allAgents: boolean; readSettings: boolean; allSettings: boolean; }" ], "path": "x-pack/plugins/fleet/common/authz.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 64c8f30894da..0b9f825dd239 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 62e2bdd24e54..a7b18cb5b34b 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-03-11 +date: 2024-03-13 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 29d859d93878..11b80c873c65 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-03-11 +date: 2024-03-13 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 d1c327ea7e8a..e077b1ddebb6 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-03-11 +date: 2024-03-13 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 28e1aa000e12..580ed8e06919 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 1a5074ccd79d..067e41e33248 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.devdocs.json b/api_docs/index_management.devdocs.json index 17257de39362..a1548fef1c1c 100644 --- a/api_docs/index_management.devdocs.json +++ b/api_docs/index_management.devdocs.json @@ -1152,20 +1152,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "indexManagement", - "id": "def-common.ComponentTemplateDeserialized.isDeprecated", - "type": "CompoundType", - "tags": [], - "label": "isDeprecated", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "x-pack/plugins/index_management/common/types/component_templates.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "indexManagement", "id": "def-common.ComponentTemplateDeserialized._kbnMeta", @@ -2800,13 +2786,10 @@ { "parentPluginId": "indexManagement", "id": "def-common.TemplateDeserialized.allowAutoCreate", - "type": "CompoundType", + "type": "string", "tags": [], "label": "allowAutoCreate", "description": [], - "signature": [ - "boolean | undefined" - ], "path": "x-pack/plugins/index_management/common/types/templates.ts", "deprecated": false, "trackAdoption": false diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 0d7079807d0e..f6212a5d199a 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/platform-deployment-management](https://github.com/orgs/elasti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 225 | 0 | 220 | 3 | +| 224 | 0 | 219 | 3 | ## Client diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index b928c477663a..4680646dc613 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-03-11 +date: 2024-03-13 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 af4636c4cb84..ba6d2bdbc689 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-03-11 +date: 2024-03-13 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 e37a03ff4544..c0e989cc6dfa 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 6e06f0f8bb18..32ffd679906c 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index caf91e85bf1d..fae1ca7a8ba4 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 0edaed5b5086..057b1d4c3138 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index c600645472aa..813b96d1ed28 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_utils.mdx b/api_docs/kbn_aiops_utils.mdx index a57dda3371fa..d79f8e658e19 100644 --- a/api_docs/kbn_aiops_utils.mdx +++ b/api_docs/kbn_aiops_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-utils title: "@kbn/aiops-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-utils'] --- import kbnAiopsUtilsObj from './kbn_aiops_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 24a4b4f2981d..df3db757ea86 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 6a7c987d0932..f1b6519489fd 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-03-11 +date: 2024-03-13 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 163852482993..c741b72f9880 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-03-11 +date: 2024-03-13 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.devdocs.json b/api_docs/kbn_alerts_as_data_utils.devdocs.json index 869b2bf876ef..b59b0fab3cdd 100644 --- a/api_docs/kbn_alerts_as_data_utils.devdocs.json +++ b/api_docs/kbn_alerts_as_data_utils.devdocs.json @@ -196,7 +196,7 @@ "label": "AADAlert", "description": [], "signature": [ - "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" + "({ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }) | ({ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }) | ({} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; })" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/index.ts", "deprecated": false, @@ -211,7 +211,7 @@ "label": "Alert", "description": [], "signature": [ - "{ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{ '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts", "deprecated": false, @@ -241,7 +241,7 @@ "label": "AlertFieldMap", "description": [], "signature": [ - "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.maintenance_window_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly multi_fields: ", + "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.maintenance_window_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.consecutive_matches\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly multi_fields: ", { "pluginId": "@kbn/alerts-as-data-utils", "scope": "common", @@ -264,7 +264,7 @@ "label": "DefaultAlert", "description": [], "signature": [ - "{} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & {} & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/default_schema.ts", "deprecated": false, @@ -330,7 +330,7 @@ "label": "MlAnomalyDetectionAlert", "description": [], "signature": [ - "{ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{ 'kibana.alert.job_id': string; } & { 'kibana.alert.anomaly_score'?: number[] | undefined; 'kibana.alert.anomaly_timestamp'?: string | number | undefined; 'kibana.alert.is_interim'?: boolean | undefined; 'kibana.alert.top_influencers'?: { influencer_field_name?: string | undefined; influencer_field_value?: string | undefined; influencer_score?: number | undefined; initial_influencer_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; timestamp?: string | number | undefined; }[] | undefined; 'kibana.alert.top_records'?: { actual?: number | undefined; by_field_name?: string | undefined; by_field_value?: string | undefined; detector_index?: number | undefined; field_name?: string | undefined; function?: string | undefined; initial_record_score?: number | undefined; is_interim?: boolean | undefined; job_id?: string | undefined; over_field_name?: string | undefined; over_field_value?: string | undefined; partition_field_name?: string | undefined; partition_field_value?: string | undefined; record_score?: number | undefined; timestamp?: string | number | undefined; typical?: number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/ml_anomaly_detection_schema.ts", "deprecated": false, @@ -345,7 +345,7 @@ "label": "MlAnomalyDetectionHealthAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & { 'kibana.alert.datafeed_results'?: { datafeed_id?: string | undefined; datafeed_state?: string | undefined; job_id?: string | undefined; job_state?: string | undefined; }[] | undefined; 'kibana.alert.delayed_data_results'?: { annotation?: string | undefined; end_timestamp?: string | number | undefined; job_id?: string | undefined; missed_docs_count?: string | number | undefined; }[] | undefined; 'kibana.alert.job_errors_results'?: { errors?: unknown; job_id?: string | undefined; }[] | undefined; 'kibana.alert.mml_results'?: { job_id?: string | undefined; log_time?: string | number | undefined; memory_status?: string | undefined; model_bytes?: string | number | undefined; model_bytes_exceeded?: string | number | undefined; model_bytes_memory_limit?: string | number | undefined; peak_model_bytes?: string | number | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/ml_anomaly_detection_health_schema.ts", "deprecated": false, @@ -360,7 +360,7 @@ "label": "ObservabilityApmAlert", "description": [], "signature": [ - "{} & { 'agent.name'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'agent.name'?: string | undefined; 'error.grouping_key'?: string | undefined; 'error.grouping_name'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; labels?: unknown; 'processor.event'?: string | undefined; 'service.environment'?: string | undefined; 'service.language.name'?: string | undefined; 'service.name'?: string | undefined; 'transaction.name'?: string | undefined; 'transaction.type'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_apm_schema.ts", "deprecated": false, @@ -375,7 +375,7 @@ "label": "ObservabilityLogsAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_logs_schema.ts", "deprecated": false, @@ -390,7 +390,7 @@ "label": "ObservabilityMetricsAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_metrics_schema.ts", "deprecated": false, @@ -405,7 +405,7 @@ "label": "ObservabilitySloAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'slo.id'?: string | undefined; 'slo.instanceId'?: string | undefined; 'slo.revision'?: string | number | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_slo_schema.ts", "deprecated": false, @@ -420,7 +420,7 @@ "label": "ObservabilityUptimeAlert", "description": [], "signature": [ - "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{} & { 'agent.name'?: string | undefined; 'anomaly.bucket_span.minutes'?: string | undefined; 'anomaly.start'?: string | number | undefined; 'error.message'?: string | undefined; 'kibana.alert.context'?: unknown; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | number | undefined; 'kibana.alert.evaluation.values'?: (string | number)[] | undefined; 'kibana.alert.group'?: { field?: string[] | undefined; value?: string[] | undefined; }[] | undefined; 'monitor.id'?: string | undefined; 'monitor.name'?: string | undefined; 'monitor.type'?: string | undefined; 'observer.geo.name'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.x509.issuer.common_name'?: string | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.subject.common_name'?: string | undefined; 'url.full'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/observability_uptime_schema.ts", "deprecated": false, @@ -435,7 +435,7 @@ "label": "SecurityAlert", "description": [], "signature": [ - "{ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" + "{ '@timestamp': string | number; 'kibana.alert.ancestors': { depth: string | number; id: string; index: string; type: string; }[]; 'kibana.alert.depth': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.original_event.action': string; 'kibana.alert.original_event.category': string[]; 'kibana.alert.original_event.created': string | number; 'kibana.alert.original_event.dataset': string; 'kibana.alert.original_event.id': string; 'kibana.alert.original_event.ingested': string | number; 'kibana.alert.original_event.kind': string; 'kibana.alert.original_event.module': string; 'kibana.alert.original_event.original': string; 'kibana.alert.original_event.outcome': string; 'kibana.alert.original_event.provider': string; 'kibana.alert.original_event.sequence': string | number; 'kibana.alert.original_event.type': string[]; 'kibana.alert.original_time': string | number; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.false_positives': string[]; 'kibana.alert.rule.max_signals': (string | number)[]; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.threat.framework': string; 'kibana.alert.rule.threat.tactic.id': string; 'kibana.alert.rule.threat.tactic.name': string; 'kibana.alert.rule.threat.tactic.reference': string; 'kibana.alert.rule.threat.technique.id': string; 'kibana.alert.rule.threat.technique.name': string; 'kibana.alert.rule.threat.technique.reference': string; 'kibana.alert.rule.threat.technique.subtechnique.id': string; 'kibana.alert.rule.threat.technique.subtechnique.name': string; 'kibana.alert.rule.threat.technique.subtechnique.reference': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'ecs.version'?: string | undefined; 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'host.asset.criticality'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.ancestors.rule'?: string | undefined; 'kibana.alert.building_block_type'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.group.id'?: string | undefined; 'kibana.alert.group.index'?: number | undefined; 'kibana.alert.host.criticality_level'?: string | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.new_terms'?: string[] | undefined; 'kibana.alert.original_event.agent_id_status'?: string | undefined; 'kibana.alert.original_event.code'?: string | undefined; 'kibana.alert.original_event.duration'?: string | undefined; 'kibana.alert.original_event.end'?: string | number | undefined; 'kibana.alert.original_event.hash'?: string | undefined; 'kibana.alert.original_event.reason'?: string | undefined; 'kibana.alert.original_event.reference'?: string | undefined; 'kibana.alert.original_event.risk_score'?: number | undefined; 'kibana.alert.original_event.risk_score_norm'?: number | undefined; 'kibana.alert.original_event.severity'?: string | number | undefined; 'kibana.alert.original_event.start'?: string | number | undefined; 'kibana.alert.original_event.timezone'?: string | undefined; 'kibana.alert.original_event.url'?: string | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.building_block_type'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.immutable'?: string[] | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.rule.timeline_id'?: string[] | undefined; 'kibana.alert.rule.timeline_title'?: string[] | undefined; 'kibana.alert.rule.timestamp_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.threshold_result.cardinality'?: unknown; 'kibana.alert.threshold_result.count'?: string | number | undefined; 'kibana.alert.threshold_result.from'?: string | number | undefined; 'kibana.alert.threshold_result.terms'?: { field?: string | undefined; value?: string | undefined; }[] | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.user.criticality_level'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.alert.workflow_user'?: string | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; 'user.asset.criticality'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; } & { '@timestamp': string | number; 'ecs.version': string; } & { 'agent.build.original'?: string | undefined; 'agent.ephemeral_id'?: string | undefined; 'agent.id'?: string | undefined; 'agent.name'?: string | undefined; 'agent.type'?: string | undefined; 'agent.version'?: string | undefined; 'client.address'?: string | undefined; 'client.as.number'?: string | number | undefined; 'client.as.organization.name'?: string | undefined; 'client.bytes'?: string | number | undefined; 'client.domain'?: string | undefined; 'client.geo.city_name'?: string | undefined; 'client.geo.continent_code'?: string | undefined; 'client.geo.continent_name'?: string | undefined; 'client.geo.country_iso_code'?: string | undefined; 'client.geo.country_name'?: string | undefined; 'client.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'client.geo.name'?: string | undefined; 'client.geo.postal_code'?: string | undefined; 'client.geo.region_iso_code'?: string | undefined; 'client.geo.region_name'?: string | undefined; 'client.geo.timezone'?: string | undefined; 'client.ip'?: string | undefined; 'client.mac'?: string | undefined; 'client.nat.ip'?: string | undefined; 'client.nat.port'?: string | number | undefined; 'client.packets'?: string | number | undefined; 'client.port'?: string | number | undefined; 'client.registered_domain'?: string | undefined; 'client.subdomain'?: string | undefined; 'client.top_level_domain'?: string | undefined; 'client.user.domain'?: string | undefined; 'client.user.email'?: string | undefined; 'client.user.full_name'?: string | undefined; 'client.user.group.domain'?: string | undefined; 'client.user.group.id'?: string | undefined; 'client.user.group.name'?: string | undefined; 'client.user.hash'?: string | undefined; 'client.user.id'?: string | undefined; 'client.user.name'?: string | undefined; 'client.user.roles'?: string[] | undefined; 'cloud.account.id'?: string | undefined; 'cloud.account.name'?: string | undefined; 'cloud.availability_zone'?: string | undefined; 'cloud.instance.id'?: string | undefined; 'cloud.instance.name'?: string | undefined; 'cloud.machine.type'?: string | undefined; 'cloud.origin.account.id'?: string | undefined; 'cloud.origin.account.name'?: string | undefined; 'cloud.origin.availability_zone'?: string | undefined; 'cloud.origin.instance.id'?: string | undefined; 'cloud.origin.instance.name'?: string | undefined; 'cloud.origin.machine.type'?: string | undefined; 'cloud.origin.project.id'?: string | undefined; 'cloud.origin.project.name'?: string | undefined; 'cloud.origin.provider'?: string | undefined; 'cloud.origin.region'?: string | undefined; 'cloud.origin.service.name'?: string | undefined; 'cloud.project.id'?: string | undefined; 'cloud.project.name'?: string | undefined; 'cloud.provider'?: string | undefined; 'cloud.region'?: string | undefined; 'cloud.service.name'?: string | undefined; 'cloud.target.account.id'?: string | undefined; 'cloud.target.account.name'?: string | undefined; 'cloud.target.availability_zone'?: string | undefined; 'cloud.target.instance.id'?: string | undefined; 'cloud.target.instance.name'?: string | undefined; 'cloud.target.machine.type'?: string | undefined; 'cloud.target.project.id'?: string | undefined; 'cloud.target.project.name'?: string | undefined; 'cloud.target.provider'?: string | undefined; 'cloud.target.region'?: string | undefined; 'cloud.target.service.name'?: string | undefined; 'container.cpu.usage'?: string | number | undefined; 'container.disk.read.bytes'?: string | number | undefined; 'container.disk.write.bytes'?: string | number | undefined; 'container.id'?: string | undefined; 'container.image.hash.all'?: string[] | undefined; 'container.image.name'?: string | undefined; 'container.image.tag'?: string[] | undefined; 'container.labels'?: unknown; 'container.memory.usage'?: string | number | undefined; 'container.name'?: string | undefined; 'container.network.egress.bytes'?: string | number | undefined; 'container.network.ingress.bytes'?: string | number | undefined; 'container.runtime'?: string | undefined; 'container.security_context.privileged'?: boolean | undefined; 'destination.address'?: string | undefined; 'destination.as.number'?: string | number | undefined; 'destination.as.organization.name'?: string | undefined; 'destination.bytes'?: string | number | undefined; 'destination.domain'?: string | undefined; 'destination.geo.city_name'?: string | undefined; 'destination.geo.continent_code'?: string | undefined; 'destination.geo.continent_name'?: string | undefined; 'destination.geo.country_iso_code'?: string | undefined; 'destination.geo.country_name'?: string | undefined; 'destination.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'destination.geo.name'?: string | undefined; 'destination.geo.postal_code'?: string | undefined; 'destination.geo.region_iso_code'?: string | undefined; 'destination.geo.region_name'?: string | undefined; 'destination.geo.timezone'?: string | undefined; 'destination.ip'?: string | undefined; 'destination.mac'?: string | undefined; 'destination.nat.ip'?: string | undefined; 'destination.nat.port'?: string | number | undefined; 'destination.packets'?: string | number | undefined; 'destination.port'?: string | number | undefined; 'destination.registered_domain'?: string | undefined; 'destination.subdomain'?: string | undefined; 'destination.top_level_domain'?: string | undefined; 'destination.user.domain'?: string | undefined; 'destination.user.email'?: string | undefined; 'destination.user.full_name'?: string | undefined; 'destination.user.group.domain'?: string | undefined; 'destination.user.group.id'?: string | undefined; 'destination.user.group.name'?: string | undefined; 'destination.user.hash'?: string | undefined; 'destination.user.id'?: string | undefined; 'destination.user.name'?: string | undefined; 'destination.user.roles'?: string[] | undefined; 'device.id'?: string | undefined; 'device.manufacturer'?: string | undefined; 'device.model.identifier'?: string | undefined; 'device.model.name'?: string | undefined; 'dll.code_signature.digest_algorithm'?: string | undefined; 'dll.code_signature.exists'?: boolean | undefined; 'dll.code_signature.signing_id'?: string | undefined; 'dll.code_signature.status'?: string | undefined; 'dll.code_signature.subject_name'?: string | undefined; 'dll.code_signature.team_id'?: string | undefined; 'dll.code_signature.timestamp'?: string | number | undefined; 'dll.code_signature.trusted'?: boolean | undefined; 'dll.code_signature.valid'?: boolean | undefined; 'dll.hash.md5'?: string | undefined; 'dll.hash.sha1'?: string | undefined; 'dll.hash.sha256'?: string | undefined; 'dll.hash.sha384'?: string | undefined; 'dll.hash.sha512'?: string | undefined; 'dll.hash.ssdeep'?: string | undefined; 'dll.hash.tlsh'?: string | undefined; 'dll.name'?: string | undefined; 'dll.path'?: string | undefined; 'dll.pe.architecture'?: string | undefined; 'dll.pe.company'?: string | undefined; 'dll.pe.description'?: string | undefined; 'dll.pe.file_version'?: string | undefined; 'dll.pe.go_import_hash'?: string | undefined; 'dll.pe.go_imports'?: unknown; 'dll.pe.go_imports_names_entropy'?: string | number | undefined; 'dll.pe.go_imports_names_var_entropy'?: string | number | undefined; 'dll.pe.go_stripped'?: boolean | undefined; 'dll.pe.imphash'?: string | undefined; 'dll.pe.import_hash'?: string | undefined; 'dll.pe.imports'?: unknown[] | undefined; 'dll.pe.imports_names_entropy'?: string | number | undefined; 'dll.pe.imports_names_var_entropy'?: string | number | undefined; 'dll.pe.original_file_name'?: string | undefined; 'dll.pe.pehash'?: string | undefined; 'dll.pe.product'?: string | undefined; 'dll.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'dns.answers'?: { class?: string | undefined; data?: string | undefined; name?: string | undefined; ttl?: string | number | undefined; type?: string | undefined; }[] | undefined; 'dns.header_flags'?: string[] | undefined; 'dns.id'?: string | undefined; 'dns.op_code'?: string | undefined; 'dns.question.class'?: string | undefined; 'dns.question.name'?: string | undefined; 'dns.question.registered_domain'?: string | undefined; 'dns.question.subdomain'?: string | undefined; 'dns.question.top_level_domain'?: string | undefined; 'dns.question.type'?: string | undefined; 'dns.resolved_ip'?: string[] | undefined; 'dns.response_code'?: string | undefined; 'dns.type'?: string | undefined; 'email.attachments'?: { 'file.extension'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.name'?: string | undefined; 'file.size'?: string | number | undefined; }[] | undefined; 'email.bcc.address'?: string[] | undefined; 'email.cc.address'?: string[] | undefined; 'email.content_type'?: string | undefined; 'email.delivery_timestamp'?: string | number | undefined; 'email.direction'?: string | undefined; 'email.from.address'?: string[] | undefined; 'email.local_id'?: string | undefined; 'email.message_id'?: string | undefined; 'email.origination_timestamp'?: string | number | undefined; 'email.reply_to.address'?: string[] | undefined; 'email.sender.address'?: string | undefined; 'email.subject'?: string | undefined; 'email.to.address'?: string[] | undefined; 'email.x_mailer'?: string | undefined; 'error.code'?: string | undefined; 'error.id'?: string | undefined; 'error.message'?: string | undefined; 'error.stack_trace'?: string | undefined; 'error.type'?: string | undefined; 'event.action'?: string | undefined; 'event.agent_id_status'?: string | undefined; 'event.category'?: string[] | undefined; 'event.code'?: string | undefined; 'event.created'?: string | number | undefined; 'event.dataset'?: string | undefined; 'event.duration'?: string | number | undefined; 'event.end'?: string | number | undefined; 'event.hash'?: string | undefined; 'event.id'?: string | undefined; 'event.ingested'?: string | number | undefined; 'event.kind'?: string | undefined; 'event.module'?: string | undefined; 'event.original'?: string | undefined; 'event.outcome'?: string | undefined; 'event.provider'?: string | undefined; 'event.reason'?: string | undefined; 'event.reference'?: string | undefined; 'event.risk_score'?: number | undefined; 'event.risk_score_norm'?: number | undefined; 'event.sequence'?: string | number | undefined; 'event.severity'?: string | number | undefined; 'event.start'?: string | number | undefined; 'event.timezone'?: string | undefined; 'event.type'?: string[] | undefined; 'event.url'?: string | undefined; 'faas.coldstart'?: boolean | undefined; 'faas.execution'?: string | undefined; 'faas.id'?: string | undefined; 'faas.name'?: string | undefined; 'faas.version'?: string | undefined; 'file.accessed'?: string | number | undefined; 'file.attributes'?: string[] | undefined; 'file.code_signature.digest_algorithm'?: string | undefined; 'file.code_signature.exists'?: boolean | undefined; 'file.code_signature.signing_id'?: string | undefined; 'file.code_signature.status'?: string | undefined; 'file.code_signature.subject_name'?: string | undefined; 'file.code_signature.team_id'?: string | undefined; 'file.code_signature.timestamp'?: string | number | undefined; 'file.code_signature.trusted'?: boolean | undefined; 'file.code_signature.valid'?: boolean | undefined; 'file.created'?: string | number | undefined; 'file.ctime'?: string | number | undefined; 'file.device'?: string | undefined; 'file.directory'?: string | undefined; 'file.drive_letter'?: string | undefined; 'file.elf.architecture'?: string | undefined; 'file.elf.byte_order'?: string | undefined; 'file.elf.cpu_type'?: string | undefined; 'file.elf.creation_date'?: string | number | undefined; 'file.elf.exports'?: unknown[] | undefined; 'file.elf.go_import_hash'?: string | undefined; 'file.elf.go_imports'?: unknown; 'file.elf.go_imports_names_entropy'?: string | number | undefined; 'file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'file.elf.go_stripped'?: boolean | undefined; 'file.elf.header.abi_version'?: string | undefined; 'file.elf.header.class'?: string | undefined; 'file.elf.header.data'?: string | undefined; 'file.elf.header.entrypoint'?: string | number | undefined; 'file.elf.header.object_version'?: string | undefined; 'file.elf.header.os_abi'?: string | undefined; 'file.elf.header.type'?: string | undefined; 'file.elf.header.version'?: string | undefined; 'file.elf.import_hash'?: string | undefined; 'file.elf.imports'?: unknown[] | undefined; 'file.elf.imports_names_entropy'?: string | number | undefined; 'file.elf.imports_names_var_entropy'?: string | number | undefined; 'file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'file.elf.shared_libraries'?: string[] | undefined; 'file.elf.telfhash'?: string | undefined; 'file.extension'?: string | undefined; 'file.fork_name'?: string | undefined; 'file.gid'?: string | undefined; 'file.group'?: string | undefined; 'file.hash.md5'?: string | undefined; 'file.hash.sha1'?: string | undefined; 'file.hash.sha256'?: string | undefined; 'file.hash.sha384'?: string | undefined; 'file.hash.sha512'?: string | undefined; 'file.hash.ssdeep'?: string | undefined; 'file.hash.tlsh'?: string | undefined; 'file.inode'?: string | undefined; 'file.macho.go_import_hash'?: string | undefined; 'file.macho.go_imports'?: unknown; 'file.macho.go_imports_names_entropy'?: string | number | undefined; 'file.macho.go_imports_names_var_entropy'?: string | number | undefined; 'file.macho.go_stripped'?: boolean | undefined; 'file.macho.import_hash'?: string | undefined; 'file.macho.imports'?: unknown[] | undefined; 'file.macho.imports_names_entropy'?: string | number | undefined; 'file.macho.imports_names_var_entropy'?: string | number | undefined; 'file.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.macho.symhash'?: string | undefined; 'file.mime_type'?: string | undefined; 'file.mode'?: string | undefined; 'file.mtime'?: string | number | undefined; 'file.name'?: string | undefined; 'file.owner'?: string | undefined; 'file.path'?: string | undefined; 'file.pe.architecture'?: string | undefined; 'file.pe.company'?: string | undefined; 'file.pe.description'?: string | undefined; 'file.pe.file_version'?: string | undefined; 'file.pe.go_import_hash'?: string | undefined; 'file.pe.go_imports'?: unknown; 'file.pe.go_imports_names_entropy'?: string | number | undefined; 'file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'file.pe.go_stripped'?: boolean | undefined; 'file.pe.imphash'?: string | undefined; 'file.pe.import_hash'?: string | undefined; 'file.pe.imports'?: unknown[] | undefined; 'file.pe.imports_names_entropy'?: string | number | undefined; 'file.pe.imports_names_var_entropy'?: string | number | undefined; 'file.pe.original_file_name'?: string | undefined; 'file.pe.pehash'?: string | undefined; 'file.pe.product'?: string | undefined; 'file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'file.size'?: string | number | undefined; 'file.target_path'?: string | undefined; 'file.type'?: string | undefined; 'file.uid'?: string | undefined; 'file.x509.alternative_names'?: string[] | undefined; 'file.x509.issuer.common_name'?: string[] | undefined; 'file.x509.issuer.country'?: string[] | undefined; 'file.x509.issuer.distinguished_name'?: string | undefined; 'file.x509.issuer.locality'?: string[] | undefined; 'file.x509.issuer.organization'?: string[] | undefined; 'file.x509.issuer.organizational_unit'?: string[] | undefined; 'file.x509.issuer.state_or_province'?: string[] | undefined; 'file.x509.not_after'?: string | number | undefined; 'file.x509.not_before'?: string | number | undefined; 'file.x509.public_key_algorithm'?: string | undefined; 'file.x509.public_key_curve'?: string | undefined; 'file.x509.public_key_exponent'?: string | number | undefined; 'file.x509.public_key_size'?: string | number | undefined; 'file.x509.serial_number'?: string | undefined; 'file.x509.signature_algorithm'?: string | undefined; 'file.x509.subject.common_name'?: string[] | undefined; 'file.x509.subject.country'?: string[] | undefined; 'file.x509.subject.distinguished_name'?: string | undefined; 'file.x509.subject.locality'?: string[] | undefined; 'file.x509.subject.organization'?: string[] | undefined; 'file.x509.subject.organizational_unit'?: string[] | undefined; 'file.x509.subject.state_or_province'?: string[] | undefined; 'file.x509.version_number'?: string | undefined; 'group.domain'?: string | undefined; 'group.id'?: string | undefined; 'group.name'?: string | undefined; 'host.architecture'?: string | undefined; 'host.boot.id'?: string | undefined; 'host.cpu.usage'?: string | number | undefined; 'host.disk.read.bytes'?: string | number | undefined; 'host.disk.write.bytes'?: string | number | undefined; 'host.domain'?: string | undefined; 'host.geo.city_name'?: string | undefined; 'host.geo.continent_code'?: string | undefined; 'host.geo.continent_name'?: string | undefined; 'host.geo.country_iso_code'?: string | undefined; 'host.geo.country_name'?: string | undefined; 'host.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'host.geo.name'?: string | undefined; 'host.geo.postal_code'?: string | undefined; 'host.geo.region_iso_code'?: string | undefined; 'host.geo.region_name'?: string | undefined; 'host.geo.timezone'?: string | undefined; 'host.hostname'?: string | undefined; 'host.id'?: string | undefined; 'host.ip'?: string[] | undefined; 'host.mac'?: string[] | undefined; 'host.name'?: string | undefined; 'host.network.egress.bytes'?: string | number | undefined; 'host.network.egress.packets'?: string | number | undefined; 'host.network.ingress.bytes'?: string | number | undefined; 'host.network.ingress.packets'?: string | number | undefined; 'host.os.family'?: string | undefined; 'host.os.full'?: string | undefined; 'host.os.kernel'?: string | undefined; 'host.os.name'?: string | undefined; 'host.os.platform'?: string | undefined; 'host.os.type'?: string | undefined; 'host.os.version'?: string | undefined; 'host.pid_ns_ino'?: string | undefined; 'host.risk.calculated_level'?: string | undefined; 'host.risk.calculated_score'?: number | undefined; 'host.risk.calculated_score_norm'?: number | undefined; 'host.risk.static_level'?: string | undefined; 'host.risk.static_score'?: number | undefined; 'host.risk.static_score_norm'?: number | undefined; 'host.type'?: string | undefined; 'host.uptime'?: string | number | undefined; 'http.request.body.bytes'?: string | number | undefined; 'http.request.body.content'?: string | undefined; 'http.request.bytes'?: string | number | undefined; 'http.request.id'?: string | undefined; 'http.request.method'?: string | undefined; 'http.request.mime_type'?: string | undefined; 'http.request.referrer'?: string | undefined; 'http.response.body.bytes'?: string | number | undefined; 'http.response.body.content'?: string | undefined; 'http.response.bytes'?: string | number | undefined; 'http.response.mime_type'?: string | undefined; 'http.response.status_code'?: string | number | undefined; 'http.version'?: string | undefined; labels?: unknown; 'log.file.path'?: string | undefined; 'log.level'?: string | undefined; 'log.logger'?: string | undefined; 'log.origin.file.line'?: string | number | undefined; 'log.origin.file.name'?: string | undefined; 'log.origin.function'?: string | undefined; 'log.syslog'?: unknown; message?: string | undefined; 'network.application'?: string | undefined; 'network.bytes'?: string | number | undefined; 'network.community_id'?: string | undefined; 'network.direction'?: string | undefined; 'network.forwarded_ip'?: string | undefined; 'network.iana_number'?: string | undefined; 'network.inner'?: unknown; 'network.name'?: string | undefined; 'network.packets'?: string | number | undefined; 'network.protocol'?: string | undefined; 'network.transport'?: string | undefined; 'network.type'?: string | undefined; 'network.vlan.id'?: string | undefined; 'network.vlan.name'?: string | undefined; 'observer.egress'?: unknown; 'observer.geo.city_name'?: string | undefined; 'observer.geo.continent_code'?: string | undefined; 'observer.geo.continent_name'?: string | undefined; 'observer.geo.country_iso_code'?: string | undefined; 'observer.geo.country_name'?: string | undefined; 'observer.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'observer.geo.name'?: string | undefined; 'observer.geo.postal_code'?: string | undefined; 'observer.geo.region_iso_code'?: string | undefined; 'observer.geo.region_name'?: string | undefined; 'observer.geo.timezone'?: string | undefined; 'observer.hostname'?: string | undefined; 'observer.ingress'?: unknown; 'observer.ip'?: string[] | undefined; 'observer.mac'?: string[] | undefined; 'observer.name'?: string | undefined; 'observer.os.family'?: string | undefined; 'observer.os.full'?: string | undefined; 'observer.os.kernel'?: string | undefined; 'observer.os.name'?: string | undefined; 'observer.os.platform'?: string | undefined; 'observer.os.type'?: string | undefined; 'observer.os.version'?: string | undefined; 'observer.product'?: string | undefined; 'observer.serial_number'?: string | undefined; 'observer.type'?: string | undefined; 'observer.vendor'?: string | undefined; 'observer.version'?: string | undefined; 'orchestrator.api_version'?: string | undefined; 'orchestrator.cluster.id'?: string | undefined; 'orchestrator.cluster.name'?: string | undefined; 'orchestrator.cluster.url'?: string | undefined; 'orchestrator.cluster.version'?: string | undefined; 'orchestrator.namespace'?: string | undefined; 'orchestrator.organization'?: string | undefined; 'orchestrator.resource.annotation'?: string[] | undefined; 'orchestrator.resource.id'?: string | undefined; 'orchestrator.resource.ip'?: string[] | undefined; 'orchestrator.resource.label'?: string[] | undefined; 'orchestrator.resource.name'?: string | undefined; 'orchestrator.resource.parent.type'?: string | undefined; 'orchestrator.resource.type'?: string | undefined; 'orchestrator.type'?: string | undefined; 'organization.id'?: string | undefined; 'organization.name'?: string | undefined; 'package.architecture'?: string | undefined; 'package.build_version'?: string | undefined; 'package.checksum'?: string | undefined; 'package.description'?: string | undefined; 'package.install_scope'?: string | undefined; 'package.installed'?: string | number | undefined; 'package.license'?: string | undefined; 'package.name'?: string | undefined; 'package.path'?: string | undefined; 'package.reference'?: string | undefined; 'package.size'?: string | number | undefined; 'package.type'?: string | undefined; 'package.version'?: string | undefined; 'process.args'?: string[] | undefined; 'process.args_count'?: string | number | undefined; 'process.code_signature.digest_algorithm'?: string | undefined; 'process.code_signature.exists'?: boolean | undefined; 'process.code_signature.signing_id'?: string | undefined; 'process.code_signature.status'?: string | undefined; 'process.code_signature.subject_name'?: string | undefined; 'process.code_signature.team_id'?: string | undefined; 'process.code_signature.timestamp'?: string | number | undefined; 'process.code_signature.trusted'?: boolean | undefined; 'process.code_signature.valid'?: boolean | undefined; 'process.command_line'?: string | undefined; 'process.elf.architecture'?: string | undefined; 'process.elf.byte_order'?: string | undefined; 'process.elf.cpu_type'?: string | undefined; 'process.elf.creation_date'?: string | number | undefined; 'process.elf.exports'?: unknown[] | undefined; 'process.elf.go_import_hash'?: string | undefined; 'process.elf.go_imports'?: unknown; 'process.elf.go_imports_names_entropy'?: string | number | undefined; 'process.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.elf.go_stripped'?: boolean | undefined; 'process.elf.header.abi_version'?: string | undefined; 'process.elf.header.class'?: string | undefined; 'process.elf.header.data'?: string | undefined; 'process.elf.header.entrypoint'?: string | number | undefined; 'process.elf.header.object_version'?: string | undefined; 'process.elf.header.os_abi'?: string | undefined; 'process.elf.header.type'?: string | undefined; 'process.elf.header.version'?: string | undefined; 'process.elf.import_hash'?: string | undefined; 'process.elf.imports'?: unknown[] | undefined; 'process.elf.imports_names_entropy'?: string | number | undefined; 'process.elf.imports_names_var_entropy'?: string | number | undefined; 'process.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.elf.shared_libraries'?: string[] | undefined; 'process.elf.telfhash'?: string | undefined; 'process.end'?: string | number | undefined; 'process.entity_id'?: string | undefined; 'process.entry_leader.args'?: string[] | undefined; 'process.entry_leader.args_count'?: string | number | undefined; 'process.entry_leader.attested_groups.name'?: string | undefined; 'process.entry_leader.attested_user.id'?: string | undefined; 'process.entry_leader.attested_user.name'?: string | undefined; 'process.entry_leader.command_line'?: string | undefined; 'process.entry_leader.entity_id'?: string | undefined; 'process.entry_leader.entry_meta.source.ip'?: string | undefined; 'process.entry_leader.entry_meta.type'?: string | undefined; 'process.entry_leader.executable'?: string | undefined; 'process.entry_leader.group.id'?: string | undefined; 'process.entry_leader.group.name'?: string | undefined; 'process.entry_leader.interactive'?: boolean | undefined; 'process.entry_leader.name'?: string | undefined; 'process.entry_leader.parent.entity_id'?: string | undefined; 'process.entry_leader.parent.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.entity_id'?: string | undefined; 'process.entry_leader.parent.session_leader.pid'?: string | number | undefined; 'process.entry_leader.parent.session_leader.start'?: string | number | undefined; 'process.entry_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.entry_leader.parent.start'?: string | number | undefined; 'process.entry_leader.parent.vpid'?: string | number | undefined; 'process.entry_leader.pid'?: string | number | undefined; 'process.entry_leader.real_group.id'?: string | undefined; 'process.entry_leader.real_group.name'?: string | undefined; 'process.entry_leader.real_user.id'?: string | undefined; 'process.entry_leader.real_user.name'?: string | undefined; 'process.entry_leader.same_as_process'?: boolean | undefined; 'process.entry_leader.saved_group.id'?: string | undefined; 'process.entry_leader.saved_group.name'?: string | undefined; 'process.entry_leader.saved_user.id'?: string | undefined; 'process.entry_leader.saved_user.name'?: string | undefined; 'process.entry_leader.start'?: string | number | undefined; 'process.entry_leader.supplemental_groups.id'?: string | undefined; 'process.entry_leader.supplemental_groups.name'?: string | undefined; 'process.entry_leader.tty'?: unknown; 'process.entry_leader.user.id'?: string | undefined; 'process.entry_leader.user.name'?: string | undefined; 'process.entry_leader.vpid'?: string | number | undefined; 'process.entry_leader.working_directory'?: string | undefined; 'process.env_vars'?: string[] | undefined; 'process.executable'?: string | undefined; 'process.exit_code'?: string | number | undefined; 'process.group_leader.args'?: string[] | undefined; 'process.group_leader.args_count'?: string | number | undefined; 'process.group_leader.command_line'?: string | undefined; 'process.group_leader.entity_id'?: string | undefined; 'process.group_leader.executable'?: string | undefined; 'process.group_leader.group.id'?: string | undefined; 'process.group_leader.group.name'?: string | undefined; 'process.group_leader.interactive'?: boolean | undefined; 'process.group_leader.name'?: string | undefined; 'process.group_leader.pid'?: string | number | undefined; 'process.group_leader.real_group.id'?: string | undefined; 'process.group_leader.real_group.name'?: string | undefined; 'process.group_leader.real_user.id'?: string | undefined; 'process.group_leader.real_user.name'?: string | undefined; 'process.group_leader.same_as_process'?: boolean | undefined; 'process.group_leader.saved_group.id'?: string | undefined; 'process.group_leader.saved_group.name'?: string | undefined; 'process.group_leader.saved_user.id'?: string | undefined; 'process.group_leader.saved_user.name'?: string | undefined; 'process.group_leader.start'?: string | number | undefined; 'process.group_leader.supplemental_groups.id'?: string | undefined; 'process.group_leader.supplemental_groups.name'?: string | undefined; 'process.group_leader.tty'?: unknown; 'process.group_leader.user.id'?: string | undefined; 'process.group_leader.user.name'?: string | undefined; 'process.group_leader.vpid'?: string | number | undefined; 'process.group_leader.working_directory'?: string | undefined; 'process.hash.md5'?: string | undefined; 'process.hash.sha1'?: string | undefined; 'process.hash.sha256'?: string | undefined; 'process.hash.sha384'?: string | undefined; 'process.hash.sha512'?: string | undefined; 'process.hash.ssdeep'?: string | undefined; 'process.hash.tlsh'?: string | undefined; 'process.interactive'?: boolean | undefined; 'process.io'?: unknown; 'process.macho.go_import_hash'?: string | undefined; 'process.macho.go_imports'?: unknown; 'process.macho.go_imports_names_entropy'?: string | number | undefined; 'process.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.macho.go_stripped'?: boolean | undefined; 'process.macho.import_hash'?: string | undefined; 'process.macho.imports'?: unknown[] | undefined; 'process.macho.imports_names_entropy'?: string | number | undefined; 'process.macho.imports_names_var_entropy'?: string | number | undefined; 'process.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.macho.symhash'?: string | undefined; 'process.name'?: string | undefined; 'process.parent.args'?: string[] | undefined; 'process.parent.args_count'?: string | number | undefined; 'process.parent.code_signature.digest_algorithm'?: string | undefined; 'process.parent.code_signature.exists'?: boolean | undefined; 'process.parent.code_signature.signing_id'?: string | undefined; 'process.parent.code_signature.status'?: string | undefined; 'process.parent.code_signature.subject_name'?: string | undefined; 'process.parent.code_signature.team_id'?: string | undefined; 'process.parent.code_signature.timestamp'?: string | number | undefined; 'process.parent.code_signature.trusted'?: boolean | undefined; 'process.parent.code_signature.valid'?: boolean | undefined; 'process.parent.command_line'?: string | undefined; 'process.parent.elf.architecture'?: string | undefined; 'process.parent.elf.byte_order'?: string | undefined; 'process.parent.elf.cpu_type'?: string | undefined; 'process.parent.elf.creation_date'?: string | number | undefined; 'process.parent.elf.exports'?: unknown[] | undefined; 'process.parent.elf.go_import_hash'?: string | undefined; 'process.parent.elf.go_imports'?: unknown; 'process.parent.elf.go_imports_names_entropy'?: string | number | undefined; 'process.parent.elf.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.go_stripped'?: boolean | undefined; 'process.parent.elf.header.abi_version'?: string | undefined; 'process.parent.elf.header.class'?: string | undefined; 'process.parent.elf.header.data'?: string | undefined; 'process.parent.elf.header.entrypoint'?: string | number | undefined; 'process.parent.elf.header.object_version'?: string | undefined; 'process.parent.elf.header.os_abi'?: string | undefined; 'process.parent.elf.header.type'?: string | undefined; 'process.parent.elf.header.version'?: string | undefined; 'process.parent.elf.import_hash'?: string | undefined; 'process.parent.elf.imports'?: unknown[] | undefined; 'process.parent.elf.imports_names_entropy'?: string | number | undefined; 'process.parent.elf.imports_names_var_entropy'?: string | number | undefined; 'process.parent.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'process.parent.elf.shared_libraries'?: string[] | undefined; 'process.parent.elf.telfhash'?: string | undefined; 'process.parent.end'?: string | number | undefined; 'process.parent.entity_id'?: string | undefined; 'process.parent.executable'?: string | undefined; 'process.parent.exit_code'?: string | number | undefined; 'process.parent.group.id'?: string | undefined; 'process.parent.group.name'?: string | undefined; 'process.parent.group_leader.entity_id'?: string | undefined; 'process.parent.group_leader.pid'?: string | number | undefined; 'process.parent.group_leader.start'?: string | number | undefined; 'process.parent.group_leader.vpid'?: string | number | undefined; 'process.parent.hash.md5'?: string | undefined; 'process.parent.hash.sha1'?: string | undefined; 'process.parent.hash.sha256'?: string | undefined; 'process.parent.hash.sha384'?: string | undefined; 'process.parent.hash.sha512'?: string | undefined; 'process.parent.hash.ssdeep'?: string | undefined; 'process.parent.hash.tlsh'?: string | undefined; 'process.parent.interactive'?: boolean | undefined; 'process.parent.macho.go_import_hash'?: string | undefined; 'process.parent.macho.go_imports'?: unknown; 'process.parent.macho.go_imports_names_entropy'?: string | number | undefined; 'process.parent.macho.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.go_stripped'?: boolean | undefined; 'process.parent.macho.import_hash'?: string | undefined; 'process.parent.macho.imports'?: unknown[] | undefined; 'process.parent.macho.imports_names_entropy'?: string | number | undefined; 'process.parent.macho.imports_names_var_entropy'?: string | number | undefined; 'process.parent.macho.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.macho.symhash'?: string | undefined; 'process.parent.name'?: string | undefined; 'process.parent.pe.architecture'?: string | undefined; 'process.parent.pe.company'?: string | undefined; 'process.parent.pe.description'?: string | undefined; 'process.parent.pe.file_version'?: string | undefined; 'process.parent.pe.go_import_hash'?: string | undefined; 'process.parent.pe.go_imports'?: unknown; 'process.parent.pe.go_imports_names_entropy'?: string | number | undefined; 'process.parent.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.go_stripped'?: boolean | undefined; 'process.parent.pe.imphash'?: string | undefined; 'process.parent.pe.import_hash'?: string | undefined; 'process.parent.pe.imports'?: unknown[] | undefined; 'process.parent.pe.imports_names_entropy'?: string | number | undefined; 'process.parent.pe.imports_names_var_entropy'?: string | number | undefined; 'process.parent.pe.original_file_name'?: string | undefined; 'process.parent.pe.pehash'?: string | undefined; 'process.parent.pe.product'?: string | undefined; 'process.parent.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.parent.pgid'?: string | number | undefined; 'process.parent.pid'?: string | number | undefined; 'process.parent.real_group.id'?: string | undefined; 'process.parent.real_group.name'?: string | undefined; 'process.parent.real_user.id'?: string | undefined; 'process.parent.real_user.name'?: string | undefined; 'process.parent.saved_group.id'?: string | undefined; 'process.parent.saved_group.name'?: string | undefined; 'process.parent.saved_user.id'?: string | undefined; 'process.parent.saved_user.name'?: string | undefined; 'process.parent.start'?: string | number | undefined; 'process.parent.supplemental_groups.id'?: string | undefined; 'process.parent.supplemental_groups.name'?: string | undefined; 'process.parent.thread.capabilities.effective'?: string[] | undefined; 'process.parent.thread.capabilities.permitted'?: string[] | undefined; 'process.parent.thread.id'?: string | number | undefined; 'process.parent.thread.name'?: string | undefined; 'process.parent.title'?: string | undefined; 'process.parent.tty'?: unknown; 'process.parent.uptime'?: string | number | undefined; 'process.parent.user.id'?: string | undefined; 'process.parent.user.name'?: string | undefined; 'process.parent.vpid'?: string | number | undefined; 'process.parent.working_directory'?: string | undefined; 'process.pe.architecture'?: string | undefined; 'process.pe.company'?: string | undefined; 'process.pe.description'?: string | undefined; 'process.pe.file_version'?: string | undefined; 'process.pe.go_import_hash'?: string | undefined; 'process.pe.go_imports'?: unknown; 'process.pe.go_imports_names_entropy'?: string | number | undefined; 'process.pe.go_imports_names_var_entropy'?: string | number | undefined; 'process.pe.go_stripped'?: boolean | undefined; 'process.pe.imphash'?: string | undefined; 'process.pe.import_hash'?: string | undefined; 'process.pe.imports'?: unknown[] | undefined; 'process.pe.imports_names_entropy'?: string | number | undefined; 'process.pe.imports_names_var_entropy'?: string | number | undefined; 'process.pe.original_file_name'?: string | undefined; 'process.pe.pehash'?: string | undefined; 'process.pe.product'?: string | undefined; 'process.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'process.pgid'?: string | number | undefined; 'process.pid'?: string | number | undefined; 'process.previous.args'?: string[] | undefined; 'process.previous.args_count'?: string | number | undefined; 'process.previous.executable'?: string | undefined; 'process.real_group.id'?: string | undefined; 'process.real_group.name'?: string | undefined; 'process.real_user.id'?: string | undefined; 'process.real_user.name'?: string | undefined; 'process.saved_group.id'?: string | undefined; 'process.saved_group.name'?: string | undefined; 'process.saved_user.id'?: string | undefined; 'process.saved_user.name'?: string | undefined; 'process.session_leader.args'?: string[] | undefined; 'process.session_leader.args_count'?: string | number | undefined; 'process.session_leader.command_line'?: string | undefined; 'process.session_leader.entity_id'?: string | undefined; 'process.session_leader.executable'?: string | undefined; 'process.session_leader.group.id'?: string | undefined; 'process.session_leader.group.name'?: string | undefined; 'process.session_leader.interactive'?: boolean | undefined; 'process.session_leader.name'?: string | undefined; 'process.session_leader.parent.entity_id'?: string | undefined; 'process.session_leader.parent.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.entity_id'?: string | undefined; 'process.session_leader.parent.session_leader.pid'?: string | number | undefined; 'process.session_leader.parent.session_leader.start'?: string | number | undefined; 'process.session_leader.parent.session_leader.vpid'?: string | number | undefined; 'process.session_leader.parent.start'?: string | number | undefined; 'process.session_leader.parent.vpid'?: string | number | undefined; 'process.session_leader.pid'?: string | number | undefined; 'process.session_leader.real_group.id'?: string | undefined; 'process.session_leader.real_group.name'?: string | undefined; 'process.session_leader.real_user.id'?: string | undefined; 'process.session_leader.real_user.name'?: string | undefined; 'process.session_leader.same_as_process'?: boolean | undefined; 'process.session_leader.saved_group.id'?: string | undefined; 'process.session_leader.saved_group.name'?: string | undefined; 'process.session_leader.saved_user.id'?: string | undefined; 'process.session_leader.saved_user.name'?: string | undefined; 'process.session_leader.start'?: string | number | undefined; 'process.session_leader.supplemental_groups.id'?: string | undefined; 'process.session_leader.supplemental_groups.name'?: string | undefined; 'process.session_leader.tty'?: unknown; 'process.session_leader.user.id'?: string | undefined; 'process.session_leader.user.name'?: string | undefined; 'process.session_leader.vpid'?: string | number | undefined; 'process.session_leader.working_directory'?: string | undefined; 'process.start'?: string | number | undefined; 'process.supplemental_groups.id'?: string | undefined; 'process.supplemental_groups.name'?: string | undefined; 'process.thread.capabilities.effective'?: string[] | undefined; 'process.thread.capabilities.permitted'?: string[] | undefined; 'process.thread.id'?: string | number | undefined; 'process.thread.name'?: string | undefined; 'process.title'?: string | undefined; 'process.tty'?: unknown; 'process.uptime'?: string | number | undefined; 'process.user.id'?: string | undefined; 'process.user.name'?: string | undefined; 'process.vpid'?: string | number | undefined; 'process.working_directory'?: string | undefined; 'registry.data.bytes'?: string | undefined; 'registry.data.strings'?: string[] | undefined; 'registry.data.type'?: string | undefined; 'registry.hive'?: string | undefined; 'registry.key'?: string | undefined; 'registry.path'?: string | undefined; 'registry.value'?: string | undefined; 'related.hash'?: string[] | undefined; 'related.hosts'?: string[] | undefined; 'related.ip'?: string[] | undefined; 'related.user'?: string[] | undefined; 'rule.author'?: string[] | undefined; 'rule.category'?: string | undefined; 'rule.description'?: string | undefined; 'rule.id'?: string | undefined; 'rule.license'?: string | undefined; 'rule.name'?: string | undefined; 'rule.reference'?: string | undefined; 'rule.ruleset'?: string | undefined; 'rule.uuid'?: string | undefined; 'rule.version'?: string | undefined; 'server.address'?: string | undefined; 'server.as.number'?: string | number | undefined; 'server.as.organization.name'?: string | undefined; 'server.bytes'?: string | number | undefined; 'server.domain'?: string | undefined; 'server.geo.city_name'?: string | undefined; 'server.geo.continent_code'?: string | undefined; 'server.geo.continent_name'?: string | undefined; 'server.geo.country_iso_code'?: string | undefined; 'server.geo.country_name'?: string | undefined; 'server.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'server.geo.name'?: string | undefined; 'server.geo.postal_code'?: string | undefined; 'server.geo.region_iso_code'?: string | undefined; 'server.geo.region_name'?: string | undefined; 'server.geo.timezone'?: string | undefined; 'server.ip'?: string | undefined; 'server.mac'?: string | undefined; 'server.nat.ip'?: string | undefined; 'server.nat.port'?: string | number | undefined; 'server.packets'?: string | number | undefined; 'server.port'?: string | number | undefined; 'server.registered_domain'?: string | undefined; 'server.subdomain'?: string | undefined; 'server.top_level_domain'?: string | undefined; 'server.user.domain'?: string | undefined; 'server.user.email'?: string | undefined; 'server.user.full_name'?: string | undefined; 'server.user.group.domain'?: string | undefined; 'server.user.group.id'?: string | undefined; 'server.user.group.name'?: string | undefined; 'server.user.hash'?: string | undefined; 'server.user.id'?: string | undefined; 'server.user.name'?: string | undefined; 'server.user.roles'?: string[] | undefined; 'service.address'?: string | undefined; 'service.environment'?: string | undefined; 'service.ephemeral_id'?: string | undefined; 'service.id'?: string | undefined; 'service.name'?: string | undefined; 'service.node.name'?: string | undefined; 'service.node.role'?: string | undefined; 'service.node.roles'?: string[] | undefined; 'service.origin.address'?: string | undefined; 'service.origin.environment'?: string | undefined; 'service.origin.ephemeral_id'?: string | undefined; 'service.origin.id'?: string | undefined; 'service.origin.name'?: string | undefined; 'service.origin.node.name'?: string | undefined; 'service.origin.node.role'?: string | undefined; 'service.origin.node.roles'?: string[] | undefined; 'service.origin.state'?: string | undefined; 'service.origin.type'?: string | undefined; 'service.origin.version'?: string | undefined; 'service.state'?: string | undefined; 'service.target.address'?: string | undefined; 'service.target.environment'?: string | undefined; 'service.target.ephemeral_id'?: string | undefined; 'service.target.id'?: string | undefined; 'service.target.name'?: string | undefined; 'service.target.node.name'?: string | undefined; 'service.target.node.role'?: string | undefined; 'service.target.node.roles'?: string[] | undefined; 'service.target.state'?: string | undefined; 'service.target.type'?: string | undefined; 'service.target.version'?: string | undefined; 'service.type'?: string | undefined; 'service.version'?: string | undefined; 'source.address'?: string | undefined; 'source.as.number'?: string | number | undefined; 'source.as.organization.name'?: string | undefined; 'source.bytes'?: string | number | undefined; 'source.domain'?: string | undefined; 'source.geo.city_name'?: string | undefined; 'source.geo.continent_code'?: string | undefined; 'source.geo.continent_name'?: string | undefined; 'source.geo.country_iso_code'?: string | undefined; 'source.geo.country_name'?: string | undefined; 'source.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'source.geo.name'?: string | undefined; 'source.geo.postal_code'?: string | undefined; 'source.geo.region_iso_code'?: string | undefined; 'source.geo.region_name'?: string | undefined; 'source.geo.timezone'?: string | undefined; 'source.ip'?: string | undefined; 'source.mac'?: string | undefined; 'source.nat.ip'?: string | undefined; 'source.nat.port'?: string | number | undefined; 'source.packets'?: string | number | undefined; 'source.port'?: string | number | undefined; 'source.registered_domain'?: string | undefined; 'source.subdomain'?: string | undefined; 'source.top_level_domain'?: string | undefined; 'source.user.domain'?: string | undefined; 'source.user.email'?: string | undefined; 'source.user.full_name'?: string | undefined; 'source.user.group.domain'?: string | undefined; 'source.user.group.id'?: string | undefined; 'source.user.group.name'?: string | undefined; 'source.user.hash'?: string | undefined; 'source.user.id'?: string | undefined; 'source.user.name'?: string | undefined; 'source.user.roles'?: string[] | undefined; 'span.id'?: string | undefined; tags?: string[] | undefined; 'threat.enrichments'?: { indicator?: unknown; 'matched.atomic'?: string | undefined; 'matched.field'?: string | undefined; 'matched.id'?: string | undefined; 'matched.index'?: string | undefined; 'matched.occurred'?: string | number | undefined; 'matched.type'?: string | undefined; }[] | undefined; 'threat.feed.dashboard_id'?: string | undefined; 'threat.feed.description'?: string | undefined; 'threat.feed.name'?: string | undefined; 'threat.feed.reference'?: string | undefined; 'threat.framework'?: string | undefined; 'threat.group.alias'?: string[] | undefined; 'threat.group.id'?: string | undefined; 'threat.group.name'?: string | undefined; 'threat.group.reference'?: string | undefined; 'threat.indicator.as.number'?: string | number | undefined; 'threat.indicator.as.organization.name'?: string | undefined; 'threat.indicator.confidence'?: string | undefined; 'threat.indicator.description'?: string | undefined; 'threat.indicator.email.address'?: string | undefined; 'threat.indicator.file.accessed'?: string | number | undefined; 'threat.indicator.file.attributes'?: string[] | undefined; 'threat.indicator.file.code_signature.digest_algorithm'?: string | undefined; 'threat.indicator.file.code_signature.exists'?: boolean | undefined; 'threat.indicator.file.code_signature.signing_id'?: string | undefined; 'threat.indicator.file.code_signature.status'?: string | undefined; 'threat.indicator.file.code_signature.subject_name'?: string | undefined; 'threat.indicator.file.code_signature.team_id'?: string | undefined; 'threat.indicator.file.code_signature.timestamp'?: string | number | undefined; 'threat.indicator.file.code_signature.trusted'?: boolean | undefined; 'threat.indicator.file.code_signature.valid'?: boolean | undefined; 'threat.indicator.file.created'?: string | number | undefined; 'threat.indicator.file.ctime'?: string | number | undefined; 'threat.indicator.file.device'?: string | undefined; 'threat.indicator.file.directory'?: string | undefined; 'threat.indicator.file.drive_letter'?: string | undefined; 'threat.indicator.file.elf.architecture'?: string | undefined; 'threat.indicator.file.elf.byte_order'?: string | undefined; 'threat.indicator.file.elf.cpu_type'?: string | undefined; 'threat.indicator.file.elf.creation_date'?: string | number | undefined; 'threat.indicator.file.elf.exports'?: unknown[] | undefined; 'threat.indicator.file.elf.go_import_hash'?: string | undefined; 'threat.indicator.file.elf.go_imports'?: unknown; 'threat.indicator.file.elf.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.go_stripped'?: boolean | undefined; 'threat.indicator.file.elf.header.abi_version'?: string | undefined; 'threat.indicator.file.elf.header.class'?: string | undefined; 'threat.indicator.file.elf.header.data'?: string | undefined; 'threat.indicator.file.elf.header.entrypoint'?: string | number | undefined; 'threat.indicator.file.elf.header.object_version'?: string | undefined; 'threat.indicator.file.elf.header.os_abi'?: string | undefined; 'threat.indicator.file.elf.header.type'?: string | undefined; 'threat.indicator.file.elf.header.version'?: string | undefined; 'threat.indicator.file.elf.import_hash'?: string | undefined; 'threat.indicator.file.elf.imports'?: unknown[] | undefined; 'threat.indicator.file.elf.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.elf.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.elf.sections'?: { chi2?: string | number | undefined; entropy?: string | number | undefined; flags?: string | undefined; name?: string | undefined; physical_offset?: string | undefined; physical_size?: string | number | undefined; type?: string | undefined; var_entropy?: string | number | undefined; virtual_address?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.elf.segments'?: { sections?: string | undefined; type?: string | undefined; }[] | undefined; 'threat.indicator.file.elf.shared_libraries'?: string[] | undefined; 'threat.indicator.file.elf.telfhash'?: string | undefined; 'threat.indicator.file.extension'?: string | undefined; 'threat.indicator.file.fork_name'?: string | undefined; 'threat.indicator.file.gid'?: string | undefined; 'threat.indicator.file.group'?: string | undefined; 'threat.indicator.file.hash.md5'?: string | undefined; 'threat.indicator.file.hash.sha1'?: string | undefined; 'threat.indicator.file.hash.sha256'?: string | undefined; 'threat.indicator.file.hash.sha384'?: string | undefined; 'threat.indicator.file.hash.sha512'?: string | undefined; 'threat.indicator.file.hash.ssdeep'?: string | undefined; 'threat.indicator.file.hash.tlsh'?: string | undefined; 'threat.indicator.file.inode'?: string | undefined; 'threat.indicator.file.mime_type'?: string | undefined; 'threat.indicator.file.mode'?: string | undefined; 'threat.indicator.file.mtime'?: string | number | undefined; 'threat.indicator.file.name'?: string | undefined; 'threat.indicator.file.owner'?: string | undefined; 'threat.indicator.file.path'?: string | undefined; 'threat.indicator.file.pe.architecture'?: string | undefined; 'threat.indicator.file.pe.company'?: string | undefined; 'threat.indicator.file.pe.description'?: string | undefined; 'threat.indicator.file.pe.file_version'?: string | undefined; 'threat.indicator.file.pe.go_import_hash'?: string | undefined; 'threat.indicator.file.pe.go_imports'?: unknown; 'threat.indicator.file.pe.go_imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.go_stripped'?: boolean | undefined; 'threat.indicator.file.pe.imphash'?: string | undefined; 'threat.indicator.file.pe.import_hash'?: string | undefined; 'threat.indicator.file.pe.imports'?: unknown[] | undefined; 'threat.indicator.file.pe.imports_names_entropy'?: string | number | undefined; 'threat.indicator.file.pe.imports_names_var_entropy'?: string | number | undefined; 'threat.indicator.file.pe.original_file_name'?: string | undefined; 'threat.indicator.file.pe.pehash'?: string | undefined; 'threat.indicator.file.pe.product'?: string | undefined; 'threat.indicator.file.pe.sections'?: { entropy?: string | number | undefined; name?: string | undefined; physical_size?: string | number | undefined; var_entropy?: string | number | undefined; virtual_size?: string | number | undefined; }[] | undefined; 'threat.indicator.file.size'?: string | number | undefined; 'threat.indicator.file.target_path'?: string | undefined; 'threat.indicator.file.type'?: string | undefined; 'threat.indicator.file.uid'?: string | undefined; 'threat.indicator.file.x509.alternative_names'?: string[] | undefined; 'threat.indicator.file.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.file.x509.issuer.country'?: string[] | undefined; 'threat.indicator.file.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.file.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.not_after'?: string | number | undefined; 'threat.indicator.file.x509.not_before'?: string | number | undefined; 'threat.indicator.file.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.file.x509.public_key_curve'?: string | undefined; 'threat.indicator.file.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.file.x509.public_key_size'?: string | number | undefined; 'threat.indicator.file.x509.serial_number'?: string | undefined; 'threat.indicator.file.x509.signature_algorithm'?: string | undefined; 'threat.indicator.file.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.file.x509.subject.country'?: string[] | undefined; 'threat.indicator.file.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.file.x509.subject.locality'?: string[] | undefined; 'threat.indicator.file.x509.subject.organization'?: string[] | undefined; 'threat.indicator.file.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.file.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.file.x509.version_number'?: string | undefined; 'threat.indicator.first_seen'?: string | number | undefined; 'threat.indicator.geo.city_name'?: string | undefined; 'threat.indicator.geo.continent_code'?: string | undefined; 'threat.indicator.geo.continent_name'?: string | undefined; 'threat.indicator.geo.country_iso_code'?: string | undefined; 'threat.indicator.geo.country_name'?: string | undefined; 'threat.indicator.geo.location'?: string | { type: string; coordinates: number[]; } | { lat: number; lon: number; } | { location: number[]; } | { location: string; } | undefined; 'threat.indicator.geo.name'?: string | undefined; 'threat.indicator.geo.postal_code'?: string | undefined; 'threat.indicator.geo.region_iso_code'?: string | undefined; 'threat.indicator.geo.region_name'?: string | undefined; 'threat.indicator.geo.timezone'?: string | undefined; 'threat.indicator.ip'?: string | undefined; 'threat.indicator.last_seen'?: string | number | undefined; 'threat.indicator.marking.tlp'?: string | undefined; 'threat.indicator.marking.tlp_version'?: string | undefined; 'threat.indicator.modified_at'?: string | number | undefined; 'threat.indicator.name'?: string | undefined; 'threat.indicator.port'?: string | number | undefined; 'threat.indicator.provider'?: string | undefined; 'threat.indicator.reference'?: string | undefined; 'threat.indicator.registry.data.bytes'?: string | undefined; 'threat.indicator.registry.data.strings'?: string[] | undefined; 'threat.indicator.registry.data.type'?: string | undefined; 'threat.indicator.registry.hive'?: string | undefined; 'threat.indicator.registry.key'?: string | undefined; 'threat.indicator.registry.path'?: string | undefined; 'threat.indicator.registry.value'?: string | undefined; 'threat.indicator.scanner_stats'?: string | number | undefined; 'threat.indicator.sightings'?: string | number | undefined; 'threat.indicator.type'?: string | undefined; 'threat.indicator.url.domain'?: string | undefined; 'threat.indicator.url.extension'?: string | undefined; 'threat.indicator.url.fragment'?: string | undefined; 'threat.indicator.url.full'?: string | undefined; 'threat.indicator.url.original'?: string | undefined; 'threat.indicator.url.password'?: string | undefined; 'threat.indicator.url.path'?: string | undefined; 'threat.indicator.url.port'?: string | number | undefined; 'threat.indicator.url.query'?: string | undefined; 'threat.indicator.url.registered_domain'?: string | undefined; 'threat.indicator.url.scheme'?: string | undefined; 'threat.indicator.url.subdomain'?: string | undefined; 'threat.indicator.url.top_level_domain'?: string | undefined; 'threat.indicator.url.username'?: string | undefined; 'threat.indicator.x509.alternative_names'?: string[] | undefined; 'threat.indicator.x509.issuer.common_name'?: string[] | undefined; 'threat.indicator.x509.issuer.country'?: string[] | undefined; 'threat.indicator.x509.issuer.distinguished_name'?: string | undefined; 'threat.indicator.x509.issuer.locality'?: string[] | undefined; 'threat.indicator.x509.issuer.organization'?: string[] | undefined; 'threat.indicator.x509.issuer.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.issuer.state_or_province'?: string[] | undefined; 'threat.indicator.x509.not_after'?: string | number | undefined; 'threat.indicator.x509.not_before'?: string | number | undefined; 'threat.indicator.x509.public_key_algorithm'?: string | undefined; 'threat.indicator.x509.public_key_curve'?: string | undefined; 'threat.indicator.x509.public_key_exponent'?: string | number | undefined; 'threat.indicator.x509.public_key_size'?: string | number | undefined; 'threat.indicator.x509.serial_number'?: string | undefined; 'threat.indicator.x509.signature_algorithm'?: string | undefined; 'threat.indicator.x509.subject.common_name'?: string[] | undefined; 'threat.indicator.x509.subject.country'?: string[] | undefined; 'threat.indicator.x509.subject.distinguished_name'?: string | undefined; 'threat.indicator.x509.subject.locality'?: string[] | undefined; 'threat.indicator.x509.subject.organization'?: string[] | undefined; 'threat.indicator.x509.subject.organizational_unit'?: string[] | undefined; 'threat.indicator.x509.subject.state_or_province'?: string[] | undefined; 'threat.indicator.x509.version_number'?: string | undefined; 'threat.software.alias'?: string[] | undefined; 'threat.software.id'?: string | undefined; 'threat.software.name'?: string | undefined; 'threat.software.platforms'?: string[] | undefined; 'threat.software.reference'?: string | undefined; 'threat.software.type'?: string | undefined; 'threat.tactic.id'?: string[] | undefined; 'threat.tactic.name'?: string[] | undefined; 'threat.tactic.reference'?: string[] | undefined; 'threat.technique.id'?: string[] | undefined; 'threat.technique.name'?: string[] | undefined; 'threat.technique.reference'?: string[] | undefined; 'threat.technique.subtechnique.id'?: string[] | undefined; 'threat.technique.subtechnique.name'?: string[] | undefined; 'threat.technique.subtechnique.reference'?: string[] | undefined; 'tls.cipher'?: string | undefined; 'tls.client.certificate'?: string | undefined; 'tls.client.certificate_chain'?: string[] | undefined; 'tls.client.hash.md5'?: string | undefined; 'tls.client.hash.sha1'?: string | undefined; 'tls.client.hash.sha256'?: string | undefined; 'tls.client.issuer'?: string | undefined; 'tls.client.ja3'?: string | undefined; 'tls.client.not_after'?: string | number | undefined; 'tls.client.not_before'?: string | number | undefined; 'tls.client.server_name'?: string | undefined; 'tls.client.subject'?: string | undefined; 'tls.client.supported_ciphers'?: string[] | undefined; 'tls.client.x509.alternative_names'?: string[] | undefined; 'tls.client.x509.issuer.common_name'?: string[] | undefined; 'tls.client.x509.issuer.country'?: string[] | undefined; 'tls.client.x509.issuer.distinguished_name'?: string | undefined; 'tls.client.x509.issuer.locality'?: string[] | undefined; 'tls.client.x509.issuer.organization'?: string[] | undefined; 'tls.client.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.client.x509.issuer.state_or_province'?: string[] | undefined; 'tls.client.x509.not_after'?: string | number | undefined; 'tls.client.x509.not_before'?: string | number | undefined; 'tls.client.x509.public_key_algorithm'?: string | undefined; 'tls.client.x509.public_key_curve'?: string | undefined; 'tls.client.x509.public_key_exponent'?: string | number | undefined; 'tls.client.x509.public_key_size'?: string | number | undefined; 'tls.client.x509.serial_number'?: string | undefined; 'tls.client.x509.signature_algorithm'?: string | undefined; 'tls.client.x509.subject.common_name'?: string[] | undefined; 'tls.client.x509.subject.country'?: string[] | undefined; 'tls.client.x509.subject.distinguished_name'?: string | undefined; 'tls.client.x509.subject.locality'?: string[] | undefined; 'tls.client.x509.subject.organization'?: string[] | undefined; 'tls.client.x509.subject.organizational_unit'?: string[] | undefined; 'tls.client.x509.subject.state_or_province'?: string[] | undefined; 'tls.client.x509.version_number'?: string | undefined; 'tls.curve'?: string | undefined; 'tls.established'?: boolean | undefined; 'tls.next_protocol'?: string | undefined; 'tls.resumed'?: boolean | undefined; 'tls.server.certificate'?: string | undefined; 'tls.server.certificate_chain'?: string[] | undefined; 'tls.server.hash.md5'?: string | undefined; 'tls.server.hash.sha1'?: string | undefined; 'tls.server.hash.sha256'?: string | undefined; 'tls.server.issuer'?: string | undefined; 'tls.server.ja3s'?: string | undefined; 'tls.server.not_after'?: string | number | undefined; 'tls.server.not_before'?: string | number | undefined; 'tls.server.subject'?: string | undefined; 'tls.server.x509.alternative_names'?: string[] | undefined; 'tls.server.x509.issuer.common_name'?: string[] | undefined; 'tls.server.x509.issuer.country'?: string[] | undefined; 'tls.server.x509.issuer.distinguished_name'?: string | undefined; 'tls.server.x509.issuer.locality'?: string[] | undefined; 'tls.server.x509.issuer.organization'?: string[] | undefined; 'tls.server.x509.issuer.organizational_unit'?: string[] | undefined; 'tls.server.x509.issuer.state_or_province'?: string[] | undefined; 'tls.server.x509.not_after'?: string | number | undefined; 'tls.server.x509.not_before'?: string | number | undefined; 'tls.server.x509.public_key_algorithm'?: string | undefined; 'tls.server.x509.public_key_curve'?: string | undefined; 'tls.server.x509.public_key_exponent'?: string | number | undefined; 'tls.server.x509.public_key_size'?: string | number | undefined; 'tls.server.x509.serial_number'?: string | undefined; 'tls.server.x509.signature_algorithm'?: string | undefined; 'tls.server.x509.subject.common_name'?: string[] | undefined; 'tls.server.x509.subject.country'?: string[] | undefined; 'tls.server.x509.subject.distinguished_name'?: string | undefined; 'tls.server.x509.subject.locality'?: string[] | undefined; 'tls.server.x509.subject.organization'?: string[] | undefined; 'tls.server.x509.subject.organizational_unit'?: string[] | undefined; 'tls.server.x509.subject.state_or_province'?: string[] | undefined; 'tls.server.x509.version_number'?: string | undefined; 'tls.version'?: string | undefined; 'tls.version_protocol'?: string | undefined; 'trace.id'?: string | undefined; 'transaction.id'?: string | undefined; 'url.domain'?: string | undefined; 'url.extension'?: string | undefined; 'url.fragment'?: string | undefined; 'url.full'?: string | undefined; 'url.original'?: string | undefined; 'url.password'?: string | undefined; 'url.path'?: string | undefined; 'url.port'?: string | number | undefined; 'url.query'?: string | undefined; 'url.registered_domain'?: string | undefined; 'url.scheme'?: string | undefined; 'url.subdomain'?: string | undefined; 'url.top_level_domain'?: string | undefined; 'url.username'?: string | undefined; 'user.changes.domain'?: string | undefined; 'user.changes.email'?: string | undefined; 'user.changes.full_name'?: string | undefined; 'user.changes.group.domain'?: string | undefined; 'user.changes.group.id'?: string | undefined; 'user.changes.group.name'?: string | undefined; 'user.changes.hash'?: string | undefined; 'user.changes.id'?: string | undefined; 'user.changes.name'?: string | undefined; 'user.changes.roles'?: string[] | undefined; 'user.domain'?: string | undefined; 'user.effective.domain'?: string | undefined; 'user.effective.email'?: string | undefined; 'user.effective.full_name'?: string | undefined; 'user.effective.group.domain'?: string | undefined; 'user.effective.group.id'?: string | undefined; 'user.effective.group.name'?: string | undefined; 'user.effective.hash'?: string | undefined; 'user.effective.id'?: string | undefined; 'user.effective.name'?: string | undefined; 'user.effective.roles'?: string[] | undefined; 'user.email'?: string | undefined; 'user.full_name'?: string | undefined; 'user.group.domain'?: string | undefined; 'user.group.id'?: string | undefined; 'user.group.name'?: string | undefined; 'user.hash'?: string | undefined; 'user.id'?: string | undefined; 'user.name'?: string | undefined; 'user.risk.calculated_level'?: string | undefined; 'user.risk.calculated_score'?: number | undefined; 'user.risk.calculated_score_norm'?: number | undefined; 'user.risk.static_level'?: string | undefined; 'user.risk.static_score'?: number | undefined; 'user.risk.static_score_norm'?: number | undefined; 'user.roles'?: string[] | undefined; 'user.target.domain'?: string | undefined; 'user.target.email'?: string | undefined; 'user.target.full_name'?: string | undefined; 'user.target.group.domain'?: string | undefined; 'user.target.group.id'?: string | undefined; 'user.target.group.name'?: string | undefined; 'user.target.hash'?: string | undefined; 'user.target.id'?: string | undefined; 'user.target.name'?: string | undefined; 'user.target.roles'?: string[] | undefined; 'user_agent.device.name'?: string | undefined; 'user_agent.name'?: string | undefined; 'user_agent.original'?: string | undefined; 'user_agent.os.family'?: string | undefined; 'user_agent.os.full'?: string | undefined; 'user_agent.os.kernel'?: string | undefined; 'user_agent.os.name'?: string | undefined; 'user_agent.os.platform'?: string | undefined; 'user_agent.os.type'?: string | undefined; 'user_agent.os.version'?: string | undefined; 'user_agent.version'?: string | undefined; 'vulnerability.category'?: string[] | undefined; 'vulnerability.classification'?: string | undefined; 'vulnerability.description'?: string | undefined; 'vulnerability.enumeration'?: string | undefined; 'vulnerability.id'?: string | undefined; 'vulnerability.reference'?: string | undefined; 'vulnerability.report_id'?: string | undefined; 'vulnerability.scanner.vendor'?: string | undefined; 'vulnerability.score.base'?: number | undefined; 'vulnerability.score.environmental'?: number | undefined; 'vulnerability.score.temporal'?: number | undefined; 'vulnerability.score.version'?: string | undefined; 'vulnerability.severity'?: string | undefined; } & {} & { 'ecs.version'?: string | undefined; 'kibana.alert.risk_score'?: number | undefined; 'kibana.alert.rule.author'?: string | undefined; 'kibana.alert.rule.created_at'?: string | number | undefined; 'kibana.alert.rule.created_by'?: string | undefined; 'kibana.alert.rule.description'?: string | undefined; 'kibana.alert.rule.enabled'?: string | undefined; 'kibana.alert.rule.from'?: string | undefined; 'kibana.alert.rule.interval'?: string | undefined; 'kibana.alert.rule.license'?: string | undefined; 'kibana.alert.rule.note'?: string | undefined; 'kibana.alert.rule.references'?: string[] | undefined; 'kibana.alert.rule.rule_id'?: string | undefined; 'kibana.alert.rule.rule_name_override'?: string | undefined; 'kibana.alert.rule.to'?: string | undefined; 'kibana.alert.rule.type'?: string | undefined; 'kibana.alert.rule.updated_at'?: string | number | undefined; 'kibana.alert.rule.updated_by'?: string | undefined; 'kibana.alert.rule.version'?: string | undefined; 'kibana.alert.severity'?: string | undefined; 'kibana.alert.suppression.docs_count'?: string | number | undefined; 'kibana.alert.suppression.end'?: string | number | undefined; 'kibana.alert.suppression.start'?: string | number | undefined; 'kibana.alert.suppression.terms.field'?: string[] | undefined; 'kibana.alert.suppression.terms.value'?: string[] | undefined; 'kibana.alert.system_status'?: string | undefined; 'kibana.alert.workflow_reason'?: string | undefined; 'kibana.alert.workflow_status_updated_at'?: string | number | undefined; 'kibana.alert.workflow_user'?: string | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts", "deprecated": false, @@ -450,7 +450,7 @@ "label": "StackAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.evaluation.conditions'?: string | undefined; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | undefined; 'kibana.alert.title'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & { 'kibana.alert.evaluation.conditions'?: string | undefined; 'kibana.alert.evaluation.threshold'?: string | number | undefined; 'kibana.alert.evaluation.value'?: string | undefined; 'kibana.alert.title'?: string | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/stack_schema.ts", "deprecated": false, @@ -465,7 +465,7 @@ "label": "TransformHealthAlert", "description": [], "signature": [ - "{} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" + "{} & { 'kibana.alert.results'?: { description?: string | undefined; health_status?: string | undefined; issues?: unknown; node_name?: string | undefined; transform_id?: string | undefined; transform_state?: string | undefined; }[] | undefined; } & { '@timestamp': string | number; 'kibana.alert.instance.id': string; 'kibana.alert.rule.category': string; 'kibana.alert.rule.consumer': string; 'kibana.alert.rule.name': string; 'kibana.alert.rule.producer': string; 'kibana.alert.rule.revision': string | number; 'kibana.alert.rule.rule_type_id': string; 'kibana.alert.rule.uuid': string; 'kibana.alert.status': string; 'kibana.alert.uuid': string; 'kibana.space_ids': string[]; } & { 'event.action'?: string | undefined; 'event.kind'?: string | undefined; 'kibana.alert.action_group'?: string | undefined; 'kibana.alert.case_ids'?: string[] | undefined; 'kibana.alert.consecutive_matches'?: string | number | undefined; 'kibana.alert.duration.us'?: string | number | undefined; 'kibana.alert.end'?: string | number | undefined; 'kibana.alert.flapping'?: boolean | undefined; 'kibana.alert.flapping_history'?: boolean[] | undefined; 'kibana.alert.last_detected'?: string | number | undefined; 'kibana.alert.maintenance_window_ids'?: string[] | undefined; 'kibana.alert.reason'?: string | undefined; 'kibana.alert.rule.execution.uuid'?: string | undefined; 'kibana.alert.rule.parameters'?: unknown; 'kibana.alert.rule.tags'?: string[] | undefined; 'kibana.alert.start'?: string | number | undefined; 'kibana.alert.time_range'?: { gte?: string | number | undefined; lte?: string | number | undefined; } | undefined; 'kibana.alert.url'?: string | undefined; 'kibana.alert.workflow_assignee_ids'?: string[] | undefined; 'kibana.alert.workflow_status'?: string | undefined; 'kibana.alert.workflow_tags'?: string[] | undefined; 'kibana.version'?: string | undefined; tags?: string[] | undefined; }" ], "path": "packages/kbn-alerts-as-data-utils/src/schemas/generated/transform_health_schema.ts", "deprecated": false, @@ -482,7 +482,7 @@ "label": "alertFieldMap", "description": [], "signature": [ - "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.maintenance_window_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly multi_fields: ", + "{ readonly \"kibana.alert.action_group\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.case_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.duration.us\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.end\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping\": { readonly type: \"boolean\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.flapping_history\": { readonly type: \"boolean\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.maintenance_window_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.consecutive_matches\": { readonly type: \"long\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.instance.id\": { readonly type: \"keyword\"; readonly array: false; readonly required: true; }; readonly \"kibana.alert.last_detected\": { readonly type: \"date\"; readonly required: false; readonly array: false; }; readonly \"kibana.alert.reason\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; readonly multi_fields: ", { "pluginId": "@kbn/alerts-as-data-utils", "scope": "common", diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index f8a2567bcb87..6530056c9f6a 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 66ec9b67b79d..fb8bc2f0e847 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-03-11 +date: 2024-03-13 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 19de89b592de..6f5df3094918 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.devdocs.json b/api_docs/kbn_analytics_client.devdocs.json index 68d5d3159f9f..7c98f0472f4e 100644 --- a/api_docs/kbn_analytics_client.devdocs.json +++ b/api_docs/kbn_analytics_client.devdocs.json @@ -894,10 +894,6 @@ "plugin": "apm", "path": "x-pack/plugins/observability_solution/apm/public/services/telemetry/telemetry_client.ts" }, - { - "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx" - }, { "plugin": "observabilityAIAssistant", "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.test.ts" @@ -1082,14 +1078,6 @@ "plugin": "@kbn/core-analytics-server-mocks", "path": "packages/core/analytics/core-analytics-server-mocks/src/analytics_service.mock.ts" }, - { - "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts" - }, - { - "plugin": "observabilityAIAssistant", - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts" - }, { "plugin": "@kbn/core-analytics-browser-internal", "path": "packages/core/analytics/core-analytics-browser-internal/src/analytics_service.test.mocks.ts" diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 3e7fa8254565..20282ff065a1 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 3a14e8b91017..e9453eb5e2d6 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 8850b2ed0c0e..86741f3cca85 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 2aa5fcdb5220..ecac0891f976 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index dea6f211d557..46b1533a4dfa 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 183e326717cb..fc19d56598ec 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 21015ce081c8..91568f583f99 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 6d56005ff387..d0d17dbf6d93 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-03-11 +date: 2024-03-13 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 f0ca6c7d415a..3de972badb86 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 0526ca6930a6..8a5519180024 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 144a1a6d338d..9f7d780e341c 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index b72879c2877f..f81edbf8df45 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 4024eb717bf7..9119957079a4 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-03-11 +date: 2024-03-13 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 15f072839edb..921b49a76a7a 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-03-11 +date: 2024-03-13 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 62d3eb36add2..d3d2085a36c6 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index d1211db762e0..888fb4472fec 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-03-11 +date: 2024-03-13 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 43b146f18bad..200bad1f0871 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-03-11 +date: 2024-03-13 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 2ce84a19feb0..98c1c3b01833 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 4d99633ed8e4..97d033c0a578 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-03-11 +date: 2024-03-13 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 ba29313e6765..7b3a5a64d824 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-03-11 +date: 2024-03-13 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 4b9b949e6da0..0aceebc960be 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-03-11 +date: 2024-03-13 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 7348a45d5c7b..5147d7bc5883 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index bad5e15f4cc0..53b20d176abd 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-03-11 +date: 2024-03-13 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 838538ce2791..66ed7f0ac855 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-03-11 +date: 2024-03-13 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 6891dd2af98f..4432026606c4 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-03-11 +date: 2024-03-13 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 0362756c0645..a02a10834d6a 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-03-11 +date: 2024-03-13 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 16a321a5eecb..03ccb530ba63 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-03-11 +date: 2024-03-13 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 9f8bea94e5dc..71d58e334604 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 0c08802d3e75..3df4cc30a54a 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-03-11 +date: 2024-03-13 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 b099b1c7c190..a200dc004208 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 6f141b46c407..b2f9adc10126 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-03-11 +date: 2024-03-13 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 7c3520bc22c4..c77412e15a75 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-03-11 +date: 2024-03-13 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 378a7638d16a..31d90bdbe16c 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-03-11 +date: 2024-03-13 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 991c0cb876ed..5e35942593b6 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 8dcfe3746a64..c03b2e2b3ec7 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 3cbcf73cba2b..c05663d95c35 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 58b656c99b7a..88c5701783f5 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 b6556b1143e5..88b47eaf7c2f 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 530f3ab35921..4096ffadd463 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-03-11 +date: 2024-03-13 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 7d3fa9417d7b..0599d00c9281 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 481d56f376ac..df34fdebc93d 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 4553e62b57d0..30182e40d1e4 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 214921c06010..07ec4b5f0cec 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 d50056f1666e..d1632f501cd9 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 99c37469597e..787669bc994c 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-03-11 +date: 2024-03-13 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 b565b7424bf1..feea283f3f46 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 d4d5adcfc7f8..9d31bccb6171 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 9d821d4c5322..8f49430dc6eb 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 497ba8cd2714..0aed2c4bbd40 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 4a807d537475..8e0f84ff0f54 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-03-11 +date: 2024-03-13 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 8effbf2622aa..1db4527ac2ec 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 c9f9d0cbe7fd..afcca28aec08 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 93013acb0b7b..971e45c7f700 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 73578f22a0da..534df8cc5d2a 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-03-11 +date: 2024-03-13 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 f6d0f0055337..d1c7c6221904 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-03-11 +date: 2024-03-13 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 8f7918ae3a88..22af86b282e1 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 9a70acdfc6aa..26a83e2ba283 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 e79fc2bcb31a..e2c97dbcd707 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 1ed9cd4142af..2084ce9ef99f 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 ded50dd06822..abbe4def95de 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 e3859d644ff3..eec883a56b67 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 a2806d664d3a..9daa641b47ab 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 f5643ba047f5..b890d7b3453e 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-03-11 +date: 2024-03-13 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 200ce37bbb9f..9f803e3ff39b 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-03-11 +date: 2024-03-13 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 6e8348e401b5..e5b9567a5832 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 2ef04f5cfa8a..9fb5b73adb8e 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 a1b65ec2afcb..877c35a76d06 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 f39ede03db41..021089df5192 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 ed56ea28337b..f920b172a8dc 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 88aa2efa567e..4f2d6dc9a911 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-03-11 +date: 2024-03-13 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 51efba5093ba..c65a728bc1b2 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-03-11 +date: 2024-03-13 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 76dc6da3955e..a5889862b4ae 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 0f3b6337b1a3..b4cb9e1bc0d4 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 725614f160a9..3c6970f3e9b6 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 2eb3abdce8d9..21af2868e7b6 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 9b864cf0d84b..3d5a8478b759 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-03-11 +date: 2024-03-13 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 3614096ed5c3..227a5590c06b 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 d63e5fe32ac1..dee7dd94857b 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 6817fa236ac9..ba88dab426b0 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 771760d17c37..27ddb2ec469a 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-03-11 +date: 2024-03-13 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 a0c4bf948966..9d8104fbb8f7 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 275bbcebbd68..3e61cef89208 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 348816a19392..58b4180d806a 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 b07969f88cae..634490b7ae64 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 87ad6152648e..323fbbe1db1f 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 243b62f31b76..4b6b13ab9e97 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 9e2b83e4b9b4..17af420cfb90 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 79d197ecca0d..0b54e0e4e172 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-03-11 +date: 2024-03-13 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 b0a6ffe0c7f6..194281762e7b 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-03-11 +date: 2024-03-13 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 f3aecaa58fba..0407c22546f8 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 36fbbb1b5ab3..6dc145642386 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 2906ca14bbca..3aa814292990 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 adfd1cc54442..98db8a177e10 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index ada1c429f93f..d251b4ebba44 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 11caaad85873..12cc68f10943 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 38d8d0400ca4..c9615ea27f5b 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 2a034b8fa8e0..94f64e5ff504 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-03-11 +date: 2024-03-13 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 c705649d421e..3b2560d3b7d5 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 83d27f8a936f..3b6e82690727 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-03-11 +date: 2024-03-13 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 6dfa4b4bdab3..d8638f48d5a5 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-03-11 +date: 2024-03-13 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 87f781fe4276..024cf5323dbf 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 2ea401636c55..3f8238d20dd8 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index dbd05efe624b..a75398779646 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 e18e45f0981f..66a2fe0f3268 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 51589224da08..c0e574bab89e 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3348,22 +3348,6 @@ "plugin": "@kbn/core-apps-server-internal", "path": "packages/core/apps/core-apps-server-internal/src/core_app.ts" }, - { - "plugin": "usageCollection", - "path": "src/plugins/usage_collection/server/routes/stats/stats.ts" - }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/health.ts" - }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts" - }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/routes/metrics.ts" - }, { "plugin": "licensing", "path": "x-pack/plugins/licensing/server/routes/info.ts" @@ -3376,6 +3360,10 @@ "plugin": "features", "path": "x-pack/plugins/features/server/routes/index.ts" }, + { + "plugin": "usageCollection", + "path": "src/plugins/usage_collection/server/routes/stats/stats.ts" + }, { "plugin": "customIntegrations", "path": "src/plugins/custom_integrations/server/routes/define_routes.ts" @@ -3404,6 +3392,18 @@ "plugin": "spaces", "path": "x-pack/plugins/spaces/server/routes/api/internal/get_active_space.ts" }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/health.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/background_task_utilization.ts" + }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/routes/metrics.ts" + }, { "plugin": "security", "path": "x-pack/plugins/security/server/routes/api_keys/enabled.ts" @@ -5910,10 +5910,6 @@ "plugin": "@kbn/core-capabilities-server-internal", "path": "packages/core/capabilities/core-capabilities-server-internal/src/routes/resolve_capabilities.ts" }, - { - "plugin": "usageCollection", - "path": "src/plugins/usage_collection/server/routes/ui_counters.ts" - }, { "plugin": "licensing", "path": "x-pack/plugins/licensing/server/routes/internal/notify_feature_usage.ts" @@ -5922,6 +5918,10 @@ "plugin": "licensing", "path": "x-pack/plugins/licensing/server/routes/internal/register_feature.ts" }, + { + "plugin": "usageCollection", + "path": "src/plugins/usage_collection/server/routes/ui_counters.ts" + }, { "plugin": "home", "path": "src/plugins/home/server/services/sample_data/routes/install.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 12ad57b21e2e..80581fc2dc82 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 327b5c15e913..b65fefdce307 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 291987fdfdfe..b5ca15878216 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index c80a0fb5312b..e1cd234b7bdd 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 f7816eae72fb..ab2506ae0600 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 1a8a7ba6a3e7..7752e657a5b9 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-03-11 +date: 2024-03-13 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 324911f6f6b5..87016a9a0321 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 a33e50b8d0f9..1253f90e42a5 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 dccf5d439d8d..2daf625d13ec 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 3bc18ba2b11c..01b55c2a50dc 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 261cfcac6818..d9518628d0ec 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 f7b6b3feac7f..a40c2ff34a94 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 5fee18cb6105..fe8f0369eda0 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 f3118d41fd10..d86516284283 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-03-11 +date: 2024-03-13 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 7f101ad37043..df3bf5f7683d 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 3fb72b2dadec..5e0c426c549b 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 bda27a775848..24ed7de4369a 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 0170705f6a21..a734d70d4b74 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-03-11 +date: 2024-03-13 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 8179a10960f9..baad12f2b5df 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 98c8b412335e..593dd6719cf2 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 2a8245ef27dc..bc819c0518f7 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 03d888abde3b..c6a57e5b8318 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 aa0c3ccce530..e17e4921fb3a 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-03-11 +date: 2024-03-13 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 0725e31e8ae5..e57f57ab1db6 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 fe4603463d40..d828389c70ac 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 fbf5effc8651..80aa728d2a8f 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 775e5a37cfe1..0d12657e3174 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-03-11 +date: 2024-03-13 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 80437c9305a7..ee64e8ce7555 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 d0d83e7c5290..92ef818832bf 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 d1634371cd8c..d7285c6dc1db 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 dba44076ad04..2279b04808f4 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 691adfcb5082..4290a35fa2e2 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 7eb05f5153fd..35a25f8dd8c3 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 44bdb769e10d..530abf004c5e 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 a016d48cdc9a..56faab3020f2 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 66049da9c178..1841cd9c3cf8 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 37a08e9f0759..74b55fe36b31 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 a9edc72206bf..a539b34821ee 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 b3652022813d..4e80c41442a4 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-03-11 +date: 2024-03-13 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 2d008c1d7f5a..bb26fcf59851 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-03-11 +date: 2024-03-13 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 514ec1695363..436fa49ad433 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 04382689ce36..6944ee590aa6 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-03-11 +date: 2024-03-13 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 36464903c7ec..53ee953d68b5 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index cbeaa7644531..14621f632bc0 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 dbb6966ab532..f2f9f5151af5 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 0e488f1a2352..e3d7b8ac2863 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 d2d3a9a20dd7..54ab8b15e13c 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 f48b407b212b..209453d0d6ce 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 d0a7cd7cde34..e16b05acb28b 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-03-11 +date: 2024-03-13 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 55eec9f9f344..fe0ce8c2b7b9 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 40e95f023d5d..08a8cc12d97f 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 4237d858e2ba..52936134a537 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 0b70f8a45d73..285e3d113d3d 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 71db97940c99..8a0ff33c40c7 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 5e6ec7a5129f..d6bda26fa410 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 81dd957a609f..014602af3ad1 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-03-11 +date: 2024-03-13 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 55a7fe754dfd..5f9876952d62 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 fc314207c592..2dd152cae304 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 c03b9766b39d..5bd9834a186b 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 999f05a6310b..2ac88b2dbb40 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.devdocs.json b/api_docs/kbn_core_saved_objects_server.devdocs.json index c4635d0fad2e..709ab639e063 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -10493,10 +10493,6 @@ "plugin": "@kbn/core-usage-data-server-internal", "path": "packages/core/usage-data/core-usage-data-server-internal/src/saved_objects/core_usage_stats.ts" }, - { - "plugin": "taskManager", - "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts" - }, { "plugin": "spaces", "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" @@ -10505,6 +10501,10 @@ "plugin": "spaces", "path": "x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts" }, + { + "plugin": "taskManager", + "path": "x-pack/plugins/task_manager/server/saved_objects/index.ts" + }, { "plugin": "actions", "path": "x-pack/plugins/actions/server/saved_objects/index.ts" diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 283338f8a35f..04364fe6e8af 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-03-11 +date: 2024-03-13 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 6994545f3df2..e0b4181e08cb 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 03281498f49d..397dc68efa13 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 e0a3fd4e11e2..6ed5b77a1530 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 769ce12fcaf2..4f80ac9df07a 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index e0235ccf219f..1f4870db1090 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 803bf7204b63..191ca6b7a0b2 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-03-11 +date: 2024-03-13 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 5bb602ae1f19..57fb49bc2926 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 31dab833dbd9..71cd2d4f5eb3 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 7440b9dc15e0..6a13ff52f72f 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-03-11 +date: 2024-03-13 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 e815c9c1c1ab..37ea27eb969c 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 671c2f8632b1..4c021f14ad4a 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-03-11 +date: 2024-03-13 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.devdocs.json b/api_docs/kbn_core_test_helpers_model_versions.devdocs.json index 7e2f256a95f8..f77cfd048a4d 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.devdocs.json +++ b/api_docs/kbn_core_test_helpers_model_versions.devdocs.json @@ -302,10 +302,10 @@ }, { "parentPluginId": "@kbn/core-test-helpers-model-versions", - "id": "def-common.ModelVersionTestKit.tearsDown", + "id": "def-common.ModelVersionTestKit.tearDown", "type": "Function", "tags": [], - "label": "tearsDown", + "label": "tearDown", "description": [ "\nCleanup function that will delete the test index.\nShould be called before calling `testbed.prepareTestKit` again." ], diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 61bba23a8e23..9f703c42fc30 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-03-11 +date: 2024-03-13 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 041965626cc2..bb9932cdddb4 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-03-11 +date: 2024-03-13 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 da6ef4c87ac0..da7bc3b05270 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 63aeaf61c5a2..22a2da1998e4 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 3099e1e2eaf8..6ef9e4f0c648 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 51501026ba9e..ec6a8f004f95 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 143043ac3439..87900c60291d 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 181ce3f7f5e3..6dbc30bbca9b 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 4558e40ea300..2e1bfea2d265 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-03-11 +date: 2024-03-13 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 3eeb315dbc3c..4a98ee9f86a1 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-03-11 +date: 2024-03-13 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 fc3dca546094..9c867901bb20 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 7f2a09a5d570..4417e310d196 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 08f07062920b..3d37107882b3 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-03-11 +date: 2024-03-13 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 9851bc40bc84..03b4aac942c6 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 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 a110f573b6b4..17778b71193e 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 06668c434cab..642761ddc69d 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_internal.mdx b/api_docs/kbn_core_user_settings_server_internal.mdx index ad9cf36c0b89..dacd3243f77c 100644 --- a/api_docs/kbn_core_user_settings_server_internal.mdx +++ b/api_docs/kbn_core_user_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-internal title: "@kbn/core-user-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-internal plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-internal'] --- import kbnCoreUserSettingsServerInternalObj from './kbn_core_user_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index cea6ba5a5d46..c165791a36b7 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 5870ee269840..760d03ccdba5 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-03-11 +date: 2024-03-13 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 7772bca586b5..815ce1944ae7 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 1f8c2956c01b..ff8396d51329 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-03-11 +date: 2024-03-13 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 951a82711327..de5d5dc5119d 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-03-11 +date: 2024-03-13 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 ee79fd062c33..679317b1b617 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-03-11 +date: 2024-03-13 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 3ecf02106d5a..d981955c17c9 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-03-11 +date: 2024-03-13 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 b106c1347c1d..5d9046245f4b 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-03-11 +date: 2024-03-13 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 54b655ad6824..a147155b1634 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-03-11 +date: 2024-03-13 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 41c4225f7110..473e9533c16f 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 a72830d79892..18f500fd6033 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-03-11 +date: 2024-03-13 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 bc1440ca6ce1..c246b0be6243 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-03-11 +date: 2024-03-13 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 75c1d3c30eb2..b743c6bc74a3 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index a978f5ae26e0..9e36ea142a56 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-03-11 +date: 2024-03-13 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 0ccc2d4f7c20..70037b3ce150 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-03-11 +date: 2024-03-13 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 89ae96533942..9a03f340ff02 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 36f58b074f28..a62a0c95bdb4 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 42e82db2fca4..c14478844edf 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-03-11 +date: 2024-03-13 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 6532bede1f24..673fb8d0e581 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-03-11 +date: 2024-03-13 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 115f30c2c69b..ddfc3bf3e3f9 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-03-11 +date: 2024-03-13 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 8705bc18efd0..08e50d96844d 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-03-11 +date: 2024-03-13 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 76accc6f195b..614314445ae2 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-03-11 +date: 2024-03-13 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 8b79b98a1d33..d046e1a00ebc 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-03-11 +date: 2024-03-13 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 7af9c885c369..5e3bd4aef3f1 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-03-11 +date: 2024-03-13 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 e7dd04b03af8..b286662d9b71 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 12c128d57c10..66b12cc3550d 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 221e5df40cf3..3f694130bbd3 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-03-11 +date: 2024-03-13 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 981799bab15c..b1ecb6174fd3 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 942bac744d8b..9968ca587ffc 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-03-11 +date: 2024-03-13 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 58cb658fdc2c..3566af913788 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-03-11 +date: 2024-03-13 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 2d9a2badfc58..07e1bc800fef 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-03-11 +date: 2024-03-13 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 04841b5cfd27..c08ae404569b 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 a87ed61d5106..b1f5ee36aa4c 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-03-11 +date: 2024-03-13 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 a878a53a5c4c..c615cb0832cf 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 6ea62ec5e53d..9ae9dc62f37f 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-03-11 +date: 2024-03-13 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 73cbd7959e6b..c2ea0505f7ee 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-03-11 +date: 2024-03-13 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 e870edbb0d3c..06062cb78c3e 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index a6d44ced6331..40a30aa5f19c 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-03-11 +date: 2024-03-13 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 95b01bf154f5..ba73b2eff06e 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-03-11 +date: 2024-03-13 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 f11d61d3a639..3bd2ba67bb27 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-03-11 +date: 2024-03-13 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_utils.mdx b/api_docs/kbn_esql_utils.mdx index d0a1ee62f910..e5d7be66c296 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 5d8278bf935e..3664d726239d 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-03-11 +date: 2024-03-13 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 119a526c30ae..e54f6d85b6c5 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-03-11 +date: 2024-03-13 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 49ef9f750869..fd596f1e70c7 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-03-11 +date: 2024-03-13 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 cd71d63d172c..fe459c224e31 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-03-11 +date: 2024-03-13 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 1c4c2cd0c8c7..96c7ef487771 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 afa769c6e5c3..030e2495bc63 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index e388c360f2bf..ee01aab3d0f6 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 1675d1cddaeb..21a49519d63c 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 011dd7ab16a4..c6e82e7cc25f 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 3fb9af74b7c7..3ab6c5b82916 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-03-11 +date: 2024-03-13 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 f851074e1130..b31cc565eb07 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-03-11 +date: 2024-03-13 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 7214aab235f4..57c9ae1164ce 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 10e55cd06f2d..207d0182ddee 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-03-11 +date: 2024-03-13 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 a3db3c1de192..2856eb6f2041 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-03-11 +date: 2024-03-13 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 6aa12b88237c..6b4fe566a7dd 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 582bba4af3a1..a7e421d011b0 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-03-11 +date: 2024-03-13 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 1ee3c81e2d66..2961fb3babd5 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-03-11 +date: 2024-03-13 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 25ecab7c64d1..1fb8392651c8 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-03-11 +date: 2024-03-13 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 72cf9a3773f2..0effe0f17756 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-03-11 +date: 2024-03-13 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 e45a4fc98c35..362bce67c2dc 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-03-11 +date: 2024-03-13 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 e3f7b35a155c..11a0641528b9 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 0cecb0a4ba5c..8f2571d5dbc8 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-03-11 +date: 2024-03-13 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 4941f2a1ab15..abf5feccf05e 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index cbb0aff006a7..5f8748ebf7b9 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 804d14c91ff2..63e2cf23c46b 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-03-11 +date: 2024-03-13 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 029c5ed97d99..bc89f442e687 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-03-11 +date: 2024-03-13 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 ab3fd2f23aa3..a7bf4478b2b7 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 11a4dd5914b2..f73eb919c2c7 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index bf56a7a29e40..72ac4ae1a195 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index b64d28563bf8..c895d02a4a76 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 89cd7738a9c5..6630a1449c1e 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-03-11 +date: 2024-03-13 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 01540d29df7f..488c1e41d451 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-03-11 +date: 2024-03-13 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 2ce433c5fa27..5ee2d2935d5b 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 eda7f5479755..0f81e91ee7eb 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-03-11 +date: 2024-03-13 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 db01da0c3d33..31f13d90693b 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-03-11 +date: 2024-03-13 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 aa6b118d6564..54c08ecb10db 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-03-11 +date: 2024-03-13 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 ac8bc393eeee..95e285f4c91d 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-03-11 +date: 2024-03-13 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 f424312a0eec..3ec900b2f2ad 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-03-11 +date: 2024-03-13 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 a0899a5dbf5a..d2be72d4ddff 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-03-11 +date: 2024-03-13 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 3207a2109c77..57e243259667 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-03-11 +date: 2024-03-13 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 e703c0cc8bbb..46a52e62af65 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-03-11 +date: 2024-03-13 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 3b414721022d..4426a334d377 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-03-11 +date: 2024-03-13 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 7a0c67f2d8d7..ad0b03cda46c 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-03-11 +date: 2024-03-13 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 ac1a13c4ed07..a12043505af6 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-03-11 +date: 2024-03-13 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 6a5d93407de7..a2237eead922 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-03-11 +date: 2024-03-13 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 8d858821e203..530c75799051 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-03-11 +date: 2024-03-13 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 b9cb128b7812..c312db3f6cdf 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index c6d0cec910e3..0ba7f552b995 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-03-11 +date: 2024-03-13 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 c8c4b16cc138..c69422511bb8 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 a8d4e4fc4f8d..59c17f0d7be9 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 013df9d204e9..09f00029aaa8 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 4a0534d1db95..60f280fc97dd 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-03-11 +date: 2024-03-13 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 4b1d8642a5b5..9c1801fc2081 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-03-11 +date: 2024-03-13 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 abd7c0e42ab3..27e387538ac5 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-03-11 +date: 2024-03-13 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 baeb2f8ea1bd..ed33610354b2 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index 56efb731bc9b..a334b57c9649 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 8e0483b25eee..70c5deef2303 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-03-11 +date: 2024-03-13 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 2255a68e84e1..8de14bf606b0 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 2eefa9138498..0c1498a11de3 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 0191e12ab998..5f4192d99b70 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-03-11 +date: 2024-03-13 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 ce95b13f839d..c1f14218a5d4 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-03-11 +date: 2024-03-13 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 f5d7e7031882..691b2547591a 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 8f2200cd4003..d85286102bcd 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index bcd3868837c8..d25eacbace6c 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-03-11 +date: 2024-03-13 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 f3063f849182..04e14fe2960f 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-03-11 +date: 2024-03-13 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 531f0a8bbe70..66942b7ce47f 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 34920c6604d4..c001c183fe5d 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 6d601bd97035..ce74fd0e19dc 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 13a83ec40703..1c059abe7a6c 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 78d049328810..07c7c44591fc 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 b143da4542ec..9f11f5aead52 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index f5b8f4b4ecc2..b916e4595639 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 91ca07897e39..f42bc849acd2 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-03-11 +date: 2024-03-13 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 2b67f8714dfe..31a4b221c7c0 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 807cf331ffd8..feac5d9c8d96 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 6e593ea67fe0..7ed82452e661 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 74438269e6e6..090ed72b15b4 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index cb9d81d60b88..72c4aebbda11 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 4957a3bf0aee..4dcf3726e736 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-03-11 +date: 2024-03-13 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 942d9c0c96dd..0650e76dc97a 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 7432c05b3586..46c177bcc730 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-03-11 +date: 2024-03-13 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 ff240a0b75b6..201666fe8957 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-03-11 +date: 2024-03-13 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 60d68860befc..c75771e2f961 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-03-11 +date: 2024-03-13 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 829da23d563c..80ea29169957 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 b0f9326b96c4..f67834db7f1a 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 250ae26d694b..494dd7810c19 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-03-11 +date: 2024-03-13 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 7aec2c4be0c7..8f80afe0a9fe 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-03-11 +date: 2024-03-13 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 92bb4f5bd5d1..cd3a903c8e28 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-03-11 +date: 2024-03-13 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 c3ccfacc67e9..4dfbbb237755 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-03-11 +date: 2024-03-13 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 f0bf0b802af2..ee373fefeb57 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 d1ed8be33352..2b9a3fe121c7 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_library.mdx b/api_docs/kbn_presentation_library.mdx index 9088a3153af4..665fe39bc4a4 100644 --- a/api_docs/kbn_presentation_library.mdx +++ b/api_docs/kbn_presentation_library.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-library title: "@kbn/presentation-library" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-library plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-library'] --- import kbnPresentationLibraryObj from './kbn_presentation_library.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 40d22c8840da..9bf5d3e0d5a5 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 0d7a35352399..fb35925cd07c 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 00e9d7fb0298..083fe563ec35 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 6eada1a6c780..59ca9a89db8a 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index adc913271d11..323746aa7a3b 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-03-11 +date: 2024-03-13 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 e2af48ca3a4a..7aebb3c98db9 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-03-11 +date: 2024-03-13 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 e0127ce1b70b..905960f3b3ec 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-03-11 +date: 2024-03-13 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 ffcd7eb86947..59355e63aa3d 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-03-11 +date: 2024-03-13 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 1b0f5224c57d..1d450a5f0dac 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-03-11 +date: 2024-03-13 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 a149737b11ce..54794d809d98 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 57860103a906..68d9b1bb9610 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-03-11 +date: 2024-03-13 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 d19df722804b..8c54ec709aaf 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-03-11 +date: 2024-03-13 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 83b5bcc2e94d..7c7998a4d193 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-03-11 +date: 2024-03-13 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 f05594f8e34b..8f59c91d2bee 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-03-11 +date: 2024-03-13 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 11372721b7c6..2874b16b34a9 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 01e3eee2b218..b4a5acb4c8ff 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-03-11 +date: 2024-03-13 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 366a8c2e61bf..b0ce0cef95f0 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-03-11 +date: 2024-03-13 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 528ec491f536..f0650f1e4b3a 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-03-11 +date: 2024-03-13 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 3b0cc4da17ed..5fd0019dbe26 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-03-11 +date: 2024-03-13 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 6a283c0e2e2f..a552225fb78a 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-03-11 +date: 2024-03-13 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 41c9a9ea19eb..7be0b0edf40a 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-03-11 +date: 2024-03-13 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 0214e12a8c08..b27b1bdbf164 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-03-11 +date: 2024-03-13 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 d98a341a94eb..857e36945068 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-03-11 +date: 2024-03-13 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 96d60ea1f1bb..38593904f32b 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-03-11 +date: 2024-03-13 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 e4a4b6e7f8ef..73a8e2daf930 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 331e4f8c9e73..a979c48d33c2 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 04b4e4fdb199..5b6d9a0bf18d 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 00438a250cb2..9cf911201e72 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.devdocs.json b/api_docs/kbn_rule_data_utils.devdocs.json index ca4462ca88b0..80797716b4af 100644 --- a/api_docs/kbn_rule_data_utils.devdocs.json +++ b/api_docs/kbn_rule_data_utils.devdocs.json @@ -236,6 +236,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/rule-data-utils", + "id": "def-common.ALERT_CONSECUTIVE_MATCHES", + "type": "string", + "tags": [], + "label": "ALERT_CONSECUTIVE_MATCHES", + "description": [], + "signature": [ + "\"kibana.alert.consecutive_matches\"" + ], + "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/rule-data-utils", "id": "def-common.ALERT_CONTEXT", @@ -1504,7 +1519,7 @@ "label": "DefaultAlertFieldName", "description": [], "signature": [ - "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.revision\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.last_detected\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.reason\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.url\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert\" | \"kibana.alert.rule\"" + "\"@timestamp\" | \"kibana\" | \"kibana.alert.rule.rule_type_id\" | \"kibana.alert.rule.consumer\" | \"kibana.alert.rule.execution.uuid\" | \"kibana.alert.instance.id\" | \"kibana.alert.rule.category\" | \"kibana.alert.rule.name\" | \"kibana.alert.rule.producer\" | \"kibana.alert.rule.revision\" | \"kibana.alert.rule.uuid\" | \"kibana.alert.status\" | \"kibana.alert.uuid\" | \"kibana.space_ids\" | \"kibana.alert.action_group\" | \"kibana.alert.case_ids\" | \"kibana.alert.consecutive_matches\" | \"kibana.alert.duration.us\" | \"kibana.alert.end\" | \"kibana.alert.flapping\" | \"kibana.alert.flapping_history\" | \"kibana.alert.last_detected\" | \"kibana.alert.maintenance_window_ids\" | \"kibana.alert.reason\" | \"kibana.alert.rule.parameters\" | \"kibana.alert.rule.tags\" | \"kibana.alert.start\" | \"kibana.alert.time_range\" | \"kibana.alert.url\" | \"kibana.alert.workflow_assignee_ids\" | \"kibana.alert.workflow_status\" | \"kibana.alert.workflow_tags\" | \"kibana.version\" | \"kibana.alert\" | \"kibana.alert.rule\"" ], "path": "packages/kbn-rule-data-utils/src/default_alerts_as_data.ts", "deprecated": false, diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 91025a67e334..4e76617f7cf4 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detections-response](https://github.com/orgs/elastic/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 122 | 0 | 119 | 0 | +| 123 | 0 | 120 | 0 | ## Common diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 793072d61aed..86d8a2dbc8c5 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 0a16bc8723da..e5732f5fc99a 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 3590ed04a274..03e1db832d8c 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 2634afba1f35..6843143781e9 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-03-11 +date: 2024-03-13 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 3354cb16fb6a..64dc9e172fb4 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-03-11 +date: 2024-03-13 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 27c569631002..4756952a3b1b 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 47a5f54671c7..aebef03f4dc6 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-03-11 +date: 2024-03-13 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 215f7de97e86..77d5c5d73d06 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-03-11 +date: 2024-03-13 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 679d0b195254..2b485cd9901d 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index b2ca1f11d697..ee147cd87790 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 17b0a582337d..ed49be768dfe 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-03-11 +date: 2024-03-13 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 af3058cf3852..ac9a2cda0730 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-03-11 +date: 2024-03-13 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 6dfe5ce9a9a5..55566ea00d3e 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-03-11 +date: 2024-03-13 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 14a0e3abe0b8..85c08ce5670b 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index c7e96e7bdd78..e3789e50ce70 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-03-11 +date: 2024-03-13 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 9706790288c3..d03c94ca29cc 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-03-11 +date: 2024-03-13 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 b3903783c4e5..aa8bf0ed44bf 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-03-11 +date: 2024-03-13 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 26e4cb8d2aa4..39c7994743e1 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 505a42abb8d2..ce23f2c135bc 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 3c71da092f00..8ff134088974 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 03a3c3748640..208d481fdafa 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 9c321d0700c2..32bb2a38b186 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-03-11 +date: 2024-03-13 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 8af670531d47..320f012372f5 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-03-11 +date: 2024-03-13 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 1eb2091fa58f..fe311ec83305 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-03-11 +date: 2024-03-13 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 73a0016cb21d..0699d77adae3 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 cd283112d5db..d1529ad7e646 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-03-11 +date: 2024-03-13 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 83af7e8bcf31..413c693215cd 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-03-11 +date: 2024-03-13 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 5afecd4c88de..048e0042e272 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-03-11 +date: 2024-03-13 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 47f96d667e7f..0eeba9dbb316 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 f23fd5e08b0a..0c0963e8eddb 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-03-11 +date: 2024-03-13 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 6e129a97f0c4..1e0dae77eb23 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-03-11 +date: 2024-03-13 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 42950362027b..81cd04a46fb1 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 3c97ad9495de..927089fe4d8e 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-03-11 +date: 2024-03-13 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 edde02665895..90a057f5b75a 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 1a313045c662..51fcb06a2835 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-03-11 +date: 2024-03-13 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 0f93cdf99f3b..6619b0708a03 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-03-11 +date: 2024-03-13 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 29b61dfd2ed3..b137239ed240 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-03-11 +date: 2024-03-13 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 c759d61b778e..84b6b57cefd8 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-03-11 +date: 2024-03-13 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 690e5efff803..a5877c89dc92 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-03-11 +date: 2024-03-13 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 988bc0d865b5..b6fd62b3adb5 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-03-11 +date: 2024-03-13 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 8074da948356..f88fffc7d9f0 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-03-11 +date: 2024-03-13 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 b3ffb4852e7a..d149b6f4d29e 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-03-11 +date: 2024-03-13 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 ac13a918002d..2ad3d0a19dc7 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-03-11 +date: 2024-03-13 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 074968d7401e..55287ba0257b 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-03-11 +date: 2024-03-13 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 e8b826099792..d7b4f3fbc253 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-03-11 +date: 2024-03-13 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 b6efe94703f2..42aede260d83 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 137378d96f64..8bc47e3da7db 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index cad3fb13e0dc..3832af783625 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index aca4adda5505..26d2139ffaf1 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-03-11 +date: 2024-03-13 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 54d143780382..91f12c1fbc3a 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-03-11 +date: 2024-03-13 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 2bb58ad325aa..b1de10222a37 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 7231bffc0de8..4f01c04b82a2 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 73c37795c0b6..6a1ff69d3684 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-03-11 +date: 2024-03-13 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 281f23f2c9ce..f40f1c5db8c8 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-03-11 +date: 2024-03-13 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 b6337e1b9348..03435492fb68 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-03-11 +date: 2024-03-13 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 588c026d069b..62e375bfbb4a 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-03-11 +date: 2024-03-13 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 379bb1373006..b850194984dd 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-03-11 +date: 2024-03-13 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 a67b4b5e3ccf..f97c0bddb461 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 96e99a0d52b7..8a09ea6deede 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-03-11 +date: 2024-03-13 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 9ca2429019fa..e320b4f70036 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 ac31ab75d845..728faf84a827 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-03-11 +date: 2024-03-13 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 e042d5f72cb4..da443714d9ed 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 e4c9d064c652..d37e46b6f42a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-03-11 +date: 2024-03-13 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 ec3b5fa51869..6563132c1cc2 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 aa6c8823c487..d27cd31a5f15 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-03-11 +date: 2024-03-13 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 dcabc39ae080..b60a0bee0867 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 3663f3299767..fe2485e5c4db 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-03-11 +date: 2024-03-13 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 af3a61ec2573..c29329a95965 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-03-11 +date: 2024-03-13 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 6846d97332f4..5eddf38dff4d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 af6d3c92350c..9eabb720c2ea 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 3b8ebe1f8da4..12ca0bc008da 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-03-11 +date: 2024-03-13 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 fc8336afc4b4..9e807f49cb74 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-03-11 +date: 2024-03-13 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 667200425774..21d7ef70a8fe 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 a3974f944829..7c5a27f3475e 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-03-11 +date: 2024-03-13 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 7d0bd1eece10..5642e85b60ef 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-03-11 +date: 2024-03-13 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 4a0e8733211a..da46e47323fb 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-03-11 +date: 2024-03-13 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 f23b448ec377..3b9e587712a5 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-03-11 +date: 2024-03-13 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 8be425baf85c..14aa9cc5b9a8 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 28d100e1f6e4..2ada01cdf92e 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-03-11 +date: 2024-03-13 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 1e9b031c0921..3c0dd0259c01 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-03-11 +date: 2024-03-13 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 1a324da0a9a5..9838ab54e9f6 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-03-11 +date: 2024-03-13 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 900482b01f2b..6c116cdcee19 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 1a3f3b3a7c57..c9c92f1da76b 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-03-11 +date: 2024-03-13 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 06b76c6b1a9d..bde113af9145 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 e3ac6ad6b3a9..470353b6a288 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 9188aca673cd..15b0e8d312fd 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-03-11 +date: 2024-03-13 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 72702a196a10..c7c3d9d43431 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-03-11 +date: 2024-03-13 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 400b0a11ef20..6ce6d3c895ef 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 7dcc9cce9aec..3b1cf10e3359 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 198b59a35398..a128b6d8bc13 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 44e728272dab..f0ca76b44960 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 73b003e410d8..d8f8fb57750f 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-03-11 +date: 2024-03-13 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 b238ba39faf5..db62c0189b66 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index e7418cf1a9db..690ce76d4893 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-03-11 +date: 2024-03-13 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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 3ade690c5138..77c4c24e765f 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-03-11 +date: 2024-03-13 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 5357ccbc10a3..96446f9cfaf0 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-03-11 +date: 2024-03-13 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 83f17ad351b4..b499a8ced6cd 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-03-11 +date: 2024-03-13 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 4eed9c7ffed2..d28fcd158cff 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-03-11 +date: 2024-03-13 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 363d394262a1..c1e57700ca4c 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 5ce21beccd0d..4cdd60f69c2c 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-03-11 +date: 2024-03-13 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 d4d51462e232..08ae619f97c2 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-03-11 +date: 2024-03-13 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 05119178e8e1..9460c0409e42 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-03-11 +date: 2024-03-13 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 d76b354920aa..f161da4e5d38 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 1afee7ee3f16..d629781d7d30 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-03-11 +date: 2024-03-13 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 0b58c3f2b34e..09c279eff78d 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-03-11 +date: 2024-03-13 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 6dce10517a90..972b7882d580 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-03-11 +date: 2024-03-13 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 e38abb50b3a1..36d37f510ac9 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-03-11 +date: 2024-03-13 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 cc7feaa3ed31..2d24e1962dad 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-03-11 +date: 2024-03-13 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 655dad0ed874..bc07fead951f 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-03-11 +date: 2024-03-13 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 53f44995315a..3dacde128bc0 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 f8895e6c0d11..647470191737 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-03-11 +date: 2024-03-13 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 9f8067195fc5..199b1a434d49 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 751fc3f3772a..fe91f2100f74 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-03-11 +date: 2024-03-13 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 1c8a459fa971..630664aa4032 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-03-11 +date: 2024-03-13 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 364e9e011fcd..917ca53651a8 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-03-11 +date: 2024-03-13 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 7efb92ccbc7b..018628ba2dcb 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-03-11 +date: 2024-03-13 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 78d7e2b5fdaf..2c1318440580 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.devdocs.json b/api_docs/lens.devdocs.json index 8101e6f7a43f..0249b720ea6a 100644 --- a/api_docs/lens.devdocs.json +++ b/api_docs/lens.devdocs.json @@ -998,10 +998,10 @@ "functions": [ { "parentPluginId": "lens", - "id": "def-public.apiHasLensConfig", + "id": "def-public.isLensApi", "type": "Function", "tags": [], - "label": "apiHasLensConfig", + "label": "isLensApi", "description": [], "signature": [ "(api: unknown) => api is ", @@ -1009,17 +1009,17 @@ "pluginId": "lens", "scope": "public", "docId": "kibLensPluginApi", - "section": "def-public.HasLensConfig", - "text": "HasLensConfig" + "section": "def-public.LensApi", + "text": "LensApi" } ], - "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts", + "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "lens", - "id": "def-public.apiHasLensConfig.$1", + "id": "def-public.isLensApi.$1", "type": "Unknown", "tags": [], "label": "api", @@ -1027,7 +1027,7 @@ "signature": [ "unknown" ], - "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts", + "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -10822,36 +10822,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "lens", - "id": "def-public.HasLensConfig", - "type": "Type", - "tags": [], - "label": "HasLensConfig", - "description": [], - "signature": [ - { - "pluginId": "@kbn/presentation-publishing", - "scope": "common", - "docId": "kibKbnPresentationPublishingPluginApi", - "section": "def-common.HasType", - "text": "HasType" - }, - "<\"lens\"> & { getSavedVis: () => Readonly<", - { - "pluginId": "lens", - "scope": "public", - "docId": "kibLensPluginApi", - "section": "def-public.LensSavedObjectAttributes", - "text": "LensSavedObjectAttributes" - }, - " | undefined>; }" - ], - "path": "x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "lens", "id": "def-public.HeatmapVisualizationState", @@ -10946,6 +10916,60 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "lens", + "id": "def-public.LensApi", + "type": "Type", + "tags": [], + "label": "LensApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasType", + "text": "HasType" + }, + "<\"lens\"> & { getSavedVis: () => Readonly<", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.LensSavedObjectAttributes", + "text": "LensSavedObjectAttributes" + }, + " | undefined>; } & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesPanelTitle", + "text": "PublishesPanelTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesLocalUnifiedSearch", + "text": "PublishesLocalUnifiedSearch" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasParentApi", + "text": "HasParentApi" + }, + ">" + ], + "path": "x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "lens", "id": "def-public.LensEmbeddableInput", diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 4a3669f7ade4..4874352aa948 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-03-11 +date: 2024-03-13 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 1a68e4477417..e7a3bd040971 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-03-11 +date: 2024-03-13 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 7eeb0b8356cd..110fab3a4430 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-03-11 +date: 2024-03-13 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 0055d7b36371..e02e40e7a115 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-03-11 +date: 2024-03-13 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 d81141dbc0e7..14f392bb6c06 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-03-11 +date: 2024-03-13 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 7fc07a0909e1..c6836b8badf8 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 2eb711a95870..0e769b9a568a 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json index 240de8934f12..0fc4824cf1f3 100644 --- a/api_docs/logs_shared.devdocs.json +++ b/api_docs/logs_shared.devdocs.json @@ -2729,8 +2729,8 @@ "pluginId": "observabilityAIAssistant", "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantPluginStart", - "text": "ObservabilityAIAssistantPluginStart" + "section": "def-public.ObservabilityAIAssistantPublicStart", + "text": "ObservabilityAIAssistantPublicStart" } ], "path": "x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx", @@ -3017,8 +3017,8 @@ "pluginId": "observabilityAIAssistant", "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantPluginStart", - "text": "ObservabilityAIAssistantPluginStart" + "section": "def-public.ObservabilityAIAssistantPublicStart", + "text": "ObservabilityAIAssistantPublicStart" } ], "path": "x-pack/plugins/observability_solution/logs_shared/public/types.ts", diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 7c413d187df8..aec00b6b8c1e 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-03-11 +date: 2024-03-13 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 b23c0b7eb371..6f9847dc6273 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index 31a5f2ead02e..832647b97e45 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -1395,7 +1395,48 @@ "initialIsOpen": false } ], - "functions": [], + "functions": [ + { + "parentPluginId": "maps", + "id": "def-public.isMapApi", + "type": "Function", + "tags": [], + "label": "isMapApi", + "description": [], + "signature": [ + "(api: unknown) => api is ", + { + "pluginId": "maps", + "scope": "public", + "docId": "kibMapsPluginApi", + "section": "def-public.MapApi", + "text": "MapApi" + } + ], + "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "maps", + "id": "def-public.isMapApi.$1", + "type": "Unknown", + "tags": [], + "label": "api", + "description": [], + "signature": [ + "unknown" + ], + "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], "interfaces": [ { "parentPluginId": "maps", @@ -3927,6 +3968,62 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "maps", + "id": "def-public.MapApi", + "type": "Type", + "tags": [], + "label": "MapApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasType", + "text": "HasType" + }, + "<\"map\"> & { getLayerList: () => ", + "ILayer", + "[]; } & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesDataViews", + "text": "PublishesDataViews" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesPanelTitle", + "text": "PublishesPanelTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.PublishesLocalUnifiedSearch", + "text": "PublishesLocalUnifiedSearch" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "common", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-common.HasParentApi", + "text": "HasParentApi" + }, + ">" + ], + "path": "x-pack/plugins/maps/public/embeddable/map_api.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "maps", "id": "def-public.MapEmbeddableInput", diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index eee8d0c6572a..7b68a227c5d9 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 261 | 0 | 260 | 28 | +| 264 | 0 | 263 | 28 | ## Client @@ -31,6 +31,9 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) ### Start +### Functions + + ### Classes diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 0239d8189b2a..797ea3caa3eb 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-03-11 +date: 2024-03-13 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 ea0b44a1d513..b2f4acdfdbae 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-03-11 +date: 2024-03-13 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 e6c111361b4a..2f612bfbf7be 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-03-11 +date: 2024-03-13 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 350813cf81a8..df4d621d3a6b 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-03-11 +date: 2024-03-13 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 e3abb6c31373..1c3b9180010a 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-03-11 +date: 2024-03-13 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 4f88896facf9..9f6667c9920b 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-03-11 +date: 2024-03-13 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 8c3905991ac7..d2087f5df626 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-03-11 +date: 2024-03-13 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 ce555648ca9e..e8715316606e 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-03-11 +date: 2024-03-13 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 63aa33b394e2..704dca6e1e3c 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-03-11 +date: 2024-03-13 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 80782cc448e0..a81f7d58b8ac 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index dd39124bac3e..91bee1c20261 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2494,8 +2494,8 @@ "pluginId": "observabilityAIAssistant", "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantPluginSetup", - "text": "ObservabilityAIAssistantPluginSetup" + "section": "def-public.ObservabilityAIAssistantPublicSetup", + "text": "ObservabilityAIAssistantPublicSetup" } ], "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", @@ -3143,8 +3143,8 @@ "pluginId": "observabilityAIAssistant", "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-public.ObservabilityAIAssistantPluginStart", - "text": "ObservabilityAIAssistantPluginStart" + "section": "def-public.ObservabilityAIAssistantPublicStart", + "text": "ObservabilityAIAssistantPublicStart" } ], "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", @@ -3660,7 +3660,7 @@ "label": "format", "description": [], "signature": [ - "(options: { fields: OutputOf JSX.Element" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.timestamp", - "type": "string", - "tags": [], - "label": "'@timestamp'", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.user", + "id": "def-public.AssistantAvatar.$1", "type": "Object", "tags": [], - "label": "user", + "label": "{ size = 's', css }", "description": [], "signature": [ - "{ id?: string | undefined; name: string; }" + "AssistantAvatarProps" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls", + "type": "Function", + "tags": [], + "label": "ChatItemControls", + "description": [], + "signature": [ + "({\n error,\n loading,\n canRegenerate,\n canGiveFeedback,\n onFeedbackClick,\n onRegenerateClick,\n onStopGeneratingClick,\n}: { error: any; loading: boolean; canRegenerate: boolean; canGiveFeedback: boolean; onFeedbackClick: (feedback: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.Feedback", + "text": "Feedback" }, + ") => void; onRegenerateClick: () => void; onStopGeneratingClick: () => void; }) => JSX.Element | null" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.conversation", + "id": "def-public.ChatItemControls.$1", "type": "Object", "tags": [], - "label": "conversation", + "label": "{\n error,\n loading,\n canRegenerate,\n canGiveFeedback,\n onFeedbackClick,\n onRegenerateClick,\n onStopGeneratingClick,\n}", "description": [], - "signature": [ - "{ id: string; title: string; last_updated: string; }" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.messages", - "type": "Array", - "tags": [], - "label": "messages", - "description": [], - "signature": [ + "trackAdoption": false, + "children": [ { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.error", + "type": "Any", + "tags": [], + "label": "error", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false }, - "[]" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.loading", + "type": "boolean", + "tags": [], + "label": "loading", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.canRegenerate", + "type": "boolean", + "tags": [], + "label": "canRegenerate", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.canGiveFeedback", + "type": "boolean", + "tags": [], + "label": "canGiveFeedback", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.onFeedbackClick", + "type": "Function", + "tags": [], + "label": "onFeedbackClick", + "description": [], + "signature": [ + "(feedback: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.Feedback", + "text": "Feedback" + }, + ") => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.onFeedbackClick.$1", + "type": "CompoundType", + "tags": [], + "label": "feedback", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.Feedback", + "text": "Feedback" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.onRegenerateClick", + "type": "Function", + "tags": [], + "label": "onRegenerateClick", + "description": [], + "signature": [ + "() => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatItemControls.$1.onStopGeneratingClick", + "type": "Function", + "tags": [], + "label": "onStopGeneratingClick", + "description": [], + "signature": [ + "() => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ConnectorSelectorBase", + "type": "Function", + "tags": [], + "label": "ConnectorSelectorBase", + "description": [], + "signature": [ + "(props: ", + "UseGenAIConnectorsResult", + ") => JSX.Element" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/connector_selector/connector_selector_base.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.labels", + "id": "def-public.ConnectorSelectorBase.$1", "type": "Object", "tags": [], - "label": "labels", + "label": "props", "description": [], "signature": [ - "{ [x: string]: string; }" + "UseGenAIConnectorsResult" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/connector_selector/connector_selector_base.tsx", "deprecated": false, - "trackAdoption": false - }, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.createStorybookChatService", + "type": "Function", + "tags": [], + "label": "createStorybookChatService", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantChatService", + "text": "ObservabilityAIAssistantChatService" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.createStorybookService", + "type": "Function", + "tags": [], + "label": "createStorybookService", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantService", + "text": "ObservabilityAIAssistantService" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FailedToLoadResponse", + "type": "Function", + "tags": [], + "label": "FailedToLoadResponse", + "description": [], + "signature": [ + "() => JSX.Element" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/failed_to_load_response.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FeedbackButtons", + "type": "Function", + "tags": [], + "label": "FeedbackButtons", + "description": [], + "signature": [ + "({ onClickFeedback }: FeedbackButtonsProps) => JSX.Element" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.numeric_labels", + "id": "def-public.FeedbackButtons.$1", "type": "Object", "tags": [], - "label": "numeric_labels", + "label": "{ onClickFeedback }", "description": [], "signature": [ - "{ [x: string]: number; }" + "FeedbackButtonsProps" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.namespace", - "type": "string", - "tags": [], - "label": "namespace", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Conversation.public", - "type": "boolean", - "tags": [], - "label": "public", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "isRequired": true } ], + "returnComment": [], "initialIsOpen": false }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry", - "type": "Interface", + "id": "def-public.getAssistantSystemMessage", + "type": "Function", "tags": [], - "label": "KnowledgeBaseEntry", + "label": "getAssistantSystemMessage", "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "signature": [ + "({\n contexts,\n}: { contexts: ", + "ContextDefinition", + "[]; }) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.timestamp", - "type": "string", + "id": "def-public.getAssistantSystemMessage.$1", + "type": "Object", + "tags": [], + "label": "{\n contexts,\n}", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.getAssistantSystemMessage.$1.contexts", + "type": "Array", + "tags": [], + "label": "contexts", + "description": [], + "signature": [ + "ContextDefinition", + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.isSupportedConnectorType", + "type": "Function", + "tags": [], + "label": "isSupportedConnectorType", + "description": [], + "signature": [ + "(type: string) => boolean" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.isSupportedConnectorType.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.MessageText", + "type": "Function", + "tags": [], + "label": "MessageText", + "description": [], + "signature": [ + "({ loading, content, onActionClick }: Props) => JSX.Element" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_text.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.MessageText.$1", + "type": "Object", + "tags": [], + "label": "{ loading, content, onActionClick }", + "description": [], + "signature": [ + "Props" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_text.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync", + "type": "Function", + "tags": [], + "label": "useAbortableAsync", + "description": [], + "signature": [ + "(fn: ({}: { signal: AbortSignal; }) => T | Promise, deps: any[], options: { clearValueOnNext?: boolean | undefined; defaultValue?: (() => T) | undefined; } | undefined) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.AbortableAsyncState", + "text": "AbortableAsyncState" + }, + "" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync.$1", + "type": "Function", + "tags": [], + "label": "fn", + "description": [], + "signature": [ + "({}: { signal: AbortSignal; }) => T | Promise" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync.$2", + "type": "Array", + "tags": [], + "label": "deps", + "description": [], + "signature": [ + "any[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync.$3", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync.$3.clearValueOnNext", + "type": "CompoundType", + "tags": [], + "label": "clearValueOnNext", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.useAbortableAsync.$3.defaultValue", + "type": "Function", + "tags": [], + "label": "defaultValue", + "description": [], + "signature": [ + "(() => T) | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Conversation", + "type": "Interface", + "tags": [], + "label": "Conversation", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Conversation.timestamp", + "type": "string", "tags": [], "label": "'@timestamp'", "description": [], @@ -152,46 +581,62 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.id", - "type": "string", + "id": "def-public.Conversation.user", + "type": "Object", "tags": [], - "label": "id", + "label": "user", "description": [], + "signature": [ + "{ id?: string | undefined; name: string; }" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.text", - "type": "string", + "id": "def-public.Conversation.conversation", + "type": "Object", "tags": [], - "label": "text", + "label": "conversation", "description": [], + "signature": [ + "{ id: string; title: string; last_updated: string; }" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.doc_id", - "type": "string", + "id": "def-public.Conversation.messages", + "type": "Array", "tags": [], - "label": "doc_id", + "label": "messages", "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.confidence", - "type": "CompoundType", + "id": "def-public.Conversation.labels", + "type": "Object", "tags": [], - "label": "confidence", + "label": "labels", "description": [], "signature": [ - "\"medium\" | \"high\" | \"low\"" + "{ [x: string]: string; }" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, @@ -199,18 +644,32 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.is_correction", - "type": "boolean", + "id": "def-public.Conversation.numeric_labels", + "type": "Object", "tags": [], - "label": "is_correction", + "label": "numeric_labels", "description": [], + "signature": [ + "{ [x: string]: number; }" + ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.public", + "id": "def-public.Conversation.namespace", + "type": "string", + "tags": [], + "label": "namespace", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Conversation.public", "type": "boolean", "tags": [], "label": "public", @@ -218,111 +677,802 @@ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", "deprecated": false, "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry", + "type": "Interface", + "tags": [], + "label": "KnowledgeBaseEntry", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.timestamp", + "type": "string", + "tags": [], + "label": "'@timestamp'", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.text", + "type": "string", + "tags": [], + "label": "text", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.doc_id", + "type": "string", + "tags": [], + "label": "doc_id", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.confidence", + "type": "CompoundType", + "tags": [], + "label": "confidence", + "description": [], + "signature": [ + "\"medium\" | \"high\" | \"low\"" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.is_correction", + "type": "boolean", + "tags": [], + "label": "is_correction", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.public", + "type": "boolean", + "tags": [], + "label": "public", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.labels", + "type": "Object", + "tags": [], + "label": "labels", + "description": [], + "signature": [ + "Record | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.KnowledgeBaseEntry.role", + "type": "Enum", + "tags": [], + "label": "role", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.KnowledgeBaseEntryRole", + "text": "KnowledgeBaseEntryRole" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Message", + "type": "Interface", + "tags": [], + "label": "Message", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Message.timestamp", + "type": "string", + "tags": [], + "label": "'@timestamp'", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Message.message", + "type": "Object", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "{ content?: string | undefined; name?: string | undefined; role: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageRole", + "text": "MessageRole" + }, + "; function_call?: { name: string; arguments?: string | undefined; trigger: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageRole", + "text": "MessageRole" + }, + ".Assistant | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageRole", + "text": "MessageRole" + }, + ".User | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageRole", + "text": "MessageRole" + }, + ".Elastic; } | undefined; data?: string | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService", + "type": "Interface", + "tags": [], + "label": "ObservabilityAIAssistantChatService", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.sendAnalyticsEvent", + "type": "Function", + "tags": [], + "label": "sendAnalyticsEvent", + "description": [], + "signature": [ + "(event: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.TelemetryEventTypeWithPayload", + "text": "TelemetryEventTypeWithPayload" + }, + ") => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.sendAnalyticsEvent.$1", + "type": "CompoundType", + "tags": [], + "label": "event", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.TelemetryEventTypeWithPayload", + "text": "TelemetryEventTypeWithPayload" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat", + "type": "Function", + "tags": [], + "label": "chat", + "description": [], + "signature": [ + "(name: string, options: { messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; function?: \"none\" | \"auto\" | undefined; signal: AbortSignal; }) => ", + "Observable", + "<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventWithoutError", + "text": "StreamingChatResponseEventWithoutError" + }, + ">" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.messages", + "type": "Array", + "tags": [], + "label": "messages", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.connectorId", + "type": "string", + "tags": [], + "label": "connectorId", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.function", + "type": "CompoundType", + "tags": [], + "label": "function", + "description": [], + "signature": [ + "\"none\" | \"auto\" | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.chat.$2.signal", + "type": "Object", + "tags": [], + "label": "signal", + "description": [], + "signature": [ + "AbortSignal" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete", + "type": "Function", + "tags": [], + "label": "complete", + "description": [], + "signature": [ + "(options: { screenContexts: ", + "ObservabilityAIAssistantScreenContext", + "[]; conversationId?: string | undefined; connectorId: string; messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; persist: boolean; signal: AbortSignal; responseLanguage: string; }) => ", + "Observable", + "<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventWithoutError", + "text": "StreamingChatResponseEventWithoutError" + }, + ">" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.screenContexts", + "type": "Array", + "tags": [], + "label": "screenContexts", + "description": [], + "signature": [ + "ObservabilityAIAssistantScreenContext", + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.conversationId", + "type": "string", + "tags": [], + "label": "conversationId", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.connectorId", + "type": "string", + "tags": [], + "label": "connectorId", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.messages", + "type": "Array", + "tags": [], + "label": "messages", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.persist", + "type": "boolean", + "tags": [], + "label": "persist", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.signal", + "type": "Object", + "tags": [], + "label": "signal", + "description": [], + "signature": [ + "AbortSignal" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.complete.$1.responseLanguage", + "type": "string", + "tags": [], + "label": "responseLanguage", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.getContexts", + "type": "Function", + "tags": [], + "label": "getContexts", + "description": [], + "signature": [ + "() => ", + "ContextDefinition", + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.getFunctions", + "type": "Function", + "tags": [], + "label": "getFunctions", + "description": [], + "signature": [ + "(options?: { contexts?: string[] | undefined; filter?: string | undefined; } | undefined) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, + "<", + "CompatibleJSONSchema", + ">[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1.contexts", + "type": "Array", + "tags": [], + "label": "contexts", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.getFunctions.$1.filter", + "type": "string", + "tags": [], + "label": "filter", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.labels", - "type": "Object", + "id": "def-public.ObservabilityAIAssistantChatService.hasFunction", + "type": "Function", "tags": [], - "label": "labels", + "label": "hasFunction", "description": [], "signature": [ - "Record | undefined" + "(name: string) => boolean" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, - "trackAdoption": false + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.hasFunction.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.KnowledgeBaseEntry.role", - "type": "Enum", + "id": "def-public.ObservabilityAIAssistantChatService.hasRenderFunction", + "type": "Function", "tags": [], - "label": "role", + "label": "hasRenderFunction", "description": [], "signature": [ + "(name: string) => boolean" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.KnowledgeBaseEntryRole", - "text": "KnowledgeBaseEntryRole" + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.hasRenderFunction.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Message", - "type": "Interface", - "tags": [], - "label": "Message", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Message.timestamp", - "type": "string", - "tags": [], - "label": "'@timestamp'", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false + "returnComment": [] }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.Message.message", - "type": "Object", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction", + "type": "Function", "tags": [], - "label": "message", + "label": "renderFunction", "description": [], "signature": [ - "{ content?: string | undefined; name?: string | undefined; role: ", + "(name: string, args: string | undefined, response: { data?: string | undefined; content?: string | undefined; }, onActionClick: ", { "pluginId": "observabilityAIAssistant", - "scope": "common", + "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.MessageRole", - "text": "MessageRole" + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" }, - "; function_call?: { name: string; arguments?: string | undefined; trigger: ", + ") => React.ReactNode" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.MessageRole", - "text": "MessageRole" + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true }, - ".Assistant | ", { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.MessageRole", - "text": "MessageRole" + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$2", + "type": "string", + "tags": [], + "label": "args", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false }, - ".User | ", { - "pluginId": "observabilityAIAssistant", - "scope": "common", - "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.MessageRole", - "text": "MessageRole" + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3", + "type": "Object", + "tags": [], + "label": "response", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3.data", + "type": "string", + "tags": [], + "label": "data", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$3.content", + "type": "string", + "tags": [], + "label": "content", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, - ".Elastic; } | undefined; data?: string | undefined; }" + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantChatService.renderFunction.$4", + "type": "Function", + "tags": [], + "label": "onActionClick", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", - "deprecated": false, - "trackAdoption": false + "returnComment": [] } ], "initialIsOpen": false @@ -338,22 +1488,6 @@ "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantService.isEnabled", - "type": "Function", - "tags": [], - "label": "isEnabled", - "description": [], - "signature": [ - "() => boolean" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.ObservabilityAIAssistantService.callApi", @@ -611,7 +1745,13 @@ "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, "<", "CompatibleJSONSchema", ">[]; contextDefinitions: ", @@ -1119,7 +2259,13 @@ "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, "<", "CompatibleJSONSchema", ">[]; contextDefinitions: ", @@ -1428,78 +2574,27 @@ { "pluginId": "@kbn/server-route-repository", "scope": "common", - "docId": "kibKbnServerRouteRepositoryPluginApi", - "section": "def-common.ClientRequestParamsOf", - "text": "ClientRequestParamsOf" - }, - " & TAdditionalClientOptions]" - ], - "path": "packages/kbn-server-route-repository/src/typings.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantService.getCurrentUser", - "type": "Function", - "tags": [], - "label": "getCurrentUser", - "description": [], - "signature": [ - "() => Promise<", - { - "pluginId": "@kbn/security-plugin-types-common", - "scope": "common", - "docId": "kibKbnSecurityPluginTypesCommonPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - }, - ">" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] - }, - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantService.getLicense", - "type": "Function", - "tags": [], - "label": "getLicense", - "description": [], - "signature": [ - "() => ", - "Observable", - "<", - "ILicense", - ">" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] + "docId": "kibKbnServerRouteRepositoryPluginApi", + "section": "def-common.ClientRequestParamsOf", + "text": "ClientRequestParamsOf" + }, + " & TAdditionalClientOptions]" + ], + "path": "packages/kbn-server-route-repository/src/typings.ts", + "deprecated": false, + "trackAdoption": false + } + ] }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantService.getLicenseManagementLocator", + "id": "def-public.ObservabilityAIAssistantService.isEnabled", "type": "Function", "tags": [], - "label": "getLicenseManagementLocator", + "label": "isEnabled", "description": [], "signature": [ - "() => ", - { - "pluginId": "share", - "scope": "public", - "docId": "kibSharePluginApi", - "section": "def-public.SharePublicStart", - "text": "SharePublicStart" - } + "() => boolean" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -1516,7 +2611,13 @@ "description": [], "signature": [ "({}: { signal: AbortSignal; }) => Promise<", - "ObservabilityAIAssistantChatService", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantChatService", + "text": "ObservabilityAIAssistantChatService" + }, ">" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", @@ -1638,12 +2739,227 @@ "trackAdoption": false, "children": [], "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantService.conversations", + "type": "Object", + "tags": [], + "label": "conversations", + "description": [], + "signature": [ + "ObservabilityAIAssistantConversationService" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult", + "type": "Interface", + "tags": [], + "label": "UseChatResult", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.messages", + "type": "Array", + "tags": [], + "label": "messages", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.setMessages", + "type": "Function", + "tags": [], + "label": "setMessages", + "description": [], + "signature": [ + "(messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]) => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.setMessages.$1", + "type": "Array", + "tags": [], + "label": "messages", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.state", + "type": "Enum", + "tags": [], + "label": "state", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatState", + "text": "ChatState" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.next", + "type": "Function", + "tags": [], + "label": "next", + "description": [], + "signature": [ + "(messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]) => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.next.$1", + "type": "Array", + "tags": [], + "label": "messages", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.UseChatResult.stop", + "type": "Function", + "tags": [], + "label": "stop", + "description": [], + "signature": [ + "() => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] } ], "initialIsOpen": false } ], "enums": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatActionClickType", + "type": "Enum", + "tags": [], + "label": "ChatActionClickType", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatState", + "type": "Enum", + "tags": [], + "label": "ChatState", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.FunctionVisibility", + "type": "Enum", + "tags": [], + "label": "FunctionVisibility", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.KnowledgeBaseEntryRole", @@ -1667,9 +2983,48 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantTelemetryEventType", + "type": "Enum", + "tags": [], + "label": "ObservabilityAIAssistantTelemetryEventType", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.VisualizeESQLUserIntention", + "type": "Enum", + "tags": [], + "label": "VisualizeESQLUserIntention", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "misc": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.AbortableAsyncState", + "type": "Type", + "tags": [], + "label": "AbortableAsyncState", + "description": [], + "signature": [ + "(T extends Promise ? State : State) & { refresh: () => void; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_abortable_async.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-public.APIReturnType", @@ -1919,7 +3274,13 @@ "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, "<", "CompatibleJSONSchema", ">[]; contextDefinitions: ", @@ -2169,20 +3530,114 @@ " & { params: { body: { name: string; messages: ", { "pluginId": "observabilityAIAssistant", - "scope": "common", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", + "ServerRouteCreateOptions", + " ? TReturnType : never" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatActionClickHandler", + "type": "Type", + "tags": [], + "label": "ChatActionClickHandler", + "description": [], + "signature": [ + "(payload: ChatActionClickPayloadExecuteEsql) => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatActionClickHandler.$1", + "type": "CompoundType", + "tags": [], + "label": "payload", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickType", + "text": "ChatActionClickType" + }, + "; } & { query: string; userOverrides?: ", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.TypedLensByValueInput", + "text": "TypedLensByValueInput" + }, + " | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ChatActionClickPayload", + "type": "Type", + "tags": [], + "label": "ChatActionClickPayload", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" + "section": "def-public.ChatActionClickType", + "text": "ChatActionClickType" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", - "Readable", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; }[TEndpoint] extends { endpoint: any; params?: any; handler: ({}: any) => Promise; } & ", - "ServerRouteCreateOptions", - " ? TReturnType : never" + "; } & { query: string; userOverrides?: ", + { + "pluginId": "lens", + "scope": "public", + "docId": "kibLensPluginApi", + "section": "def-public.TypedLensByValueInput", + "text": "TypedLensByValueInput" + }, + " | undefined; }" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/api/index.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.Feedback", + "type": "Type", + "tags": [], + "label": "Feedback", + "description": [], + "signature": [ + "\"negative\" | \"positive\"" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -2436,7 +3891,13 @@ "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, "<", "CompatibleJSONSchema", ">[]; contextDefinitions: ", @@ -2734,15 +4195,220 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RegisterRenderFunctionDefinition", + "type": "Type", + "tags": [], + "label": "RegisterRenderFunctionDefinition", + "description": [], + "signature": [ + "(name: string, render: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.RenderFunction", + "text": "RenderFunction" + }, + ") => void" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RegisterRenderFunctionDefinition.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RegisterRenderFunctionDefinition.$2", + "type": "Function", + "tags": [], + "label": "render", + "description": [], + "signature": [ + "(options: { arguments: TFunctionArguments; response: TFunctionResponse; onActionClick: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" + }, + "; }) => React.ReactNode" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RegisterRenderFunctionDefinition.$2.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ arguments: TArguments; response: TResponse; onActionClick: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" + }, + "; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RenderFunction", + "type": "Type", + "tags": [], + "label": "RenderFunction", + "description": [], + "signature": [ + "(options: { arguments: TArguments; response: TResponse; onActionClick: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" + }, + "; }) => React.ReactNode" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.RenderFunction.$1", + "type": "Object", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ arguments: TArguments; response: TResponse; onActionClick: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ChatActionClickHandler", + "text": "ChatActionClickHandler" + }, + "; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.TelemetryEventTypeWithPayload", + "type": "Type", + "tags": [], + "label": "TelemetryEventTypeWithPayload", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantTelemetryEventType", + "text": "ObservabilityAIAssistantTelemetryEventType" + }, + ".ChatFeedback; payload: ", + "ChatFeedback", + "; } | { type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantTelemetryEventType", + "text": "ObservabilityAIAssistantTelemetryEventType" + }, + ".InsightFeedback; payload: ", + "InsightFeedback", + "; } | { type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantTelemetryEventType", + "text": "ObservabilityAIAssistantTelemetryEventType" + }, + ".UserSentPromptInChat; payload: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.VISUALIZE_ESQL_USER_INTENTIONS", + "type": "Array", + "tags": [], + "label": "VISUALIZE_ESQL_USER_INTENTIONS", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.VisualizeESQLUserIntention", + "text": "VisualizeESQLUserIntention" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [], "setup": { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginSetup", + "id": "def-public.ObservabilityAIAssistantPublicSetup", "type": "Interface", "tags": [], - "label": "ObservabilityAIAssistantPluginSetup", + "label": "ObservabilityAIAssistantPublicSetup", "description": [], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -2753,10 +4419,10 @@ }, "start": { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart", + "id": "def-public.ObservabilityAIAssistantPublicStart", "type": "Interface", "tags": [], - "label": "ObservabilityAIAssistantPluginStart", + "label": "ObservabilityAIAssistantPublicStart", "description": [], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -2764,7 +4430,7 @@ "children": [ { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart.service", + "id": "def-public.ObservabilityAIAssistantPublicStart.service", "type": "Object", "tags": [], "label": "service", @@ -2784,7 +4450,7 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantContextualInsight", + "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantContextualInsight", "type": "CompoundType", "tags": [], "label": "ObservabilityAIAssistantContextualInsight", @@ -2800,21 +4466,37 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart.ObservabilityAIAssistantActionMenuItem", - "type": "CompoundType", + "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantMultipaneFlyoutContext", + "type": "Object", + "tags": [], + "label": "ObservabilityAIAssistantMultipaneFlyoutContext", + "description": [], + "signature": [ + "React.Context<", + "ChatFlyoutSecondSlotHandler", + " | undefined>" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.ObservabilityAIAssistantChatServiceContext", + "type": "Object", "tags": [], - "label": "ObservabilityAIAssistantActionMenuItem", + "label": "ObservabilityAIAssistantChatServiceContext", "description": [], "signature": [ - "React.ForwardRefExoticComponent & ", + "React.Context<", { - "pluginId": "@kbn/shared-ux-utility", - "scope": "common", - "docId": "kibKbnSharedUxUtilityPluginApi", - "section": "def-common.WithSuspenseExtendedDeps", - "text": "WithSuspenseExtendedDeps" + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantChatService", + "text": "ObservabilityAIAssistantChatService" }, - ", \"key\" | \"css\" | \"analytics\"> & React.RefAttributes<{}>> | null" + " | undefined>" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, @@ -2822,7 +4504,30 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart.useGenAIConnectors", + "id": "def-public.ObservabilityAIAssistantPublicStart.useObservabilityAIAssistantChatService", + "type": "Function", + "tags": [], + "label": "useObservabilityAIAssistantChatService", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantChatService", + "text": "ObservabilityAIAssistantChatService" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.useGenAIConnectors", "type": "Function", "tags": [], "label": "useGenAIConnectors", @@ -2839,7 +4544,95 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-public.ObservabilityAIAssistantPluginStart.useUserPreferredLanguage", + "id": "def-public.ObservabilityAIAssistantPublicStart.useChat", + "type": "Function", + "tags": [], + "label": "useChat", + "description": [], + "signature": [ + "(props: ", + "UseChatProps", + ") => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.UseChatResult", + "text": "UseChatResult" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.useChat.$1", + "type": "Object", + "tags": [], + "label": "props", + "description": [], + "signature": [ + "{ connectorId?: string | undefined; service: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantService", + "text": "ObservabilityAIAssistantService" + }, + "; initialMessages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; initialConversationId?: string | undefined; chatService: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "public", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-public.ObservabilityAIAssistantChatService", + "text": "ObservabilityAIAssistantChatService" + }, + "; persist: boolean; onConversationUpdate?: ((event: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationCreateEvent", + "text": "ConversationCreateEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationUpdateEvent", + "text": "ConversationUpdateEvent" + }, + ") => void) | undefined; onChatComplete?: ((messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]) => void) | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.useUserPreferredLanguage", "type": "Function", "tags": [], "label": "useUserPreferredLanguage", @@ -2850,7 +4643,67 @@ "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages", + "type": "Function", + "tags": [], + "label": "getContextualInsightMessages", + "description": [], + "signature": [ + "({}: { message: string; instructions: string; }) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1", + "type": "Object", + "tags": [], + "label": "{}", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1.message", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-public.ObservabilityAIAssistantPublicStart.getContextualInsightMessages.$1.instructions", + "type": "string", + "tags": [], + "label": "instructions", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], "returnComment": [] } ], @@ -3113,7 +4966,13 @@ "; \"GET /internal/observability_ai_assistant/functions\": { endpoint: \"GET /internal/observability_ai_assistant/functions\"; params?: undefined; handler: ({}: ", "ObservabilityAIAssistantRouteHandlerResources", ") => Promise<{ functionDefinitions: ", - "FunctionDefinition", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, "<", "CompatibleJSONSchema", ">[]; contextDefinitions: ", @@ -3339,114 +5198,491 @@ "pluginId": "observabilityAIAssistant", "scope": "common", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" + "section": "def-common.Message", + "text": "Message" + }, + ", unknown>>; connectorId: ", + "StringC", + "; functions: ", + "ArrayC", + "<", + "TypeC", + "<{ name: ", + "StringC", + "; description: ", + "StringC", + "; parameters: ", + "AnyC", + "; }>>; }>, ", + "PartialC", + "<{ functionCall: ", + "StringC", + "; }>]>; }> | undefined; handler: ({}: ", + "ObservabilityAIAssistantRouteHandlerResources", + " & { params: { body: { name: string; messages: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", + "Readable", + ">; } & ", + "ObservabilityAIAssistantRouteCreateOptions", + "; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/get_global_observability_ai_assistant_route_repository.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.RegistrationCallback", + "type": "Type", + "tags": [], + "label": "RegistrationCallback", + "description": [], + "signature": [ + "({}: { signal: AbortSignal; resources: ", + "RespondFunctionResources", + "; client: ", + "ObservabilityAIAssistantClient", + "; functions: ", + "ChatFunctionClient", + "; }) => Promise" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.RegistrationCallback.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "{ signal: AbortSignal; resources: ", + "RespondFunctionResources", + "; client: ", + "ObservabilityAIAssistantClient", + "; functions: ", + "ChatFunctionClient", + "; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "objects": [], + "start": { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.ObservabilityAIAssistantServerStart", + "type": "Interface", + "tags": [], + "label": "ObservabilityAIAssistantServerStart", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.ObservabilityAIAssistantServerStart.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [ + "\nReturns a Observability AI Assistant service instance" + ], + "signature": [ + "ObservabilityAIAssistantService" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "lifecycle": "start", + "initialIsOpen": true + }, + "setup": { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.ObservabilityAIAssistantServerSetup", + "type": "Interface", + "tags": [], + "label": "ObservabilityAIAssistantServerSetup", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-server.ObservabilityAIAssistantServerSetup.service", + "type": "Object", + "tags": [], + "label": "service", + "description": [ + "\nReturns a Observability AI Assistant service instance" + ], + "signature": [ + "ObservabilityAIAssistantService" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "lifecycle": "setup", + "initialIsOpen": true + } + }, + "common": { + "classes": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionError", + "type": "Class", + "tags": [], + "label": "ChatCompletionError", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionError", + "text": "ChatCompletionError" + }, + " extends Error" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionError.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionError.Unnamed.$1", + "type": "Uncategorized", + "tags": [], + "label": "code", + "description": [], + "signature": [ + "T" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionError.Unnamed.$2", + "type": "string", + "tags": [], + "label": "message", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionError.Unnamed.$3", + "type": "Uncategorized", + "tags": [], + "label": "meta", + "description": [], + "signature": [ + "ErrorMetaAttributes[T] | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createConversationNotFoundError", + "type": "Function", + "tags": [], + "label": "createConversationNotFoundError", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionError", + "text": "ChatCompletionError" + }, + "<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionErrorCode", + "text": "ChatCompletionErrorCode" + }, + ".NotFoundError>" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createInternalServerError", + "type": "Function", + "tags": [], + "label": "createInternalServerError", + "description": [], + "signature": [ + "(originalErrorMessage: string) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionError", + "text": "ChatCompletionError" + }, + "<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionErrorCode", + "text": "ChatCompletionErrorCode" + }, + ".InternalError>" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createInternalServerError.$1", + "type": "string", + "tags": [], + "label": "originalErrorMessage", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createTokenLimitReachedError", + "type": "Function", + "tags": [], + "label": "createTokenLimitReachedError", + "description": [], + "signature": [ + "(tokenLimit: number | undefined, tokenCount: number | undefined) => ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionError", + "text": "ChatCompletionError" }, - ", unknown>>; connectorId: ", - "StringC", - "; functions: ", - "ArrayC", "<", - "TypeC", - "<{ name: ", - "StringC", - "; description: ", - "StringC", - "; parameters: ", - "AnyC", - "; }>>; }>, ", - "PartialC", - "<{ functionCall: ", - "StringC", - "; }>]>; }> | undefined; handler: ({}: ", - "ObservabilityAIAssistantRouteHandlerResources", - " & { params: { body: { name: string; messages: ", { "pluginId": "observabilityAIAssistant", "scope": "common", "docId": "kibObservabilityAIAssistantPluginApi", - "section": "def-common.Message", - "text": "Message" + "section": "def-common.ChatCompletionErrorCode", + "text": "ChatCompletionErrorCode" }, - "[]; connectorId: string; functions: { name: string; description: string; parameters: any; }[]; } & { functionCall?: string | undefined; }; }; }) => Promise<", - "Readable", - ">; } & ", - "ObservabilityAIAssistantRouteCreateOptions", - "; }" + ".TokenLimitReachedError>" ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/get_global_observability_ai_assistant_route_repository.ts", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createTokenLimitReachedError.$1", + "type": "number", + "tags": [], + "label": "tokenLimit", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.createTokenLimitReachedError.$2", + "type": "number", + "tags": [], + "label": "tokenCount", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isChatCompletionError", + "type": "Function", + "tags": [], + "label": "isChatCompletionError", + "description": [], + "signature": [ + "(error: Error) => boolean" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isChatCompletionError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [], + "signature": [ + "Error" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isSupportedConnectorType", + "type": "Function", + "tags": [], + "label": "isSupportedConnectorType", + "description": [], + "signature": [ + "(type: string) => boolean" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isSupportedConnectorType.$1", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isTokenLimitReachedError", + "type": "Function", + "tags": [], + "label": "isTokenLimitReachedError", + "description": [], + "signature": [ + "(error: Error) => boolean" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", "deprecated": false, "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.isTokenLimitReachedError.$1", + "type": "Object", + "tags": [], + "label": "error", + "description": [], + "signature": [ + "Error" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], "initialIsOpen": false } ], - "objects": [], - "start": { - "parentPluginId": "observabilityAIAssistant", - "id": "def-server.ObservabilityAIAssistantPluginStart", - "type": "Interface", - "tags": [], - "label": "ObservabilityAIAssistantPluginStart", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-server.ObservabilityAIAssistantPluginStart.service", - "type": "Object", - "tags": [], - "label": "service", - "description": [ - "\nReturns a Observability AI Assistant service instance" - ], - "signature": [ - "ObservabilityAIAssistantService" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "lifecycle": "start", - "initialIsOpen": true - }, - "setup": { - "parentPluginId": "observabilityAIAssistant", - "id": "def-server.ObservabilityAIAssistantPluginSetup", - "type": "Interface", - "tags": [], - "label": "ObservabilityAIAssistantPluginSetup", - "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "observabilityAIAssistant", - "id": "def-server.ObservabilityAIAssistantPluginSetup.service", - "type": "Object", - "tags": [], - "label": "service", - "description": [ - "\nReturns a Observability AI Assistant service instance" - ], - "signature": [ - "ObservabilityAIAssistantService" - ], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "lifecycle": "setup", - "initialIsOpen": true - } - }, - "common": { - "classes": [], - "functions": [], "interfaces": [ { "parentPluginId": "observabilityAIAssistant", @@ -3560,12 +5796,121 @@ }, { "parentPluginId": "observabilityAIAssistant", - "id": "def-common.Conversation.public", - "type": "boolean", + "id": "def-common.Conversation.public", + "type": "boolean", + "tags": [], + "label": "public", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition", + "type": "Interface", + "tags": [], + "label": "FunctionDefinition", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionDefinition", + "text": "FunctionDefinition" + }, + "" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.description", + "type": "string", + "tags": [], + "label": "description", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.visibility", + "type": "CompoundType", + "tags": [], + "label": "visibility", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.FunctionVisibility", + "text": "FunctionVisibility" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.descriptionForUser", + "type": "string", + "tags": [], + "label": "descriptionForUser", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.parameters", + "type": "Uncategorized", + "tags": [], + "label": "parameters", + "description": [], + "signature": [ + "TParameters" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionDefinition.contexts", + "type": "Array", "tags": [], - "label": "public", + "label": "contexts", "description": [], - "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "signature": [ + "string[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts", "deprecated": false, "trackAdoption": false } @@ -3773,6 +6118,30 @@ } ], "enums": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionErrorCode", + "type": "Enum", + "tags": [], + "label": "ChatCompletionErrorCode", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.FunctionVisibility", + "type": "Enum", + "tags": [], + "label": "FunctionVisibility", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "observabilityAIAssistant", "id": "def-common.KnowledgeBaseEntryRole", @@ -3796,9 +6165,331 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.StreamingChatResponseEventType", + "type": "Enum", + "tags": [], + "label": "StreamingChatResponseEventType", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.VisualizeESQLUserIntention", + "type": "Enum", + "tags": [], + "label": "VisualizeESQLUserIntention", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "misc": [ + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.BufferFlushEvent", + "type": "Type", + "tags": [], + "label": "BufferFlushEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".BufferFlush; } & { data?: string | undefined; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionChunkEvent", + "type": "Type", + "tags": [], + "label": "ChatCompletionChunkEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".ChatCompletionChunk; } & { id: string; message: { content?: string | undefined; function_call?: { name?: string | undefined; arguments?: string | undefined; } | undefined; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ChatCompletionErrorEvent", + "type": "Type", + "tags": [], + "label": "ChatCompletionErrorEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".ChatCompletionError; } & { error: { message: string; stack?: string | undefined; code?: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionErrorCode", + "text": "ChatCompletionErrorCode" + }, + " | undefined; meta?: Record | undefined; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ConversationCreateEvent", + "type": "Type", + "tags": [], + "label": "ConversationCreateEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".ConversationCreate; } & { conversation: { id: string; title: string; last_updated: string; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ConversationCreateRequest", + "type": "Type", + "tags": [], + "label": "ConversationCreateRequest", + "description": [], + "signature": [ + "Omit<", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Conversation", + "text": "Conversation" + }, + ", \"namespace\" | \"user\" | \"conversation\"> & { conversation: { title: string; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.ConversationUpdateEvent", + "type": "Type", + "tags": [], + "label": "ConversationUpdateEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".ConversationUpdate; } & { conversation: { id: string; title: string; last_updated: string; }; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.MessageAddEvent", + "type": "Type", + "tags": [], + "label": "MessageAddEvent", + "description": [], + "signature": [ + "{ type: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.StreamingChatResponseEventType", + "text": "StreamingChatResponseEventType" + }, + ".MessageAdd; } & { message: ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.Message", + "text": "Message" + }, + "; id: string; }" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.StreamingChatResponseEvent", + "type": "Type", + "tags": [], + "label": "StreamingChatResponseEvent", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationCreateEvent", + "text": "ConversationCreateEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationUpdateEvent", + "text": "ConversationUpdateEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionChunkEvent", + "text": "ChatCompletionChunkEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageAddEvent", + "text": "MessageAddEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionErrorEvent", + "text": "ChatCompletionErrorEvent" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.StreamingChatResponseEventWithoutError", + "type": "Type", + "tags": [], + "label": "StreamingChatResponseEventWithoutError", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationCreateEvent", + "text": "ConversationCreateEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ConversationUpdateEvent", + "text": "ConversationUpdateEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.ChatCompletionChunkEvent", + "text": "ChatCompletionChunkEvent" + }, + " | ", + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.MessageAddEvent", + "text": "MessageAddEvent" + } + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "observabilityAIAssistant", + "id": "def-common.VISUALIZE_ESQL_USER_INTENTIONS", + "type": "Array", + "tags": [], + "label": "VISUALIZE_ESQL_USER_INTENTIONS", + "description": [], + "signature": [ + { + "pluginId": "observabilityAIAssistant", + "scope": "common", + "docId": "kibObservabilityAIAssistantPluginApi", + "section": "def-common.VisualizeESQLUserIntention", + "text": "VisualizeESQLUserIntention" + }, + "[]" + ], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], - "misc": [], "objects": [] } } \ No newline at end of file diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 8f37b579ab86..ac39ba31380c 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 79 | 0 | 77 | 14 | +| 218 | 1 | 216 | 21 | ## Client @@ -31,6 +31,9 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- ### Start +### Functions + + ### Interfaces @@ -53,9 +56,18 @@ Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs- ## Common +### Functions + + +### Classes + + ### Interfaces ### Enums +### Consts, variables and types + + diff --git a/api_docs/observability_a_i_assistant_app.devdocs.json b/api_docs/observability_a_i_assistant_app.devdocs.json new file mode 100644 index 000000000000..b03a7f23f96d --- /dev/null +++ b/api_docs/observability_a_i_assistant_app.devdocs.json @@ -0,0 +1,55 @@ +{ + "id": "observabilityAIAssistantApp", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [], + "start": { + "parentPluginId": "observabilityAIAssistantApp", + "id": "def-server.ObservabilityAIAssistantAppServerStart", + "type": "Interface", + "tags": [], + "label": "ObservabilityAIAssistantAppServerStart", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "start", + "initialIsOpen": true + }, + "setup": { + "parentPluginId": "observabilityAIAssistantApp", + "id": "def-server.ObservabilityAIAssistantAppServerSetup", + "type": "Interface", + "tags": [], + "label": "ObservabilityAIAssistantAppServerSetup", + "description": [], + "path": "x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "lifecycle": "setup", + "initialIsOpen": true + } + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx new file mode 100644 index 000000000000..901d4e2c9c81 --- /dev/null +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -0,0 +1,33 @@ +--- +#### +#### This document is auto-generated and is meant to be viewed inside our experimental, new docs system. +#### Reach out in #docs-engineering for more info. +#### +id: kibObservabilityAIAssistantAppPluginApi +slug: /kibana-dev-docs/api/observabilityAIAssistantApp +title: "observabilityAIAssistantApp" +image: https://source.unsplash.com/400x175/?github +description: API docs for the observabilityAIAssistantApp plugin +date: 2024-03-13 +tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] +--- +import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; + + + +Contact [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 2 | 0 | 2 | 0 | + +## Server + +### Setup + + +### Start + + diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 87553cebdcc9..bed4f705a6de 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-03-11 +date: 2024-03-13 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 0a5f2a229c49..9304c7751f62 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-03-11 +date: 2024-03-13 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 3aa6d03072e5..b0b5b87e7d52 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.devdocs.json b/api_docs/osquery.devdocs.json index 02d9f62e0978..e3de3dbf5b36 100644 --- a/api_docs/osquery.devdocs.json +++ b/api_docs/osquery.devdocs.json @@ -301,7 +301,7 @@ "label": "createActionService", "description": [], "signature": [ - "{ create: (params: { agent_ids?: string[] | undefined; agent_all?: boolean | undefined; agent_platforms?: string[] | undefined; agent_policy_ids?: string[] | undefined; query?: string | undefined; queries?: { id: string; query: string; ecs_mapping: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; version: string | undefined; platform: string | undefined; removed: boolean | undefined; snapshot: boolean | undefined; }[] | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; ecs_mapping?: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; pack_id?: string | undefined; alert_ids?: string[] | undefined; case_ids?: string[] | undefined; event_ids?: string[] | undefined; metadata?: object | undefined; }, alertData?: OutputOf public API | Number of teams | |--------------|----------|------------------------| -| 753 | 645 | 40 | +| 754 | 646 | 40 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 45408 | 232 | 34331 | 1760 | +| 45561 | 233 | 34484 | 1771 | ## Plugin Directory | Plugin name           | Maintaining team | Description | API Cnt | Any Cnt | Missing
comments | Missing
exports | |--------------|----------------|-----------|--------------|----------|---------------|--------| -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 279 | 0 | 273 | 31 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 281 | 0 | 275 | 31 | | | [@elastic/appex-sharedux @elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | @@ -51,7 +51,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 14 | 0 | 2 | 2 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 32 | 0 | 24 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 149 | 0 | 125 | 6 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 332 | 0 | 324 | 16 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 340 | 0 | 332 | 20 | | crossClusterReplication | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 271 | 0 | 252 | 1 | @@ -108,7 +108,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 151 | 0 | 111 | 1 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Image embeddable | 3 | 0 | 3 | 1 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | -| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 225 | 0 | 220 | 3 | +| | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 224 | 0 | 219 | 3 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin visualizes data from Filebeat and Metricbeat, and integrates with other Observability solutions | 37 | 0 | 34 | 6 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 4 | 0 | 4 | 0 | | inputControlVis | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds Input Control visualization to Kibana | 0 | 0 | 0 | 0 | @@ -129,7 +129,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 302 | 0 | 276 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-management) | - | 45 | 0 | 45 | 7 | -| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 261 | 0 | 260 | 28 | +| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 264 | 0 | 263 | 28 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 6 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 151 | 3 | 65 | 96 | @@ -141,7 +141,8 @@ 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) | - | 651 | 2 | 642 | 17 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 79 | 0 | 77 | 14 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 218 | 1 | 216 | 21 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 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. | 21 | 0 | 21 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 14 | 0 | 14 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 330 | 1 | 325 | 20 | @@ -166,7 +167,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-reporting-services](https://github.com/orgs/elastic/teams/kibana-reporting-services) | Kibana Screenshotting Plugin | 32 | 0 | 8 | 4 | | searchprofiler | [@elastic/platform-deployment-management](https://github.com/orgs/elastic/teams/platform-deployment-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. | 404 | 0 | 198 | 2 | -| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 194 | 0 | 124 | 37 | +| | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 193 | 0 | 123 | 37 | | | [@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. | 21 | 0 | 20 | 0 | @@ -585,7 +586,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | -| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 122 | 0 | 119 | 0 | +| | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 123 | 0 | 120 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 76 | 0 | 76 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 3151 | 0 | 3151 | 0 | diff --git a/api_docs/presentation_panel.devdocs.json b/api_docs/presentation_panel.devdocs.json index c876b5f958af..e7b0612a17d0 100644 --- a/api_docs/presentation_panel.devdocs.json +++ b/api_docs/presentation_panel.devdocs.json @@ -606,7 +606,7 @@ }, "<", "PanelCompatibleComponent", - ">; }" + " | null>; }" ], "path": "src/plugins/presentation_panel/public/panel_component/types.ts", "deprecated": false, diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index e10391498aed..994ba26aee1e 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-03-11 +date: 2024-03-13 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 879f85a1debf..d1a1121ed511 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 10fe2007dd25..8b011921881e 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.devdocs.json b/api_docs/profiling_data_access.devdocs.json index 23726acc3081..e674938901dd 100644 --- a/api_docs/profiling_data_access.devdocs.json +++ b/api_docs/profiling_data_access.devdocs.json @@ -55,7 +55,7 @@ "CloudSetupStateType", " | ", "SetupStateType", - ">; fetchFunction: ({ core, esClient, startIndex, endIndex, indices, stacktraceIdsField, query, totalSeconds, }: ", + ">; fetchFunctions: ({ core, esClient, startIndex, endIndex, indices, stacktraceIdsField, query, totalSeconds, }: ", "FetchFunctionsParams", ") => Promise<", { diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 3e9bf36aaae0..5fb3d261b024 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-03-11 +date: 2024-03-13 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 7b4961213e89..0739092ad7a4 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-03-11 +date: 2024-03-13 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 a010c4b0c52a..065fa5a7dedf 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-03-11 +date: 2024-03-13 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 c0f8910924eb..c62b419d0847 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-03-11 +date: 2024-03-13 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index 6af7f820a554..d8581b4e2ec5 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -107,7 +107,7 @@ "label": "get", "description": [], "signature": [ - "({ id, index }: GetAlertParams) => Promise Promise Promise<", "SearchResponse", - " Promise Promise OutputOf OutputOf + +``` + +## Main Interface + +### LensConfigBuilder + +The `LensConfigBuilder` class is the central interface of the API, facilitating the creation of various Lens chart types through a unified and simplified process. It leverages predefined chart configurations and integrates seamlessly with essential Kibana services, such as formula calculations and data view management, to produce either Lens attributes or embeddable inputs based on the developer's requirements. + +#### Constructor + +The constructor requires two parameters: + +- `formulaAPI`: An instance of `FormulaPublicApi`, allowing the builder to perform formula calculations necessary for certain visualizations. +- `dataViewsAPI`: An instance of `DataViewsPublicPluginStart`, enabling the builder to access and manage data views within Kibana. + +#### build Method + +The `build` method is the primary method used to generate a Lens configuration. It accepts a `LensConfig` object, detailing the type of chart and its options, and an optional `LensConfigOptions` object for additional configuration options like filters, queries, and time ranges. + +**Parameters:** + +- `config`: A `LensConfig` object specifying the chart type and its configuration. +- `options` (optional): A `LensConfigOptions` object providing additional settings such as embeddable options, time range overrides, filters, and queries. + +**Returns:** A Promise resolving to either `LensAttributes` or `LensEmbeddableInput`, depending on the options provided. This allows the generated configuration to be directly used within Kibana Lens visualizations. + +Here's a detailed breakdown of each property within the `LensConfigOptions`: + +### embeddable + +- **Type:** `boolean` +- **Optional** +- **Description:** Determines the format of the output generated by the `LensConfigBuilder`. When set to `true`, the output will be in the form of `LensEmbeddableInput`, suitable for embedding directly into a Kibana dashboard as an embeddable object. If `false` or not set, the output will be `LensAttributes`, representing the configuration attributes for Lens visualizations without the embedding specifics. + +### timeRange + +- **Type:** `TimeRange` +- **Optional** +- **Description:** Allows for an optional override of the time range for the visualization. The `TimeRange` object includes `from` and `to` properties to specify the start and end times, and a `type` property indicating whether the range is `relative` or `absolute`. This is particularly useful for tailoring the visualization to specific time frames of interest, independent of the global time filters applied in Kibana. + +### filters + +- **Type:** `Filter[]` +- **Optional** +- **Description:** Provides an array of `Filter` objects that will be applied to the visualization, enabling developers to pre-define and apply specific filters to the data being visualized. This allows for the creation of more focused and relevant visualizations by pre-filtering the data based on specific criteria. + +### query + +- **Type:** `Query` +- **Optional** +- **Description:** Allows specifying a query to further refine the data displayed in the visualization. The `Query` object includes a `language` property (e.g., `kuery` or `lucene`) and a `query` string, which represents the actual query to be executed. This is useful for dynamically adjusting the data set based on user input or application context, providing a flexible way to interact with the data. diff --git a/dev_docs/lens/dataset.mdx b/dev_docs/lens/dataset.mdx new file mode 100644 index 000000000000..848b08eae9af --- /dev/null +++ b/dev_docs/lens/dataset.mdx @@ -0,0 +1,20 @@ +### `dataset` + +The `dataset` configuration within the Lens Config Builder API defines the source of data for a visualization. + +#### Types of Dataset Configurations + +1. **LensESQLDataset (`LensESQLDataset`):** +- Utilizes the Elasticsearch Query Language (ES|QL) for retrieving data. +- Attributes include: +- `esql`: A string containing the ES|QL query. ES|QL is a powerful query language that allows for complex search and aggregation operations, making this dataset type particularly flexible and powerful for advanced data retrieval scenarios. + +2. **LensDatatableDataset (`LensDatatableDataset`):** +- Represents data in a tabular format, suitable for direct visualization or further processing. +- This dataset type is typically used when data is already aggregated or processed and just needs to be displayed. + +3. **LensDataviewDataset (`LensDataviewDataset`):** +- Targets data within a specific Elasticsearch index or data view. +- Attributes include: +- `index`: The ID of the data view or the name of the Elasticsearch index pattern. +- `timeFieldName` (optional): The name of the field used for time-based operations, providing context for time range queries and aggregations. diff --git a/dev_docs/lens/examples.mdx b/dev_docs/lens/examples.mdx new file mode 100644 index 000000000000..781d2af0d79e --- /dev/null +++ b/dev_docs/lens/examples.mdx @@ -0,0 +1,118 @@ +--- +id: kibDevLensConfigAPIExamples +slug: /kibana-dev-docs/lens/config-builder/examples +title: Lens Config Builder API Examples +description: Lens Config Builder API Examples +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'examples'] +--- + +Here are a few simple configurations for different types of visualizations using the Lens Config Builder API. +These examples demonstrate how to set up basic charts, including Metric, Pie, and XY (line chart) visualizations. +Each configuration showcases the flexibility and ease of defining visual attributes, queries, and other options +to tailor the visualization to specific requirements. + +### Metric Chart Configuration + +```javascript +const metricConfig = { + chartType: 'metric', + title: 'Total Sales', + dataset: { + esql: 'from myindex | stats totalSales = sum(sales_field)', + }, + value: 'totalSales', + label: 'Total Sales Value', +}; +``` + +**Explanation:** + +- `chartType`: Specifies the type of chart, in this case, a metric chart. +- `title`: The title of the visualization, displayed as "Total Sales." +- `dataset`: Defines the data source, in this case using ES|QL to select data. +- `value`: Field name in the result to use for value. +- `label`: The label for the metric, providing context to the value displayed. + +### Pie Chart Configuration + +```javascript +const pieConfig = { + chartType: 'pie', + title: 'Sales by Category', + dataset: { + esql: 'from myindex | stats totalSales = sum(sales_field) by category_field | limit 10', + }, + breakdown: ['category_field'], + value: 'totalSales', + legend: { + show: true, + position: 'right', + }, +}; +``` + +**Explanation:** + +- `chartType`: Indicates that this configuration is for a pie chart. +- `title`: Sets the visualization title to "Sales by Category." +- `dataset`: Selects the data with ES|QL +- `value`: specifies which field to use for value +- `breakdown`: Specifies which field to use for breakdown +- `legend`: Configures the legend to be shown on the right side of the chart, aiding in category identification. + +### XY Chart Configuration (Line Chart) + +```javascript +const xyConfig = { + chartType: 'xy', + title: 'Monthly Sales Trend', + dataset: { + esql: 'FROM sales_data | EVAL timestamp=DATE_TRUNC(3 hour, @timestamp) | stats sales = SUM(sales_field) by timestamp', + }, + layers: [ + { + type: 'series', + seriesType: 'line', + xAxis: 'timestamp', + yAxis: [ + { + value: 'sales', + label: 'Total Sales', + } + ], + }, + ], + axisTitleVisibility: { + showXAxisTitle: true, + showYAxisTitle: true, + }, +}; +``` + +**Explanation:** + +- `chartType`: Specifies an XY chart, which can represent various types of line, area, and bar charts. +- `title`: The title for the visualization, "Monthly Sales Trend." +- `dataset`: Uses ES|QL to select the data. +- `layers`: Defines a single layer for the chart, in this case, a line chart representing sales over time. +- `type`: Indicates the layer is a series. +- `seriesType`: Specifies the chart as a line chart. +- `xAxis`: Defines the field to use for x axis. +- `yAxis`: Defines the field to use for y axis and the label +- `axisTitleVisibility`: Ensures both X and Y axis titles are displayed for clarity. + +These configurations illustrate the API's capability to define various visualization types with a straightforward and comprehensible structure, enabling developers to quickly integrate rich data visualizations into their applications. + + +### Converting to actual lens configuration + +Any of the above LensConfigs can be converted to actual lens configuration which can be passed to lens embeddable like this: + +``` +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder(config, { + timeRange: { from: 'now-30d', to: 'now', type: 'relative' }, + embeddable: true, +} +``` \ No newline at end of file diff --git a/dev_docs/lens/gauge.mdx b/dev_docs/lens/gauge.mdx new file mode 100644 index 000000000000..536ac90e1889 --- /dev/null +++ b/dev_docs/lens/gauge.mdx @@ -0,0 +1,84 @@ +--- +id: kibDevLensConfigAPIGauge +slug: /kibana-dev-docs/lens/config-builder/gauge +title: Lens Config Builder API - Gauge +description: Lens Config Builder API - Gauge +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'gauge'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensGaugeConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'gauge'` +- **Description:** Sets the chart type to gauge. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `value` + +- **Type:** `LensLayerQuery` +- **Description:** Specifies the field or formula used to determine the main value displayed by the gauge. This is critical for representing the core metric around which the gauge visualization is centered. + +## Optional Properties + +### `label` + +- **Type:** `string` +- **Description:** Offers a descriptive label for the gauge's main value, providing additional context and helping to clarify what the gauge measures. + +### `queryMinValue` + +- **Type:** `LensLayerQuery` +- **Description:** Defines a query for calculating the minimum value of the gauge's scale. This is particularly useful for gauges that measure a metric's performance against predefined ranges. + +### `queryMaxValue` + +- **Type:** `LensLayerQuery` +- **Description:** Determines a query for establishing the maximum value of the gauge's scale, setting the upper boundary for what the gauge can display. + +### `queryGoalValue` + +- **Type:** `LensLayerQuery` +- **Description:** Allows specifying a goal or target value for the gauge, enabling users to visually assess how the current value compares to a set objective. + +### `shape` + +- **Type:** `'arc' | 'circle' | 'horizontalBullet' | 'verticalBullet'` +- **Description:** Controls the appearance of the gauge by defining its shape. Each shape can convey the data differently, offering various stylistic and functional approaches to data presentation. + + + +## Example + +``` +const gaugeConfig: LensConfig = { + chartType: 'gauge', + title: 'CPU Utilization', + dataset: { + esql: 'from myindex | stats avgCpuUtilization = avg(cpu_utilization) | eval max=100 ', + }, + value: 'avgCpuUtilization', + label: 'Average CPU Utilization', + queryMaxValue: 'max', + shape: 'arc', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(gaugeConfig, { + timeRange: { from: 'now-1h', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + +This example demonstrates how to create a gauge visualization using the `LensGaugeConfig`. It sets up a gauge to display the average CPU utilization. \ No newline at end of file diff --git a/dev_docs/lens/heatmap.mdx b/dev_docs/lens/heatmap.mdx new file mode 100644 index 000000000000..8d5bd90f3459 --- /dev/null +++ b/dev_docs/lens/heatmap.mdx @@ -0,0 +1,73 @@ +--- +id: kibDevLensConfigAPIHeatmap +slug: /kibana-dev-docs/lens/config-builder/heatmap +title: Lens Config Builder API - Heatmap +description: Lens Config Builder API - Heatmap +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'heatmap'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensHeatmapConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'heatmap'` +- **Description:** Sets the chart type to heatmap. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `breakdown` + +- **Type:** `LensBreakdownConfig` +- **Description:** Configures the data segmentation for Y-axis. Check breakdown configuration details below. + +### `xAxis` + +- **Type:** `LensBreakdownConfig` +- **Description:** Defines the breakdown configuration for the X-axis in the heatmap. Check breakdown configuration details below. + +## Optional Properties + +### `legend` + +- **Type:** `Identity` +- **Description:** Configures the legend for the heatmap. The legend settings include options to show or hide the legend and to specify its position ('top', 'left', 'bottom', 'right'). This is crucial for interpreting the colors and gradients used in the heatmap, as it provides a reference scale for the data values represented. + + + + +## Example + +``` +const heatmapConfig: LensConfig = { + chartType: 'heatmap', + title: 'Heatmap Chart', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest, geo.src', + }, + breakdown: 'geo.dest', + xAxis: 'geo.src', + value: 'bytes', + legend: { + show: true, + position: 'right', + }, +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(heatmapConfig, { + timeRange: { from: 'now-1M', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + +This example outlines how to create a heatmap visualization displaying website traffic, segmented by days of the week (`weekday`) and hours of the day (`hour`). The `breakdown` and `xAxis` configurations segment the data into a grid where each cell represents the number of sessions during a specific hour on a given day. The use of an ESQL query in the `dataset` configuration allows for direct aggregation of traffic data, facilitating efficient and dynamic heatmap generation. The legend is configured to be visible on the right, providing a guide for interpreting the color intensities of the heatmap. \ No newline at end of file diff --git a/dev_docs/lens/index.mdx b/dev_docs/lens/index.mdx new file mode 100644 index 000000000000..a962895309db --- /dev/null +++ b/dev_docs/lens/index.mdx @@ -0,0 +1,13 @@ +--- +id: kibDevLensOverview +slug: /kibana-dev-docs/lens +title: Lens Documentation +description: Lens Documentation for Developers +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'landing'] +--- + + diff --git a/dev_docs/lens/metric.mdx b/dev_docs/lens/metric.mdx new file mode 100644 index 000000000000..3ea283088e4b --- /dev/null +++ b/dev_docs/lens/metric.mdx @@ -0,0 +1,82 @@ +--- +id: kibDevLensConfigAPIMetric +slug: /kibana-dev-docs/lens/config-builder/metric +title: Lens Config Builder API - Metric +description: Lens Config Builder API - Metric +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'metric'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + + +Understanding `LensMetricConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'metric'` +- **Description:** Sets the chart type to metric. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `value` + +- **Type:** `LensLayerQuery` +- **Description:** A field to use for the value if the dataset is ESQL or Datatable or LensFormula is dataset is an index pattern. + +## Optional Properties + +### `label` + +- **Type:** `string` +- **Description:** Provides a descriptive label for the displayed metric, enhancing the chart's interpretability by offering additional details about the metric. + +### `querySecondaryMetric` + +- **Type:** `LensLayerQuery` +- **Description:** Allows specifying a secondary metric, same as value it should be the name of field or lens formula. + +### `queryMaxValue` + +- **Type:** `LensLayerQuery` +- **Description:** Used to define a query for calculating a maximum value, same as value it should be the name of field or lens formula. + + + +### `trendLine` + +- **Type:** `boolean` +- **Description:** When set to true, indicates that a trend line should be displayed, providing a visual indication of how the metric has changed over time. + +### `subtitle` + +- **Type:** `string` +- **Description:** An optional subtitle for the chart, which can be used to provide additional context, explanatory notes, or any supplementary information that aids in understanding the metric. + + +## Example + +``` +const config: LensConfig = { + chartType: 'metric', + title: 'Total Sales', + dataset: { + esql: 'from myindex | stats totalSales = sum(sales_field)', + }, + value: 'totalSales', + label: 'Total Sales Value', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder(config, { + timeRange: { from: 'now-30d', to: 'now', type: 'relative' }, + embeddable: true, +} +``` \ No newline at end of file diff --git a/dev_docs/lens/mosaic.mdx b/dev_docs/lens/mosaic.mdx new file mode 100644 index 000000000000..7fcc41f41cc4 --- /dev/null +++ b/dev_docs/lens/mosaic.mdx @@ -0,0 +1,62 @@ +--- +id: kibDevLensConfigAPIMosaic +slug: /kibana-dev-docs/lens/config-builder/mosaic +title: Lens Config Builder API - Mosaic +description: Lens Config Builder API - Mosaic +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'mosaic'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensMosaicConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'mosaic'` +- **Description:** Sets the chart type to mosaic, a variation of a stacked bar chart that displays the distribution of data across two categories. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `breakdown` + +- **Type:** `LensBreakdownConfig` +- **Description:** Configures the primary categorization of data for the mosaic chart. This breakdown specifies the main grouping of data, typically represented along one of the chart's axes. Check breakdown configuration details below. + +### `xAxis` + +- **Type:** `LensBreakdownConfig` +- **Description:** Defines the configuration for the X-axis categorization in the mosaic chart. It determines how data points are grouped along the horizontal axis, influencing the chart's layout and the distribution of stacked segments. Check breakdown configuration details below. + +## Optional Properties + + + +## Example + +``` +const mosaicConfig: LensConfig = { + chartType: 'mosaic', + title: 'Mosaic Chart', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes = sum(bytes) by geo.src, geo.dest', + }, + breakdown: 'geo.src', + xAxis: 'geo.dest', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(mosaicConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + +This example demonstrates configuring a mosaic chart to visualize the distribution of product sales across different regions and categories. The `breakdown` is set to segment data by the top 5 regions, while the `xAxis` config segments further by the top 10 product categories. An ESQL query aggregates sales within the specified groupings, enabling the mosaic chart to display the proportional distribution of sales across these dimensions. This type of visualization is particularly useful for identifying patterns or disparities in sales performance across different market segments. \ No newline at end of file diff --git a/dev_docs/lens/pie.mdx b/dev_docs/lens/pie.mdx new file mode 100644 index 000000000000..f511a431f84f --- /dev/null +++ b/dev_docs/lens/pie.mdx @@ -0,0 +1,67 @@ +--- +id: kibDevLensConfigAPIPie +slug: /kibana-dev-docs/lens/config-builder/pie +title: Lens Config Builder API - Pie +description: Lens Config Builder API - Pie +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'pie'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensPieConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed values `'pie' | 'donut'` +- **Description:** Sets the chart type to either pie or donut. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `breakdown` + +- **Type:** `LensBreakdownConfig[]` +- **Description:** An array of breakdown configurations to segment the data into slices. Each breakdown configures how data should be grouped and displayed in the pie or donut chart, enabling detailed and meaningful data representations. Check breakdown configuration details below. + +## Optional Properties + +### `legend` + +- **Type:** `Identity` +- **Description:** Configures the chart's legend. It includes properties to show or hide the legend and to position it relative to the chart ('top', 'left', 'bottom', 'right'). This helps in identifying what each slice of the pie or donut chart represents. + + + + +## Example + +``` +const pieConfig: LensConfig = { + chartType: 'pie', + title: 'Bytes by Region', + dataset: { + esql: 'from sales_data | stats avgBytes = avg(bytes) by geo.src', + }, + breakdown: [ + 'geo.src' + ], + legend: { + show: true, + position: 'right', + }, +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(pieConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + diff --git a/dev_docs/lens/regionmap.mdx b/dev_docs/lens/regionmap.mdx new file mode 100644 index 000000000000..2eee2c8f9dce --- /dev/null +++ b/dev_docs/lens/regionmap.mdx @@ -0,0 +1,53 @@ +--- +id: kibDevLensConfigAPIRegionMap +slug: /kibana-dev-docs/lens/config-builder/regionmap +title: Lens Config Builder API - Region Map +description: Lens Config Builder API - Region Map +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'regionmap'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensRegionMapConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'regionmap'` +- **Description:** Sets the chart type to region map, which is used for displaying geographical data across different regions on a map. This visualization type is excellent for spatial analysis, showing how metrics vary across geographic locations. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + + + +## Optional Properties + + + +## Example + +``` +const regionMapConfig: LensConfig = { + chartType: 'regionmap', + title: 'Sales by Country', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest', + }, + breakdown: 'geo.dest', + value: 'bytes', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(regionMapConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + diff --git a/dev_docs/lens/table.mdx b/dev_docs/lens/table.mdx new file mode 100644 index 000000000000..1a0e4786aca3 --- /dev/null +++ b/dev_docs/lens/table.mdx @@ -0,0 +1,68 @@ +--- +id: kibDevLensConfigAPITable +slug: /kibana-dev-docs/lens/config-builder/table +title: Lens Config Builder API - Table +description: Lens Config Builder API - Table +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'table'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensTableConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'table'` +- **Description:** Sets the chart type to table, allowing for the display of data in a tabular format. Tables are versatile for detailed data analysis, enabling the display of multiple dimensions and metrics side by side. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +## Optional Properties + +### `splitBy` + +- **Type:** `LensBreakdownConfig[]` +- **Optional** +- **Description:** An array of breakdown configurations to segment the data into different sections within the table. Each breakdown can create a new column or row based on the field specified, allowing for complex data organization and grouping. Check breakdown configuration details below. + +### `breakdown` + +- **Type:** `LensBreakdownConfig[]` +- **Optional** +- **Description:** Similar to `splitBy`, but specifically used for creating additional columns based on the breakdown of a particular field. It's useful for comparing metrics across different categories directly within the table. Check breakdown configuration details below. + + + + +## Example + +``` +const tableConfig: LensConfig = { + chartType: 'table', + title: 'Table chart', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest, geo.src', + }, + splitBy: [ + 'geo.src' + ], + breakdown: [ + 'geo.dest' + ], + value: 'bytes', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(tableConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` \ No newline at end of file diff --git a/dev_docs/lens/tagcloud.mdx b/dev_docs/lens/tagcloud.mdx new file mode 100644 index 000000000000..734aa9cd23ec --- /dev/null +++ b/dev_docs/lens/tagcloud.mdx @@ -0,0 +1,50 @@ +--- +id: kibDevLensConfigAPITagCloud +slug: /kibana-dev-docs/lens/config-builder/tagcloud +title: Lens Config Builder API - Tag Cloud +description: Lens Config Builder API - Tag Cloud +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'tagcloud'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensTagCloudConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'tagcloud'` +- **Description:** Sets the chart type to tag cloud. Tag clouds are visual representations where tags are depicted in varying sizes, indicating the frequency or importance of each tag. This visualization type is beneficial for quickly identifying the most prominent or common terms in a dataset. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + + + +## Optional Properties + +## Example + +``` +const tagCloudConfig: LensConfig = { + chartType: 'tagcloud', + title: 'TagCloud chart', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes=sum(bytes) by geo.dest', + }, + breakdown: 'geo.dest', + value: 'bytes', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(tagCloudConfig, { + timeRange: { from: 'now-1M', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` \ No newline at end of file diff --git a/dev_docs/lens/treemap.mdx b/dev_docs/lens/treemap.mdx new file mode 100644 index 000000000000..88ee81640fe9 --- /dev/null +++ b/dev_docs/lens/treemap.mdx @@ -0,0 +1,59 @@ +--- +id: kibDevLensConfigAPITreeMap +slug: /kibana-dev-docs/lens/config-builder/treemap +title: Lens Config Builder API - TreeMap +description: Lens Config Builder API - TreeMap +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'treemap'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensTreeMapConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'treemap'` +- **Description:** Sets the chart type to treemap. Treemaps are used to visualize hierarchical data using nested rectangles. Each branch of the tree is given a rectangle, which is then tiled with smaller rectangles representing sub-branches. A leaf node's size and color can vary to show statistical information about the node and its relationship to the rest of the tree. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `breakdown` + +- **Type:** `LensBreakdownConfig[]` +- **Description:** An array of breakdown configurations to hierarchically segment the data into nested rectangles. The breakdowns determine how the data is grouped and subdivided, with each level of the hierarchy represented by a deeper level of nesting in the treemap. Check breakdown configuration details below. + + + +## Optional Properties + +## Example + +``` +const treemapConfig: LensConfig = { + chartType: 'treemap', + title: 'Treemap chart', + dataset: { + esql: 'from kibana_sample_data_logs | stats bytes = sum(bytes) by geo.src, geo.dest', + }, + breakdown: [ + 'geo.src', + 'geo.dest', + ], + value: 'bytes', +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(treemapConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + diff --git a/dev_docs/lens/xy.mdx b/dev_docs/lens/xy.mdx new file mode 100644 index 000000000000..5f0e3af272b8 --- /dev/null +++ b/dev_docs/lens/xy.mdx @@ -0,0 +1,175 @@ +--- +id: kibDevLensConfigAPIXY +slug: /kibana-dev-docs/lens/config-builder/xy +title: Lens Config Builder API - XY Chart +description: Lens Config Builder API - XY Chart +date: 2024-03-04 +tags: ['kibana', 'dev', 'lens', 'xy'] +--- + +import Dataset from './dataset.mdx'; +import Breakdown from './breakdown.mdx'; + +Understanding `LensXYConfig` in detail + +## Required Properties + +### `chartType` + +- **Type:** Fixed value `'xy'` +- **Description:** Sets the chart type to XY, which is used for creating scatter plots, line charts, bar charts, and area charts. This versatile visualization type is ideal for comparing data across two axes, revealing trends, distributions, and relationships between variables. + +### `title` + +- **Type:** `string` +- **Description:** The title of the visualization. + + + +### `layers` + +- **Type:** `Array` +- **Description:** An array of layer configurations that define the data series, annotations, or reference lines to be displayed on the chart. Each layer type brings a different aspect of data visualization to the XY chart, allowing for a rich, multi-dimensional analysis. + +## Optional Properties + +### `legend` + +- **Type:** `Identity` +- **Description:** Configures the chart's legend, including options to show or hide the legend and to specify its position ('top', 'left', 'bottom', 'right'). The legend is essential for identifying different data series within the chart. + +### `axisTitleVisibility` + +- **Type:** `Identity` +- **Description:** Controls the visibility of axis titles, allowing for a clearer understanding of what each axis represents. + +### `emphasizeFitting` + +- **Type:** `boolean` +- **Description:** When set to true, emphasizes the fitting of lines to the data points in line charts, making trends and patterns more apparent. + +### `fittingFunction` + +- **Type:** `'None' | 'Zero' | 'Linear' | 'Carry' | 'Lookahead' | 'Average' | 'Nearest'` +- **Description:** Defines the method used to fit lines through the data points in line charts, affecting how trends are interpreted. + +### `yBounds` + +- **Type:** `LensYBoundsConfig` +- **Description:** Specifies custom or automatic bounds for the Y-axis, enabling more control over how data ranges are displayed. + + +For the XY chart within the Lens Config Builder API, there are three distinct types of series layers that can be added: `Annotation`, `Series`, and `ReferenceLine`. Each layer type serves a unique purpose in enhancing the chart with additional context, data representation, or benchmarks. Here's a detailed explanation of each series type: + +### Annotation Layer (`LensAnnotationLayer`) + +#### Purpose +The Annotation Layer is used to add textual notes or icons at specific points on the chart, providing extra context or highlighting significant events or values. Annotations can help explain anomalies, mark milestones, or simply draw attention to certain aspects of the data. + +#### Key Properties +- **`events`**: An array of objects specifying the annotation details. Each event can be tied to a specific point in time (`datetime`) or be based on a condition that matches data points (`field` and `filter`). +- **`color`**: Specifies the color of the annotation marker or text, enhancing visual distinction. +- **`icon`**: (Optional) Allows specifying an icon to be displayed as part of the annotation. + +### Series Layer (`LensSeriesLayer`) + +#### Purpose +The Series Layer is the primary means of displaying data on an XY chart. It can represent data in various forms, including lines, bars, and areas, to depict trends, distributions, and comparisons across two axes. + +#### Key Properties +- **`seriesType`**: Determines the visual representation of the series (e.g., `'line'`, `'bar'`, `'area'`), each offering a different way to interpret the underlying data. +- **`xAxis`** Define the field to use on x-axis or lens formula when using index dataset. +- **`breakdown`**: Field to breakdown or detailed breakdown configuration when using index dataset. +- **`yaxis`**: + - **Type:** `Array` + - **Description:** Defines one or more metrics to be plotted on the Y-axis of the chart. Each item in the array represents a different metric or aspect of the data that will be visualized, allowing for a comprehensive and multi-dimensional analysis within a single chart. + +#### Sub-properties of `LensBaseLayer` within `yAxis`: + +- **`label`** (Optional) +- **Type:** `string` +- **Description:** Provides a descriptive label for the metric, which can be used for legend text or tooltips, enhancing the interpretability of the chart by offering additional details about what the metric represents. + +- **`filter`** (Optional) +- **Type:** `string` +- **Description:** Allows specifying a Kibana filter string to refine the data points included in the metric calculation, enabling the isolation of specific segments or conditions within the data. + +- **`format`** (Optional) +- **Type:** `'bits' | 'bytes' | 'currency' | 'duration' | 'number' | 'percent' | 'string'` +- **Description:** Defines the format in which the metric values should be displayed, facilitating the appropriate presentation of different types of data, such as financial figures, percentages, or raw numbers. + +- **`decimals`** (Optional) +- **Type:** `number` +- **Description:** Specifies the number of decimal places to include in the metric's displayed values, allowing for precision control in the presentation of data. + +- **`normalizeByUnit`** (Optional) +- **Type:** `'s' | 'm' | 'h' | 'd'` +- **Description:** Applies normalization of time-based metrics to a specified unit (seconds, minutes, hours, days), useful for standardizing time-related metrics for easier comparison and analysis. + +- **`compactValues`** (Optional) +- **Type:** `boolean` +- **Description:** When set to true, large numbers will be displayed in a compact format, making the chart easier to read by reducing the space needed for numerical values. + +- **`randomSampling`** (Optional) +- **Type:** `number` +- **Description:** Specifies a percentage (0-100) for random sampling of the data points, which can be useful for large datasets to improve chart rendering performance while still providing a representative view of the data trends. + +- **`useGlobalFilter`** (Optional) +- **Type:** `boolean` +- **Description:** Determines whether the chart should apply global filters defined in the dashboard or visualization context, allowing the metric to reflect broader data filtering criteria. + +- **`seriesColor`** (Optional) +- **Type:** `string` +- **Description:** Sets a specific color for the data series, enhancing the visual distinction between multiple metrics or series on the chart. + +- **`value`** +- **Type:** `LensLayerQuery` +- **Description:** The primary property that specifies the field or lens formula used to calculate the metric displayed on the Y-axis. + +### Reference Line Layer (`LensReferenceLineLayer`) + +#### Purpose +The Reference Line Layer is used to add horizontal lines to the chart, serving as benchmarks or targets. These lines can represent goals, thresholds, averages, or any other fixed value that provides context to the data displayed. + +#### Key Properties +- **`value`**: The fixed value where the reference line should be drawn. It can represent a numeric threshold, average, or any specific value relevant to the data or business logic. +- **`lineThickness`**, **`color`**, and **`fill`**: Customize the appearance of the reference line, including its thickness, color, and whether the area above or below the line should be shaded to indicate a region of interest. + +## Example + +``` +const xyConfig: LensConfig = { + chartType: 'xy', + title: 'XY Chart', + dataset: { + esql: 'FROM sales_data | EVAL timestamp=DATE_TRUNC(3 hour, @timestamp) | stats sales = SUM(sales_field) by timestamp', + }, + layers: [ + { + type: 'series', + seriesType: 'line', + xAxis: 'timestamp', + yAxis: [ + { + value: 'sales', + label: 'Total Sales', + }, + ], + }, + ], + legend: { + show: true, + position: 'bottom', + }, + axisTitleVisibility: { + showXAxisTitle: true, + showYAxisTitle: true, + }, +}; +const configBuilder = new LensConfigBuilder(lensFormulaAPI, dataViewsAPI); +const lensConfig = configBuilder.build(xyConfig, { + timeRange: { from: 'now-1y', to: 'now', type: 'relative' }, + embeddable: true, +}); +``` + diff --git a/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc index 2b2cbde0b3f1..cf6af235e88a 100644 --- a/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc +++ b/docs/developer/architecture/core/saved-objects-service-use-case-examples.asciidoc @@ -687,7 +687,7 @@ describe('myIntegrationTest', () => { afterEach(async () => { if(testkit) { // delete the indices between each tests to perform a migration again - await testkit.tearsDown(); + await testkit.tearDown(); } }); diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 81c659146853..f8c4e8644e5d 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -692,6 +692,10 @@ Elastic. |This document gives an overview of the features of the Observability AI Assistant at the time of writing, and how to use them. At a high level, the Observability AI Assistant offers contextual insights, and a chat functionality that we enrich with function calling, allowing the LLM to hook into the user's data. We also allow the LLM to store things it considers new information as embeddings into Elasticsearch, and query this knowledge base when it decides it needs more information, using ELSER. +|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md[observabilityAIAssistantApp] +|This app registers defaults functions. It exists as a separate plugin to avoid cyclical dependencies. + + |{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/observability_logs_explorer/README.md[observabilityLogsExplorer] |This plugin provides an app based on the LogsExplorer component from the logs_explorer plugin, but adds observability-specific affordances. diff --git a/docs/management/cases/images/cases-custom-fields-add.png b/docs/management/cases/images/cases-custom-fields-add.png index 1938ab295005..6f4d452a9429 100644 Binary files a/docs/management/cases/images/cases-custom-fields-add.png and b/docs/management/cases/images/cases-custom-fields-add.png differ diff --git a/docs/management/cases/manage-cases.asciidoc b/docs/management/cases/manage-cases.asciidoc index 50c2bc0ff5ff..79b0f09642cc 100644 --- a/docs/management/cases/manage-cases.asciidoc +++ b/docs/management/cases/manage-cases.asciidoc @@ -67,6 +67,8 @@ image::images/cases-custom-fields-add.png[Add a custom field in case settings] . If you want the text field to be mandatory in all cases, select *Make this field required*. +. Optionally add a default value. + . Click *Save field*. You can subsequently remove or edit custom fields on the *Settings* page. diff --git a/docs/management/maintenance-windows/maintenance-windows.asciidoc b/docs/management/maintenance-windows/maintenance-windows.asciidoc index a2ea825d5e4c..559151c060ed 100644 --- a/docs/management/maintenance-windows/maintenance-windows.asciidoc +++ b/docs/management/maintenance-windows/maintenance-windows.asciidoc @@ -54,11 +54,7 @@ If you turn on *Filter alerts*, you can use KQL to filter the alerts affected by image::images/create-maintenance-window-filter.png[The Create Maintenance Window user interface in {kib} with alert filters turned on] // NOTE: This is an autogenerated screenshot. Do not edit it directly. -[NOTE] -==== -* You can select only a single category when you turn on filters. -* Some rules are not affected by maintenance window filters because their alerts do not contain requisite data. In particular, <>, <>, {ml-docs}/ml-configuring-alerts.html[{anomaly-jobs} health], and {ref}/transform-alerts.html[transform health] rules are not affected by the filters. -==== +NOTE: You can select only a single category when you turn on filters. A maintenance window can have any one of the following statuses: diff --git a/docs/user/alerting/alerting-getting-started.asciidoc b/docs/user/alerting/alerting-getting-started.asciidoc index 3e6787370ff2..545155e65689 100644 --- a/docs/user/alerting/alerting-getting-started.asciidoc +++ b/docs/user/alerting/alerting-getting-started.asciidoc @@ -75,7 +75,7 @@ When defining actions in a rule, you specify: Rather than repeatedly entering connection information and credentials for each action, {kib} simplifies action setup using <>. For example if four rules send email notifications via the same SMTP service, they can all reference the same SMTP connector. -The _action frequency_ defines when the action runs (for example, only when the alert status changes or at specific time intervals). Each rule type also has a set of the _action groups_ that affects when the action runs (for example, when the threshold is met or when the alert is recovered). If you want to reduce the number of notifications you receive without affecting their timeliness, some rule types support alert summaries. You can set the action frequency such that you receive notifications that summarize the new, ongoing, and recovered alerts at your preferred time intervals. +The _action frequency_ defines when the action runs (for example, only when the alert status changes or at specific time intervals). Each rule type also has a set of the _action groups_ that affects when the action runs (for example, when the threshold is met or when the alert is recovered). If you want to reduce the number of notifications you receive without affecting their timeliness, set the action frequency to a summary of alerts. You will receive notifications that summarize the new, ongoing, and recovered alerts at your preferred time intervals. Some types of rules enable you to further refine the conditions under which actions run. For example, you can specify that actions run only when an alert occurs within a specific time frame or when it matches a KQL query. diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index 670e531350d5..b1a99f856546 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -55,7 +55,7 @@ Each rule type provides its own way of defining the conditions to detect, but an For example, in an {es} query rule, you specify an index, a query, and a threshold, which uses a metric aggregation operation (`count`, `average`, `max`, `min`, or `sum`): [role="screenshot"] -image::images/es-query-rule-conditions.png[UI for defining rule conditions in an {es} query rule,500] +image::images/rule-types-es-query-conditions.png[UI for defining rule conditions in an {es} query rule,500] // NOTE: This is an autogenerated screenshot. Do not edit it directly. All rules must have a check interval, which defines how often to evaluate the rule conditions. Checks are queued; they run as close to the defined value as capacity allows. @@ -66,35 +66,32 @@ For details on what types of rules are available and how to configure them, refe [[defining-rules-actions-details]] ==== Actions -You can add one or more actions to your rule to generate notifications when its -conditions are met and when they are no longer met. +You can add one or more actions to your rule to generate notifications when its conditions are met and when they are no longer met. -Each action uses a connector, which provides connection information for a {kib} service or third party integration, depending on where you want to send the notifications. If no connectors exist, click **Add connector** to create one. +Each action uses a connector, which provides connection information for a {kib} service or third party integration, depending on where you want to send the notifications. +If no connectors exist, click **Add connector** to create one. + +After you select a connector, set the action frequency. +You can choose to create a summary of alerts on each check interval or on a custom interval. +Alternatively, you an choose to run actions for each alert (at each check interval, only when the alert status changes, or at a custom interval). + +NOTE: If you choose a custom action interval, it cannot be shorter than the rule's check interval. -After you select a connector, set the action frequency. If the rule type supports alert summaries, you can choose to create a summary of alerts on each check interval or on a custom interval. For example, if you create an {es} query rule, you can send notifications that summarize the new, ongoing, and recovered alerts on a custom interval: [role="screenshot"] image::images/es-query-rule-action-summary.png[UI for defining alert summary action in an {es} query rule,500] // NOTE: This is an autogenerated screenshot. Do not edit it directly. -[NOTE] -==== -* Some rules that support alert summaries, such as metric threshold rules, enable you to further refine when actions run by adding time frame and query filters. -* If you choose a custom action interval, it cannot be shorter than the rule's check interval. -==== - -Alternatively, you can set the action frequency such that the action runs for each alert. -If the rule type does not support alert summaries, this is your only available option. -You must choose when the action runs (for example, at each check interval, only when the alert status changes, or at a custom action interval). -You must also choose an action group, which affects whether the action runs. Each rule type has a specific set of valid action groups. +When you choose to run actions for each alert, you must specify an action group. +Each rule type has a set of valid action groups, which affect when an action runs. For example, you can set *Run when* to `Query matched` or `Recovered` for the {es} query rule: [role="screenshot"] image::images/es-query-rule-recovery-action.png[UI for defining a recovery action,500] // NOTE: This is an autogenerated screenshot. Do not edit it directly. -Each connector supports a specific set of actions for each action group and enables different action properties. +Connectors have unique behavior for each action group. For example, you can have actions that create an {opsgenie} alert when rule conditions are met and recovery actions that close the {opsgenie} alert. For more information about connectors, refer to <>. [[alerting-concepts-suppressing-duplicate-notifications]] @@ -114,7 +111,7 @@ servers that continue to exceed the threshold: * Minute 2: X123 and Y456 > 0.9. _One email_ will be sent for Y456. * Minute 3: X123, Y456, Z789 > 0.9. _One email_ will be sent for Z789. -To get notified only once when a server exceeds the threshold, you can set the action frequency to `On status changes`. Alternatively, if the rule type supports alert summaries, consider using them to reduce the volume of notifications. +To get notified only once when a server exceeds the threshold, you can set the action frequency to `On status changes`. Alternatively, consider using alert summaries to reduce the volume of notifications. ============================================== [float] diff --git a/docs/user/alerting/images/alert-types-tracking-containment-conditions.png b/docs/user/alerting/images/alert-types-tracking-containment-conditions.png index b328bb05dd0d..1ff0a03b8551 100644 Binary files a/docs/user/alerting/images/alert-types-tracking-containment-conditions.png and b/docs/user/alerting/images/alert-types-tracking-containment-conditions.png differ diff --git a/docs/user/alerting/images/es-query-rule-conditions.png b/docs/user/alerting/images/es-query-rule-conditions.png deleted file mode 100644 index b2a4aeba332d..000000000000 Binary files a/docs/user/alerting/images/es-query-rule-conditions.png and /dev/null differ diff --git a/docs/user/alerting/images/rule-types-es-query-conditions.png b/docs/user/alerting/images/rule-types-es-query-conditions.png index 786d17236886..e1bbccc1b83d 100644 Binary files a/docs/user/alerting/images/rule-types-es-query-conditions.png and b/docs/user/alerting/images/rule-types-es-query-conditions.png differ diff --git a/docs/user/alerting/rule-types.asciidoc b/docs/user/alerting/rule-types.asciidoc index bcab22f05ca0..c7bd85fa20ed 100644 --- a/docs/user/alerting/rule-types.asciidoc +++ b/docs/user/alerting/rule-types.asciidoc @@ -3,7 +3,8 @@ == Rule types A rule is a set of <>, <>, and <> that enable notifications. {kib} provides rules built into the {stack} and rules registered by one of the {kib} apps. -You can create most rules types in < {rules-ui}>>. For information on creating security rules, refer to {security-guide}/rules-ui-create.html[Create a detection rule]. +You can create most rules types in < {rules-ui}>>. +Security rules must be defined in the Security app. For more information, refer to the documentation about {security-guide}/rules-ui-create.html[creating a detection rule]. [NOTE] ============================================== @@ -39,7 +40,7 @@ see {subscriptions}[the subscription page]. [[observability-rules]] === {observability} rules -{observability} rules are categorized into APM and {user-experience}, Logs, Metrics, {stack-monitor-app}, and Uptime. +{observability} rules detect complex conditions in your observability data and create alerts when a rule's conditions are met. For example, you can create a rule that detects when the value of a metric exceeds a specified threshold or when an anomaly occurs on a system or service you are monitoring. For more information, refer to {observability-guide}/create-alerts.html[Alerting]. [NOTE] ============================================== @@ -47,27 +48,6 @@ If you create a rule in the {observability} app, its alerts are not visible in *{stack-manage-app} > {rules-ui}*. They are visible only in the {observability} app. ============================================== -[cols="2*<"] -|=== - - -| <> -| Detect complex conditions in *APM* data and trigger built-in actions when the conditions are met. - -| {observability-guide}/logs-threshold-alert.html[Logs rules] -| Detect complex conditions in the {logs-app}. - -| {observability-guide}/metrics-threshold-alert.html[Metrics rules] -| Detect complex conditions in the {metrics-app}. - -| {observability-guide}/slo-burn-rate-alert.html[SLO burn rate rule] -| Detect when the burn rate is above a defined threshold. - -| {observability-guide}/monitor-status-alert.html[Uptime rules] -| Detect complex conditions in the {uptime-app}. - -|=== - [float] [[ml-rules]] === Machine learning rules diff --git a/docs/user/alerting/rule-types/es-query.asciidoc b/docs/user/alerting/rule-types/es-query.asciidoc index 9f17768d1d66..99c0e6f96530 100644 --- a/docs/user/alerting/rule-types/es-query.asciidoc +++ b/docs/user/alerting/rule-types/es-query.asciidoc @@ -81,7 +81,10 @@ This option is not available when you use a grouping field. Generally this value should be set to a value that is smaller than the time window, to avoid gaps in detection. -7. Select a scope value, which affects the <> that are required to access the rule. +7. In the advanced options, you can change the number of consecutive runs that must meet the rule conditions before an alert occurs. + The default value is `1`. + +8. Select a scope value, which affects the <> that are required to access the rule. For example when it's set to `Stack Rules`, you must have the appropriate *Management > {stack-rules-feature}* feature privileges to view or edit the rule. [float] diff --git a/docs/user/alerting/rule-types/geo-rule-types.asciidoc b/docs/user/alerting/rule-types/geo-rule-types.asciidoc index 22c002960135..af26780a3a6a 100644 --- a/docs/user/alerting/rule-types/geo-rule-types.asciidoc +++ b/docs/user/alerting/rule-types/geo-rule-types.asciidoc @@ -29,7 +29,10 @@ image::user/alerting/images/alert-types-tracking-containment-conditions.png[Crea Boundaries data is expected to be static (not updating). Boundaries are collected once when the rule is created and anytime after when boundary configuration is modified. -. Set the check interval, which defines how often to evaluate the rule conditions. +. Set the check interval, which defines how often to evaluate the rule conditions. + +. In the advanced options, you can change the number of consecutive runs that must meet the rule conditions before an alert occurs. + The default value is `1`. Entity locations are queried to determine whether they are contained within any monitored boundaries. Entity data should be somewhat "real time", meaning the dates of new documents aren't older than the current time minus the amount of the interval. diff --git a/docs/user/alerting/rule-types/index-threshold.asciidoc b/docs/user/alerting/rule-types/index-threshold.asciidoc index a91607c71600..a5f7c79e1be7 100644 --- a/docs/user/alerting/rule-types/index-threshold.asciidoc +++ b/docs/user/alerting/rule-types/index-threshold.asciidoc @@ -44,6 +44,9 @@ It determines how far back to search for documents and uses the time field set i 7. Set the check interval, which defines how often to evaluate the rule conditions. Generally this value should be set to a value that is smaller than the time window, to avoid gaps in detection. +8. In the advanced options, you can change the number of consecutive runs that must meet the rule conditions before an alert occurs. +The default value is `1`. + If data is available and all clauses have been defined, a preview chart will render the threshold value and display a line chart showing the value for the last 30 intervals. This can provide an indication of recent values and their proximity to the threshold, and help you tune the clauses. diff --git a/nav-kibana-dev.docnav.json b/nav-kibana-dev.docnav.json index d4eb3aaba6dd..f7f412e57636 100644 --- a/nav-kibana-dev.docnav.json +++ b/nav-kibana-dev.docnav.json @@ -239,6 +239,66 @@ } ] }, + { + "label": "Lens", + "pageId": "kibDevLensOverview", + "items": [ + { + "label": "Lens Config API", + "id": "kibDevLensConfigAPI", + "items": [ + { + "label": "Introduction", + "id": "kibDevLensConfigAPI" + }, + { + "label": "Examples", + "id": "kibDevLensConfigAPIExamples" + }, + { + "label": "Metric Chart", + "id": "kibDevLensConfigAPIMetric" + }, + { + "label": "Gauge Chart", + "id": "kibDevLensConfigAPIGauge" + }, + { + "label": "Pie Chart", + "id": "kibDevLensConfigAPIPie" + }, + { + "label": "Mosaic Chart", + "id": "kibDevLensConfigAPIMosaic" + }, + { + "label": "TreeMap Chart", + "id": "kibDevLensConfigAPITreeMap" + }, + { + "label": "TagCloud Chart", + "id": "kibDevLensConfigAPITagCloud" + }, + { + "label": "RegionMap Chart", + "id": "kibDevLensConfigAPIRegionMap" + }, + { + "label": "Table Chart", + "id": "kibDevLensConfigAPITable" + }, + { + "label": "Heatmap Chart", + "id": "kibDevLensConfigAPIHeatmap" + }, + { + "label": "XY Chart", + "id": "kibDevLensConfigAPIXY" + } + ] + } + ] + }, { "label": "Contributors Newsletters", "items": [ diff --git a/package.json b/package.json index 3ca448bdce30..5b5d4093509a 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.12.2", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "93.2.0", + "@elastic/eui": "93.3.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", @@ -588,6 +588,7 @@ "@kbn/no-data-page-plugin": "link:src/plugins/no_data_page", "@kbn/notifications-plugin": "link:x-pack/plugins/notifications", "@kbn/object-versioning": "link:packages/kbn-object-versioning", + "@kbn/observability-ai-assistant-app-plugin": "link:x-pack/plugins/observability_solution/observability_ai_assistant_app", "@kbn/observability-ai-assistant-plugin": "link:x-pack/plugins/observability_solution/observability_ai_assistant", "@kbn/observability-alert-details": "link:x-pack/packages/observability/alert_details", "@kbn/observability-alerting-test-data": "link:x-pack/packages/observability/alerting_test_data", @@ -1070,6 +1071,7 @@ "react-moment-proptypes": "^1.7.0", "react-monaco-editor": "^0.54.0", "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.0", @@ -1082,7 +1084,6 @@ "react-use": "^15.3.8", "react-virtualized": "^9.22.5", "react-window": "^1.8.9", - "recompose": "^0.30.0", "reduce-reducers": "^1.0.4", "redux": "^4.2.1", "redux-actions": "^2.6.5", @@ -1464,6 +1465,7 @@ "@types/react-grid-layout": "^1.3.2", "@types/react-intl": "^2.3.15", "@types/react-is": "^17.0.3", + "@types/react-recompose": "^0.33.4", "@types/react-router": "^5.1.20", "@types/react-router-config": "^5.0.7", "@types/react-router-dom": "^5.3.3", @@ -1471,7 +1473,6 @@ "@types/react-test-renderer": "^17.0.2", "@types/react-virtualized": "^9.21.22", "@types/react-window": "^1.8.5", - "@types/recompose": "^0.30.10", "@types/redux-actions": "^2.6.1", "@types/redux-logger": "^3.0.8", "@types/resolve": "^1.20.1", @@ -1531,6 +1532,7 @@ "clean-webpack-plugin": "^3.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", + "content-security-policy-parser": "^0.6.0", "copy-webpack-plugin": "^6.0.2", "cpy": "^8.1.1", "css-loader": "^3.4.2", diff --git a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx index eef7c839a035..762c6eaf68b2 100644 --- a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx +++ b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx @@ -446,14 +446,14 @@ function TableListViewTableComp({ edit: { enabled: false, reason: i18n.translate('contentManagement.tableList.managedItemNoEdit', { - defaultMessage: 'This item is managed by Elastic. Clone it before making changes.', + defaultMessage: 'Elastic manages this item. Clone it to make changes.', }), }, ...ret[item.id], delete: { enabled: false, reason: i18n.translate('contentManagement.tableList.managedItemNoDelete', { - defaultMessage: 'This item is managed by Elastic. It cannot be deleted.', + defaultMessage: 'Elastic manages this item. Deleting it is not possible.', }), }, }; diff --git a/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md b/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md index 31229e5eebc9..2790a2ebc820 100644 --- a/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md +++ b/packages/core/saved-objects/core-saved-objects-server/docs/model_versions.md @@ -988,7 +988,7 @@ describe('myIntegrationTest', () => { afterEach(async () => { if(testkit) { // delete the indices between each tests to perform a migration again - await testkit.tearsDown(); + await testkit.tearDown(); } }); diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts index aa8c4ab8df42..b3c22325f1de 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_bed.ts @@ -40,7 +40,7 @@ import type { ModelVersionTestBed } from './types'; * * afterEach(async () => { * if(testkit) { - * await testkit.tearsDown(); + * await testkit.tearDown(); * } * }); * diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts index ee33208d793c..f986bb185cc4 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/test_kit.ts @@ -121,7 +121,7 @@ export const prepareModelVersionTestKit = async ({ await runMigrations(secondMigrator); - const tearsDown = async () => { + const tearDown = async () => { await esClient.indices.delete({ index: `${kibanaIndex}_*`, allow_no_indices: true }); }; @@ -129,7 +129,7 @@ export const prepareModelVersionTestKit = async ({ esClient, repositoryBefore, repositoryAfter, - tearsDown, + tearDown, }; }; diff --git a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts index 37f22a297ee3..0e2e04a7bc6c 100644 --- a/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts +++ b/packages/core/test-helpers/core-test-helpers-model-versions/src/test_bed/types.ts @@ -121,7 +121,7 @@ export interface ModelVersionTestKit { * Cleanup function that will delete the test index. * Should be called before calling `testbed.prepareTestKit` again. */ - tearsDown: () => Promise; + tearDown: () => Promise; } /** diff --git a/packages/home/sample_data_card/src/__snapshots__/sample_data_card.test.tsx.snap b/packages/home/sample_data_card/src/__snapshots__/sample_data_card.test.tsx.snap index 269499f65547..76a56fb33c5e 100644 --- a/packages/home/sample_data_card/src/__snapshots__/sample_data_card.test.tsx.snap +++ b/packages/home/sample_data_card/src/__snapshots__/sample_data_card.test.tsx.snap @@ -57,56 +57,61 @@ exports[`SampleDataCard installed renders with app links 1`] = ` class="emotion-euiCard__footer" >
- -
-
+
+
+ +
+
@@ -171,47 +176,52 @@ exports[`SampleDataCard installed renders without app links 1`] = ` class="emotion-euiCard__footer" >
- -
-
-
+
- - View data + + View data + - - + +
@@ -265,27 +275,32 @@ exports[`SampleDataCard not installed renders 1`] = ` class="emotion-euiCard__footer" >
- + +
diff --git a/packages/home/sample_data_card/src/footer/index.tsx b/packages/home/sample_data_card/src/footer/index.tsx index 3ef415d07c50..eaf00c8198b7 100644 --- a/packages/home/sample_data_card/src/footer/index.tsx +++ b/packages/home/sample_data_card/src/footer/index.tsx @@ -6,7 +6,7 @@ * Side Public License, v 1. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { SampleDataSet, InstalledStatus } from '@kbn/home-sample-data-types'; import { INSTALLED_STATUS, UNINSTALLED_STATUS } from '../constants'; @@ -28,13 +28,27 @@ export interface Props { * Displays the appropriate Footer component based on the status of the Sample Data Set. */ export const Footer = ({ sampleDataSet, onAction }: Props) => { - if (sampleDataSet.status === INSTALLED_STATUS) { - return onAction(id, UNINSTALLED_STATUS)} {...sampleDataSet} />; - } + const renderContent = useCallback(() => { + if (sampleDataSet.status === INSTALLED_STATUS) { + return ( + onAction(id, UNINSTALLED_STATUS)} {...sampleDataSet} /> + ); + } - if (sampleDataSet.status === UNINSTALLED_STATUS) { - return onAction(id, INSTALLED_STATUS)} {...sampleDataSet} />; - } + if (sampleDataSet.status === UNINSTALLED_STATUS) { + return ( + onAction(id, INSTALLED_STATUS)} {...sampleDataSet} /> + ); + } - return ; + return ; + }, [onAction, sampleDataSet]); + + return ( + // the data-status attribute is added to solve issues with failing test, + // see https://github.com/elastic/kibana/issues/112103 +
+ {renderContent()} +
+ ); }; diff --git a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts index 07ada8b7c06b..48320fd29e47 100644 --- a/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts +++ b/packages/kbn-alerts-as-data-utils/src/field_maps/alert_field_map.ts @@ -14,6 +14,7 @@ import { ALERT_FLAPPING, ALERT_FLAPPING_HISTORY, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, ALERT_INSTANCE_ID, ALERT_LAST_DETECTED, ALERT_REASON, @@ -80,6 +81,11 @@ export const alertFieldMap = { array: true, required: false, }, + [ALERT_CONSECUTIVE_MATCHES]: { + type: 'long', + array: false, + required: false, + }, [ALERT_INSTANCE_ID]: { type: 'keyword', array: false, diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts index b183ca5c792f..7d1f9304eaa3 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/alert_schema.ts @@ -86,6 +86,7 @@ const AlertOptional = rt.partial({ 'event.kind': schemaString, 'kibana.alert.action_group': schemaString, 'kibana.alert.case_ids': schemaStringArray, + 'kibana.alert.consecutive_matches': schemaStringOrNumber, 'kibana.alert.duration.us': schemaStringOrNumber, 'kibana.alert.end': schemaDate, 'kibana.alert.flapping': schemaBoolean, diff --git a/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts b/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts index bc8150356e03..c57f9862f432 100644 --- a/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts +++ b/packages/kbn-alerts-as-data-utils/src/schemas/generated/security_schema.ts @@ -127,6 +127,7 @@ const SecurityAlertOptional = rt.partial({ 'kibana.alert.ancestors.rule': schemaString, 'kibana.alert.building_block_type': schemaString, 'kibana.alert.case_ids': schemaStringArray, + 'kibana.alert.consecutive_matches': schemaStringOrNumber, 'kibana.alert.duration.us': schemaStringOrNumber, 'kibana.alert.end': schemaDate, 'kibana.alert.flapping': schemaBoolean, diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index fa70473b0b0a..696649555ffd 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -246,6 +246,7 @@ "controlGroupInput.controlStyle", "controlGroupInput.ignoreParentSettingsJSON", "controlGroupInput.panelsJSON", + "controlGroupInput.showApplySelections", "description", "hits", "kibanaSavedObjectMeta", diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 5bfe7f6f20de..93894be3d136 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -837,6 +837,11 @@ "panelsJSON": { "index": false, "type": "text" + }, + "showApplySelections": { + "doc_values": false, + "index": false, + "type": "boolean" } } }, diff --git a/packages/kbn-es/src/cli_commands/serverless.ts b/packages/kbn-es/src/cli_commands/serverless.ts index dabd6906cebb..f74eeb033e9a 100644 --- a/packages/kbn-es/src/cli_commands/serverless.ts +++ b/packages/kbn-es/src/cli_commands/serverless.ts @@ -92,7 +92,7 @@ export const serverless: Command = { string: ['projectType', 'tag', 'image', 'basePath', 'resources', 'host', 'kibanaUrl'], boolean: ['clean', 'ssl', 'kill', 'background', 'skipTeardown', 'waitForReady'], - default: defaults, + default: { ...defaults, kibanaUrl: 'https://localhost:5601/' }, }) as unknown as ServerlessOptions; if (!options.projectType) { diff --git a/packages/kbn-journeys/journey/journey_ftr_harness.ts b/packages/kbn-journeys/journey/journey_ftr_harness.ts index 7becb99f3970..4b1a69757067 100644 --- a/packages/kbn-journeys/journey/journey_ftr_harness.ts +++ b/packages/kbn-journeys/journey/journey_ftr_harness.ts @@ -58,6 +58,10 @@ export class JourneyFtrHarness { private apm: apmNode.Agent | null = null; + // journey can be run to collect EBT/APM metrics or just as a functional test + // TEST_PERFORMANCE_PHASE is defined via scripts/run_perfomance.js run only + private readonly isPerformanceRun = process.env.TEST_PERFORMANCE_PHASE || false; + // Update the Telemetry and APM global labels to link traces with journey private async updateTelemetryAndAPMLabels(labels: { [k: string]: string }) { this.log.info(`Updating telemetry & APM labels: ${JSON.stringify(labels)}`); @@ -162,7 +166,12 @@ export class JourneyFtrHarness { // Loading test data await Promise.all([ asyncForEach(this.journeyConfig.getEsArchives(), async (esArchive) => { - await this.esArchiver.load(esArchive); + if (this.isPerformanceRun) { + // we start Elasticsearch only once and keep ES data persisitent. + await this.esArchiver.loadIfNeeded(esArchive); + } else { + await this.esArchiver.load(esArchive); + } }), asyncForEach(this.journeyConfig.getKbnArchives(), async (kbnArchive) => { await this.kibanaServer.importExport.load(kbnArchive); @@ -233,7 +242,10 @@ export class JourneyFtrHarness { await this.teardownApm(); await Promise.all([ asyncForEach(this.journeyConfig.getEsArchives(), async (esArchive) => { - await this.esArchiver.unload(esArchive); + // Keep ES data when journey is run twice (avoid unload after "Warmup" phase) + if (!this.isPerformanceRun) { + await this.esArchiver.unload(esArchive); + } }), asyncForEach(this.journeyConfig.getKbnArchives(), async (kbnArchive) => { await this.kibanaServer.importExport.unload(kbnArchive); diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 8b90dcbbe1a0..d943aa0f7e5a 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -104,7 +104,8 @@ pageLoadAssetSize: newsfeed: 42228 noDataPage: 5000 observability: 115443 - observabilityAIAssistant: 25000 + observabilityAIAssistant: 58230 + observabilityAIAssistantApp: 27680 observabilityLogsExplorer: 46650 observabilityOnboarding: 19573 observabilityShared: 72039 diff --git a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts index 7c0827147813..dfd51bf73758 100644 --- a/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts +++ b/packages/kbn-rule-data-utils/src/default_alerts_as_data.ts @@ -43,6 +43,9 @@ const ALERT_FLAPPING_HISTORY = `${ALERT_NAMESPACE}.flapping_history` as const; // kibana.alert.maintenance_window_ids - IDs of maintenance windows that are affecting this alert const ALERT_MAINTENANCE_WINDOW_IDS = `${ALERT_NAMESPACE}.maintenance_window_ids` as const; +// kibana.alert.consecutive_matches - count of consecutive times the alert has been active +const ALERT_CONSECUTIVE_MATCHES = `${ALERT_NAMESPACE}.consecutive_matches` as const; + // kibana.alert.instance.id - alert ID, also known as alert instance ID const ALERT_INSTANCE_ID = `${ALERT_NAMESPACE}.instance.id` as const; @@ -120,6 +123,7 @@ const fields = { ALERT_FLAPPING, ALERT_FLAPPING_HISTORY, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, ALERT_INSTANCE_ID, ALERT_LAST_DETECTED, ALERT_REASON, @@ -160,6 +164,7 @@ export { ALERT_FLAPPING, ALERT_FLAPPING_HISTORY, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, ALERT_INSTANCE_ID, ALERT_LAST_DETECTED, ALERT_REASON, diff --git a/packages/kbn-securitysolution-grouping/src/components/grouping.test.tsx b/packages/kbn-securitysolution-grouping/src/components/grouping.test.tsx index 0cf16ae4c821..1a40a9d22b34 100644 --- a/packages/kbn-securitysolution-grouping/src/components/grouping.test.tsx +++ b/packages/kbn-securitysolution-grouping/src/components/grouping.test.tsx @@ -185,4 +185,31 @@ describe('grouping container', () => { true ); }); + + describe('groupsUnit', () => { + it('renders default groupsUnit text correctly', () => { + const { getByTestId } = render( + + + + ); + expect(getByTestId('group-count').textContent).toBe('3 groups'); + }); + it('calls custom groupsUnit callback correctly', () => { + // Provide a custom groupsUnit function in testProps + const customGroupsUnit = jest.fn( + (n, parentSelectedGroup, hasNullGroup) => `${n} custom units` + ); + const customProps = { ...testProps, groupsUnit: customGroupsUnit }; + + const { getByTestId } = render( + + + + ); + + expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, true); + expect(getByTestId('group-count').textContent).toBe('3 custom units'); + }); + }); }); diff --git a/packages/kbn-securitysolution-grouping/src/components/grouping.tsx b/packages/kbn-securitysolution-grouping/src/components/grouping.tsx index 5ae1037d9edb..2b7c0ea4a9dd 100644 --- a/packages/kbn-securitysolution-grouping/src/components/grouping.tsx +++ b/packages/kbn-securitysolution-grouping/src/components/grouping.tsx @@ -52,6 +52,7 @@ export interface GroupingProps { count?: number | undefined ) => void; unit?: (n: number) => string; + groupsUnit?: (n: number, parentSelectedGroup: string, hasNullGroup: boolean) => string; } const GroupingComponent = ({ @@ -74,6 +75,7 @@ const GroupingComponent = ({ takeActionItems, tracker, unit = defaultUnit, + groupsUnit = GROUPS_UNIT, }: GroupingProps) => { const [trigger, setTrigger] = useState>( {} @@ -85,10 +87,14 @@ const GroupingComponent = ({ }, [unitCount, unit]); const groupCount = useMemo(() => data?.groupsCount?.value ?? 0, [data?.groupsCount?.value]); - const groupCountText = useMemo( - () => `${groupCount.toLocaleString()} ${GROUPS_UNIT(groupCount)}`, - [groupCount] - ); + const groupCountText = useMemo(() => { + const hasNullGroup = + data?.groupByFields?.buckets?.some( + (groupBucket: GroupingBucket) => groupBucket.isNullGroup + ) || false; + + return `${groupsUnit(groupCount, selectedGroup, hasNullGroup)}`; + }, [data?.groupByFields?.buckets, groupCount, groupsUnit, selectedGroup]); const groupPanels = useMemo( () => diff --git a/packages/kbn-securitysolution-grouping/src/components/translations.ts b/packages/kbn-securitysolution-grouping/src/components/translations.ts index de5337db904d..e319a18e0f25 100644 --- a/packages/kbn-securitysolution-grouping/src/components/translations.ts +++ b/packages/kbn-securitysolution-grouping/src/components/translations.ts @@ -10,8 +10,8 @@ import { i18n } from '@kbn/i18n'; export const GROUPS_UNIT = (totalCount: number) => i18n.translate('grouping.total.unit', { - values: { totalCount }, - defaultMessage: `{totalCount, plural, =1 {group} other {groups}}`, + values: { totalCount, groupCount: totalCount.toLocaleString() }, + defaultMessage: `{groupCount} {totalCount, plural, =1 {group} other {groups}}`, }); export const TAKE_ACTION = i18n.translate('grouping.additionalActions.takeAction', { diff --git a/packages/kbn-securitysolution-grouping/src/hooks/use_grouping.tsx b/packages/kbn-securitysolution-grouping/src/hooks/use_grouping.tsx index 38ada10a74b9..af3ae458de28 100644 --- a/packages/kbn-securitysolution-grouping/src/hooks/use_grouping.tsx +++ b/packages/kbn-securitysolution-grouping/src/hooks/use_grouping.tsx @@ -31,7 +31,7 @@ export interface UseGrouping { */ type StaticGroupingProps = Pick< GroupingProps, - 'groupPanelRenderer' | 'groupStatsRenderer' | 'onGroupToggle' | 'unit' + 'groupPanelRenderer' | 'groupStatsRenderer' | 'onGroupToggle' | 'unit' | 'groupsUnit' >; /** Type for dynamic grouping component props where T is the consumer `GroupingAggregation` diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx index 9e211bee1cad..4b00a85a29f3 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx @@ -166,7 +166,7 @@ describe('Unified data table cell rendering', function () { /> ); expect(component.html()).toMatchInlineSnapshot( - `"
100
"` + `"
100
"` ); }); @@ -193,7 +193,7 @@ describe('Unified data table cell rendering', function () { /> ); expect(component.html()).toMatchInlineSnapshot( - `"
100
"` + `"
100
"` ); findTestSubject(component, 'docTableClosePopover').simulate('click'); expect(closePopoverMockFn).toHaveBeenCalledTimes(1); diff --git a/renovate.json b/renovate.json index 724f2a4f0803..70595b721b87 100644 --- a/renovate.json +++ b/renovate.json @@ -649,6 +649,25 @@ "Team:Monitoring" ], "enabled": true + }, + { + "groupName": "csp", + "packageNames": [ + "content-security-policy-parser" + ], + "reviewers": [ + "team:kibana-security", + "team:kibana-core" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "release_note:skip", + "backport:skip", + "ci:serverless-test-all" + ], + "enabled": true } ] } diff --git a/scripts/es.js b/scripts/es.js index 1cee27b7685b..1fcd221c9790 100644 --- a/scripts/es.js +++ b/scripts/es.js @@ -20,7 +20,6 @@ kbnEs 'source-path': resolve(__dirname, '../../elasticsearch'), 'base-path': resolve(__dirname, '../.es'), ssl: false, - kibanaUrl: 'https://localhost:5601/', }) .catch(function (e) { console.error(e); diff --git a/src/cli/cli.js b/src/cli/cli.js index f6bce6a8aefa..feb950ac5945 100644 --- a/src/cli/cli.js +++ b/src/cli/cli.js @@ -10,6 +10,7 @@ import _ from 'lodash'; import { kibanaPackageJson as pkg } from '@kbn/repo-info'; import Command from './command'; import serveCommand from './serve/serve'; +import profiler from './profiler/profiler'; const argv = process.argv.slice(); const program = new Command('bin/kibana'); @@ -23,6 +24,7 @@ program // attach commands serveCommand(program); +profiler(program); program .command('help ') diff --git a/src/cli/profiler/profiler.js b/src/cli/profiler/profiler.js new file mode 100644 index 000000000000..d7a7f7c8def3 --- /dev/null +++ b/src/cli/profiler/profiler.js @@ -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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { writeFile } from 'fs'; +import getopts from 'getopts'; +import { join } from 'path'; +import { Session } from 'node:inspector'; +import { threadId } from 'node:worker_threads'; +import { promisify } from 'util'; + +class Profiler { + #counter = 0; + #path; + #session; + + constructor() { + const execOpts = getopts(process.execArgv); + const envOpts = getopts(process.env.NODE_OPTIONS ? process.env.NODE_OPTIONS.split(/\s+/) : []); + this.#path = execOpts['diagnostic-dir'] || envOpts['diagnostic-dir'] || process.cwd(); + } + + #getPath() { + const now = new Date(); + + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + const day = String(now.getDate()).padStart(2, '0'); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + + const date = `${year}${month}${day}`; + const time = `${hours}${minutes}${seconds}`; + const pid = process.pid; + const thread = threadId; + const serial = (++this.#counter).toString().padStart(3, '0'); + + return join(this.#path, `CPU.${date}.${time}.${pid}.${thread}.${serial}.cpuprofile`); + } + + async #start() { + this.#session = new Session(); + this.#session.connect(); + this.#session.post = this.#session.post.bind(this.#session); + + await promisify(this.#session.post)('Profiler.enable'); + await promisify(this.#session.post)('Profiler.start'); + } + + async #stop() { + try { + const { profile } = await promisify(this.#session.post)('Profiler.stop'); + const path = this.#getPath(); + await promisify(writeFile)(path, JSON.stringify(profile)); + } finally { + this.#session.disconnect(); + this.#session = undefined; + } + } + + isRunning() { + return this.#session !== undefined; + } + + toggle() { + return this.isRunning() ? this.#stop() : this.#start(); + } +} + +export default function (program) { + program + .option('--profiler.signal ', 'Start/stop CPU profiling on ') + .on('option:profiler.signal', function (signal) { + if (!signal) { + return; + } + + const profiler = new Profiler(); + process.removeAllListeners(signal); + process.on(signal, profiler.toggle.bind(profiler)); + }); +} diff --git a/src/cli/tsconfig.json b/src/cli/tsconfig.json index ebbbc19f75c7..29903572a685 100644 --- a/src/cli/tsconfig.json +++ b/src/cli/tsconfig.json @@ -5,6 +5,7 @@ }, "include": [ "keystore/**/*", + "profiler/**/*", "serve/**/*", "*.js", ], 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 fdf7ba4c9f42..de599acd8f3f 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 @@ -82,7 +82,7 @@ describe('checking migration metadata changes on all registered SO types', () => "connector_token": "5a9ac29fe9c740eb114e9c40517245c71706b005", "core-usage-stats": "b3c04da317c957741ebcdedfea4524049fdc79ff", "csp-rule-template": "c151324d5f85178169395eecb12bac6b96064654", - "dashboard": "0611794ce10d25a36da0770c91376c575e92e8f2", + "dashboard": "211e9ca30f5a95d5f3c27b1bf2b58e6cfa0c9ae9", "endpoint:user-artifact-manifest": "1c3533161811a58772e30cdc77bac4631da3ef2b", "enterprise_search_telemetry": "9ac912e1417fc8681e0cd383775382117c9e3d3d", "epm-packages": "c23d3d00c051a08817335dba26f542b64b18a56a", diff --git a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker index 0f554570f984..dd41a333d3ba 100755 --- a/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker +++ b/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker @@ -136,6 +136,7 @@ kibana_vars=( ops.interval path.data pid.file + profiler.signal regionmap savedObjects.maxImportExportSize savedObjects.maxImportPayloadBytes diff --git a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile index d0bf01692ae8..1869086b51ab 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile +++ b/src/dev/build/tasks/os_packages/docker_generator/templates/base/Dockerfile @@ -160,6 +160,7 @@ COPY --chown=1000:0 config/serverless.security.yml /usr/share/kibana/config/serv # Supportability enhancement: enable capturing heap snapshots. See https://nodejs.org/api/cli.html#--heapsnapshot-signalsignal RUN /usr/bin/echo -e '\n--heapsnapshot-signal=SIGUSR2' >> config/node.options RUN /usr/bin/echo '--diagnostic-dir=./data' >> config/node.options +ENV PROFILER_SIGNAL=SIGUSR1 {{/serverless}} {{^opensslLegacyProvider}} RUN sed 's/\(--openssl-legacy-provider\)/#\1/' -i config/node.options diff --git a/src/dev/buildkite_migration/rewrite_buildkite_agent_rules.ts b/src/dev/buildkite_migration/rewrite_buildkite_agent_rules.ts index 00843a474d51..64d94bda5a97 100644 --- a/src/dev/buildkite_migration/rewrite_buildkite_agent_rules.ts +++ b/src/dev/buildkite_migration/rewrite_buildkite_agent_rules.ts @@ -50,6 +50,7 @@ interface GobldGCPConfig { enableSecureBoot?: boolean; enableNestedVirtualization?: boolean; image: string; + provider: 'gcp'; localSsds?: number; localSsdInterface?: string; machineType: string; @@ -75,16 +76,32 @@ if (!fs.existsSync('data/agents.json')) { * rewrites all agent targeting rules from the shorthands to the full targeting syntax */ run( - async ({ log, flags }) => { + async ({ log, flags, flagsReader }) => { + const filterExpressions = flagsReader.getPositionals(); + const paths = await globby('.buildkite/**/*.yml', { cwd: REPO_ROOT, onlyFiles: true, gitignore: true, }); + const pathsFiltered = + filterExpressions.length === 0 + ? paths + : paths.filter((path) => { + return filterExpressions.some((expression) => path.includes(expression)); + }); + + if (pathsFiltered.length === 0) { + log.warning('No .yml files found to rewrite after filtering.'); + return; + } + + log.info('Applying rewrite to the following paths: \n', pathsFiltered.join('\n')); + const failedRewrites: Array<{ path: string; error: Error }> = []; - const rewritePromises: Array> = paths.map((ymlPath) => { + const rewritePromises: Array> = pathsFiltered.map((ymlPath) => { return rewriteFile(ymlPath, log).catch((e) => { // eslint-disable-next-line no-console console.error('Failed to rewrite: ' + ymlPath, e); @@ -193,6 +210,7 @@ function getFullAgentTargetingRule(queue: string): GobldGCPConfig { return removeNullish({ image: 'family/kibana-ubuntu-2004', imageProject: 'elastic-images-qa', + provider: 'gcp', assignExternalIP: agent.disableExternalIp === true ? false : undefined, diskSizeGb: agent.diskSizeGb, diskType: agent.diskType, diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index e21de7b953d0..4b7738bcc0ab 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ 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.5.1': ['Elastic License 2.0'], - '@elastic/eui@93.2.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@93.3.0': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/ai_assistant_management/observability/public/plugin.ts b/src/plugins/ai_assistant_management/observability/public/plugin.ts index 36785ebe096c..2f72424cc18e 100644 --- a/src/plugins/ai_assistant_management/observability/public/plugin.ts +++ b/src/plugins/ai_assistant_management/observability/public/plugin.ts @@ -14,8 +14,8 @@ import { ServerlessPluginStart } from '@kbn/serverless/public'; import { EnterpriseSearchPublicStart } from '@kbn/enterprise-search-plugin/public'; import type { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; // eslint-disable-next-line @typescript-eslint/no-empty-interface @@ -27,11 +27,11 @@ export interface AiAssistantManagementObservabilityPluginStart {} export interface SetupDependencies { management: ManagementSetup; home?: HomePublicPluginSetup; - observabilityAIAssistant?: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant?: ObservabilityAIAssistantPublicSetup; } export interface StartDependencies { - observabilityAIAssistant?: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant?: ObservabilityAIAssistantPublicStart; serverless?: ServerlessPluginStart; enterpriseSearch?: EnterpriseSearchPublicStart; } diff --git a/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts b/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts index c07713dd3228..5c1e5746ea77 100644 --- a/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts +++ b/src/plugins/controls/common/control_group/control_group_panel_diff_system.ts @@ -16,7 +16,11 @@ import { TimeSliderControlEmbeddableInput, TIME_SLIDER_CONTROL } from '../time_s import { ControlPanelState } from './types'; interface DiffSystem { - getPanelIsEqual: (initialInput: ControlPanelState, newInput: ControlPanelState) => boolean; + getPanelIsEqual: ( + initialInput: ControlPanelState, + newInput: ControlPanelState, + compareSelections?: boolean + ) => boolean; } export const genericControlPanelDiffSystem: DiffSystem = { @@ -29,7 +33,7 @@ export const ControlPanelDiffSystems: { [key: string]: DiffSystem; } = { [RANGE_SLIDER_CONTROL]: { - getPanelIsEqual: (initialInput, newInput) => { + getPanelIsEqual: (initialInput, newInput, compareSelections) => { if (!deepEqual(omit(initialInput, 'explicitInput'), omit(newInput, 'explicitInput'))) { return false; } @@ -38,11 +42,11 @@ export const ControlPanelDiffSystems: { initialInput.explicitInput; const { value: valueB = ['', ''], ...inputB }: Partial = newInput.explicitInput; - return isEqual(valueA, valueB) && deepEqual(inputA, inputB); + return (compareSelections ? isEqual(valueA, valueB) : true) && deepEqual(inputA, inputB); }, }, [OPTIONS_LIST_CONTROL]: { - getPanelIsEqual: (initialInput, newInput) => { + getPanelIsEqual: (initialInput, newInput, compareSelections) => { if (!deepEqual(omit(initialInput, 'explicitInput'), omit(newInput, 'explicitInput'))) { return false; } @@ -75,22 +79,24 @@ export const ControlPanelDiffSystems: { }: Partial = newInput.explicitInput; return ( - Boolean(excludeA) === Boolean(excludeB) && Boolean(hideSortA) === Boolean(hideSortB) && Boolean(hideExistsA) === Boolean(hideExistsB) && Boolean(hideExcludeA) === Boolean(hideExcludeB) && Boolean(singleSelectA) === Boolean(singleSelectB) && - Boolean(existsSelectedA) === Boolean(existsSelectedB) && Boolean(runPastTimeoutA) === Boolean(runPastTimeoutB) && isEqual(searchTechniqueA ?? 'prefix', searchTechniqueB ?? 'prefix') && deepEqual(sortA ?? OPTIONS_LIST_DEFAULT_SORT, sortB ?? OPTIONS_LIST_DEFAULT_SORT) && - isEqual(selectedA ?? [], selectedB ?? []) && + (compareSelections + ? Boolean(excludeA) === Boolean(excludeB) && + Boolean(existsSelectedA) === Boolean(existsSelectedB) && + isEqual(selectedA ?? [], selectedB ?? []) + : true) && deepEqual(inputA, inputB) ); }, }, [TIME_SLIDER_CONTROL]: { - getPanelIsEqual: (initialInput, newInput) => { + getPanelIsEqual: (initialInput, newInput, compareSelections) => { if (!deepEqual(omit(initialInput, 'explicitInput'), omit(newInput, 'explicitInput'))) { return false; } @@ -107,10 +113,12 @@ export const ControlPanelDiffSystems: { }: Partial = newInput.explicitInput; return ( Boolean(isAnchoredA) === Boolean(isAnchoredB) && - Boolean(startA) === Boolean(startB) && - startA === startB && - Boolean(endA) === Boolean(endB) && - endA === endB + (compareSelections + ? Boolean(startA) === Boolean(startB) && + startA === startB && + Boolean(endA) === Boolean(endB) && + endA === endB + : true) ); }, }, diff --git a/src/plugins/controls/common/control_group/control_group_persistence.ts b/src/plugins/controls/common/control_group/control_group_persistence.ts index 8c51c4a2212b..8e9a795c2ec4 100644 --- a/src/plugins/controls/common/control_group/control_group_persistence.ts +++ b/src/plugins/controls/common/control_group/control_group_persistence.ts @@ -44,6 +44,7 @@ export const getDefaultControlGroupInput = (): Omit => defaultControlGrow: DEFAULT_CONTROL_GROW, controlStyle: DEFAULT_CONTROL_STYLE, chainingSystem: 'HIERARCHICAL', + showApplySelections: false, ignoreParentSettings: { ignoreFilters: false, ignoreQuery: false, @@ -57,30 +58,29 @@ export const getDefaultControlGroupPersistableInput = (): PersistableControlGrou export const persistableControlGroupInputIsEqual = ( a: PersistableControlGroupInput | undefined, - b: PersistableControlGroupInput | undefined + b: PersistableControlGroupInput | undefined, + compareSelections: boolean = true ) => { - const defaultInput = getDefaultControlGroupInput(); + const defaultInput = getDefaultControlGroupPersistableInput(); const inputA = { ...defaultInput, - ...pick(a, ['panels', 'chainingSystem', 'controlStyle', 'ignoreParentSettings']), + ...pick(a, persistableControlGroupInputKeys), }; const inputB = { ...defaultInput, - ...pick(b, ['panels', 'chainingSystem', 'controlStyle', 'ignoreParentSettings']), + ...pick(b, persistableControlGroupInputKeys), }; - if ( - getPanelsAreEqual(inputA.panels, inputB.panels) && - deepEqual(omit(inputA, 'panels'), omit(inputB, 'panels')) - ) - return true; - - return false; + return ( + getPanelsAreEqual(inputA.panels, inputB.panels, compareSelections) && + deepEqual(omit(inputA, ['panels']), omit(inputB, ['panels'])) + ); }; const getPanelsAreEqual = ( originalPanels: PersistableControlGroupInput['panels'], - newPanels: PersistableControlGroupInput['panels'] + newPanels: PersistableControlGroupInput['panels'], + compareSelections: boolean ) => { const originalPanelIds = Object.keys(originalPanels); const newPanelIds = Object.keys(newPanels); @@ -94,7 +94,8 @@ const getPanelsAreEqual = ( const panelIsEqual = ControlPanelDiffSystems[newPanelType] ? ControlPanelDiffSystems[newPanelType].getPanelIsEqual( originalPanels[panelId], - newPanels[panelId] + newPanels[panelId], + compareSelections ) : genericControlPanelDiffSystem.getPanelIsEqual(originalPanels[panelId], newPanels[panelId]); if (!panelIsEqual) return false; @@ -108,6 +109,7 @@ export const controlGroupInputToRawControlGroupAttributes = ( return { controlStyle: controlGroupInput.controlStyle, chainingSystem: controlGroupInput.chainingSystem, + showApplySelections: controlGroupInput.showApplySelections, panelsJSON: JSON.stringify(controlGroupInput.panels), ignoreParentSettingsJSON: JSON.stringify(controlGroupInput.ignoreParentSettings), }; @@ -131,8 +133,13 @@ export const rawControlGroupAttributesToControlGroupInput = ( rawControlGroupAttributes: RawControlGroupAttributes ): PersistableControlGroupInput | undefined => { const defaultControlGroupInput = getDefaultControlGroupInput(); - const { chainingSystem, controlStyle, ignoreParentSettingsJSON, panelsJSON } = - rawControlGroupAttributes; + const { + chainingSystem, + controlStyle, + showApplySelections, + ignoreParentSettingsJSON, + panelsJSON, + } = rawControlGroupAttributes; const panels = safeJSONParse(panelsJSON); const ignoreParentSettings = safeJSONParse(ignoreParentSettingsJSON); @@ -140,6 +147,7 @@ export const rawControlGroupAttributesToControlGroupInput = ( ...defaultControlGroupInput, ...(chainingSystem ? { chainingSystem } : {}), ...(controlStyle ? { controlStyle } : {}), + ...(showApplySelections ? { showApplySelections } : {}), ...(ignoreParentSettings ? { ignoreParentSettings } : {}), ...(panels ? { panels } : {}), }; @@ -152,6 +160,7 @@ export const rawControlGroupAttributesToSerializable = ( return { chainingSystem: rawControlGroupAttributes?.chainingSystem, controlStyle: rawControlGroupAttributes?.controlStyle ?? defaultControlGroupInput.controlStyle, + showApplySelections: rawControlGroupAttributes?.showApplySelections, ignoreParentSettings: safeJSONParse(rawControlGroupAttributes?.ignoreParentSettingsJSON) ?? {}, panels: safeJSONParse(rawControlGroupAttributes?.panelsJSON) ?? {}, }; @@ -163,6 +172,7 @@ export const serializableToRawControlGroupAttributes = ( return { controlStyle: serializable.controlStyle as RawControlGroupAttributes['controlStyle'], chainingSystem: serializable.chainingSystem as RawControlGroupAttributes['chainingSystem'], + showApplySelections: Boolean(serializable.showApplySelections), ignoreParentSettingsJSON: JSON.stringify(serializable.ignoreParentSettings), panelsJSON: JSON.stringify(serializable.panels), }; diff --git a/src/plugins/controls/common/control_group/mocks.tsx b/src/plugins/controls/common/control_group/mocks.tsx index fb469a53b1a2..a39812dfc019 100644 --- a/src/plugins/controls/common/control_group/mocks.tsx +++ b/src/plugins/controls/common/control_group/mocks.tsx @@ -7,9 +7,10 @@ */ import { EmbeddablePersistableStateService } from '@kbn/embeddable-plugin/common'; -import { ControlGroupInput } from './types'; import { getDefaultControlGroupInput } from '..'; import { ControlGroupContainerFactory } from '../../public'; +import { ControlGroupComponentState } from '../../public/control_group/types'; +import { ControlGroupInput } from './types'; export const mockControlGroupInput = (partial?: Partial): ControlGroupInput => ({ id: 'mocked_control_group', @@ -48,14 +49,25 @@ export const mockControlGroupInput = (partial?: Partial): Con ...(partial ?? {}), }); -export const mockControlGroupContainer = async (explicitInput?: Partial) => { +export const mockControlGroupContainer = async ( + explicitInput?: Partial, + initialComponentState?: Partial +) => { const controlGroupFactoryStub = new ControlGroupContainerFactory( {} as unknown as EmbeddablePersistableStateService ); - const controlGroupContainer = await controlGroupFactoryStub.create({ + const input: ControlGroupInput = { id: 'mocked-control-group', ...getDefaultControlGroupInput(), ...explicitInput, + }; + const controlGroupContainer = await controlGroupFactoryStub.create(input, undefined, { + ...initialComponentState, + lastSavedInput: { + panels: input.panels, + chainingSystem: 'HIERARCHICAL', + controlStyle: 'twoLine', + }, }); return controlGroupContainer; diff --git a/src/plugins/controls/common/control_group/types.ts b/src/plugins/controls/common/control_group/types.ts index eeda06437cd5..5852dc392a6c 100644 --- a/src/plugins/controls/common/control_group/types.ts +++ b/src/plugins/controls/common/control_group/types.ts @@ -31,6 +31,7 @@ export interface ControlGroupInput extends EmbeddableInput, ControlInput { defaultControlGrow?: boolean; controlStyle: ControlStyle; panels: ControlsPanels; + showApplySelections?: boolean; } /** @@ -39,9 +40,9 @@ export interface ControlGroupInput extends EmbeddableInput, ControlInput { export const persistableControlGroupInputKeys: Array< keyof Pick< ControlGroupInput, - 'panels' | 'chainingSystem' | 'controlStyle' | 'ignoreParentSettings' + 'panels' | 'chainingSystem' | 'controlStyle' | 'ignoreParentSettings' | 'showApplySelections' > -> = ['panels', 'chainingSystem', 'controlStyle', 'ignoreParentSettings']; +> = ['panels', 'chainingSystem', 'controlStyle', 'ignoreParentSettings', 'showApplySelections']; export type PersistableControlGroupInput = Pick< ControlGroupInput, typeof persistableControlGroupInputKeys[number] diff --git a/src/plugins/controls/common/types.ts b/src/plugins/controls/common/types.ts index 7eb0d69f98a4..ac140825563c 100644 --- a/src/plugins/controls/common/types.ts +++ b/src/plugins/controls/common/types.ts @@ -12,6 +12,8 @@ import { EmbeddableInput } from '@kbn/embeddable-plugin/common/types'; export type ControlWidth = 'small' | 'medium' | 'large'; export type ControlStyle = 'twoLine' | 'oneLine'; +export type TimeSlice = [number, number]; + export interface ParentIgnoreSettings { ignoreFilters?: boolean; ignoreQuery?: boolean; @@ -23,7 +25,7 @@ export type ControlInput = EmbeddableInput & { query?: Query; filters?: Filter[]; timeRange?: TimeRange; - timeslice?: [number, number]; + timeslice?: TimeSlice; controlStyle?: ControlStyle; ignoreParentSettings?: ParentIgnoreSettings; }; diff --git a/src/plugins/controls/public/control_group/component/control_frame_component.tsx b/src/plugins/controls/public/control_group/component/control_frame_component.tsx index babf862a05c9..771f6d7d9c59 100644 --- a/src/plugins/controls/public/control_group/component/control_frame_component.tsx +++ b/src/plugins/controls/public/control_group/component/control_frame_component.tsx @@ -19,11 +19,11 @@ import { import { isErrorEmbeddable } from '@kbn/embeddable-plugin/public'; import { FloatingActions } from '@kbn/presentation-util-plugin/public'; +import { useChildEmbeddable } from '../../hooks/use_child_embeddable'; import { controlGroupSelector, useControlGroupContainer, } from '../embeddable/control_group_container'; -import { useChildEmbeddable } from '../../hooks/use_child_embeddable'; import { ControlError } from './control_error_component'; export interface ControlFrameProps { @@ -58,13 +58,15 @@ export const ControlFrame = ({ const usingTwoLineLayout = controlStyle === 'twoLine'; useEffect(() => { + let mounted = true; if (embeddableRoot.current) { embeddable?.render(embeddableRoot.current); } - const inputSubscription = embeddable - ?.getInput$() - .subscribe((newInput) => setTitle(newInput.title)); + const inputSubscription = embeddable?.getInput$().subscribe((newInput) => { + if (mounted) setTitle(newInput.title); + }); return () => { + mounted = false; inputSubscription?.unsubscribe(); }; }, [embeddable, embeddableRoot]); diff --git a/src/plugins/controls/public/control_group/component/control_group_component.test.tsx b/src/plugins/controls/public/control_group/component/control_group_component.test.tsx new file mode 100644 index 000000000000..5fee973d1033 --- /dev/null +++ b/src/plugins/controls/public/control_group/component/control_group_component.test.tsx @@ -0,0 +1,202 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; + +import { stubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; +import { pluginServices as presentationUtilPluginServices } from '@kbn/presentation-util-plugin/public/services'; +import { registry as presentationUtilServicesRegistry } from '@kbn/presentation-util-plugin/public/services/plugin_services.story'; +import { act, render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; + +import { Provider } from 'react-redux'; +import { OptionsListEmbeddableFactory } from '../..'; +import { OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL } from '../../../common'; +import { mockControlGroupContainer, mockControlGroupInput } from '../../../common/mocks'; +import { RangeSliderEmbeddableFactory } from '../../range_slider'; +import { pluginServices } from '../../services'; +import { ControlGroupContainerContext } from '../embeddable/control_group_container'; +import { ControlGroupComponentState, ControlGroupInput } from '../types'; +import { ControlGroup } from './control_group_component'; + +jest.mock('@dnd-kit/core', () => ({ + /** DnD kit has a memory leak based on this layout measuring strategy on unmount; setting it to undefined prevents this */ + ...jest.requireActual('@dnd-kit/core'), + LayoutMeasuringStrategy: { Always: undefined }, +})); + +describe('Control group component', () => { + interface MountOptions { + explicitInput?: Partial; + initialComponentState?: Partial; + } + + presentationUtilServicesRegistry.start({}); + presentationUtilPluginServices.setRegistry(presentationUtilServicesRegistry); + + pluginServices.getServices().dataViews.get = jest.fn().mockResolvedValue(stubDataView); + pluginServices.getServices().dataViews.getIdsWithTitle = jest + .fn() + .mockResolvedValue([{ id: stubDataView.id, title: stubDataView.getIndexPattern() }]); + pluginServices.getServices().controls.getControlTypes = jest + .fn() + .mockReturnValue([OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL]); + pluginServices.getServices().controls.getControlFactory = jest + .fn() + .mockImplementation((type: string) => { + if (type === OPTIONS_LIST_CONTROL) return new OptionsListEmbeddableFactory(); + if (type === RANGE_SLIDER_CONTROL) return new RangeSliderEmbeddableFactory(); + }); + + async function mountComponent(options?: MountOptions) { + const controlGroupContainer = await mockControlGroupContainer( + mockControlGroupInput(options?.explicitInput), + options?.initialComponentState + ); + + const controlGroupComponent = render( + + + + + + ); + + await waitFor(() => { + // wait for control group to render all 3 controls before returning + expect(controlGroupComponent.queryAllByTestId('control-frame').length).toBe(3); + }); + + return { controlGroupComponent, controlGroupContainer }; + } + + test('does not render end button group by default', async () => { + const { controlGroupComponent } = await mountComponent(); + expect( + controlGroupComponent.queryByTestId('controlGroup--endButtonGroup') + ).not.toBeInTheDocument(); + }); + + test('can render **just** add control button', async () => { + const { controlGroupComponent } = await mountComponent({ + initialComponentState: { showAddButton: true }, + }); + expect(controlGroupComponent.queryByTestId('controlGroup--endButtonGroup')).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--addControlButton') + ).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--applyFiltersButton') + ).not.toBeInTheDocument(); + }); + + test('can render **just** apply button', async () => { + const { controlGroupComponent } = await mountComponent({ + explicitInput: { showApplySelections: true }, + }); + expect(controlGroupComponent.queryByTestId('controlGroup--endButtonGroup')).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--addControlButton') + ).not.toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--applyFiltersButton') + ).toBeInTheDocument(); + }); + + test('can render both buttons in the end button group', async () => { + const { controlGroupComponent } = await mountComponent({ + explicitInput: { showApplySelections: true }, + initialComponentState: { showAddButton: true }, + }); + expect(controlGroupComponent.queryByTestId('controlGroup--endButtonGroup')).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--addControlButton') + ).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('controlGroup--applyFiltersButton') + ).toBeInTheDocument(); + }); + + test('enables apply button based on unpublished filters', async () => { + const { controlGroupComponent, controlGroupContainer } = await mountComponent({ + explicitInput: { showApplySelections: true }, + }); + expect(controlGroupComponent.getByTestId('controlGroup--applyFiltersButton')).toBeDisabled(); + + act(() => controlGroupContainer.dispatch.setUnpublishedFilters({ filters: [] })); + expect(controlGroupComponent.getByTestId('controlGroup--applyFiltersButton')).toBeEnabled(); + + act(() => controlGroupContainer.dispatch.setUnpublishedFilters(undefined)); + expect(controlGroupComponent.getByTestId('controlGroup--applyFiltersButton')).toBeDisabled(); + + act(() => controlGroupContainer.dispatch.setUnpublishedFilters({ timeslice: [0, 1] })); + expect(controlGroupComponent.getByTestId('controlGroup--applyFiltersButton')).toBeEnabled(); + }); + + test('calls publish when apply button is clicked', async () => { + const { controlGroupComponent, controlGroupContainer } = await mountComponent({ + explicitInput: { showApplySelections: true }, + }); + let applyButton = controlGroupComponent.getByTestId('controlGroup--applyFiltersButton'); + expect(applyButton).toBeDisabled(); + controlGroupContainer.publishFilters = jest.fn(); + + const unpublishedFilters: ControlGroupComponentState['unpublishedFilters'] = { + filters: [ + { + query: { exists: { field: 'foo' } }, + meta: { type: 'exists' }, + }, + ], + timeslice: [0, 1], + }; + act(() => controlGroupContainer.dispatch.setUnpublishedFilters(unpublishedFilters)); + applyButton = controlGroupComponent.getByTestId('controlGroup--applyFiltersButton'); + expect(applyButton).toBeEnabled(); + + userEvent.click(applyButton); + expect(controlGroupContainer.publishFilters).toBeCalledWith(unpublishedFilters); + }); + + test('ensure actions get rendered', async () => { + presentationUtilPluginServices.getServices().uiActions.getTriggerCompatibleActions = jest + .fn() + .mockImplementation(() => { + return [ + { + isCompatible: jest.fn().mockResolvedValue(true), + id: 'testAction', + MenuItem: () =>
test1
, + }, + + { + isCompatible: jest.fn().mockResolvedValue(true), + id: 'testAction2', + MenuItem: () =>
test2
, + }, + ]; + }); + + const { controlGroupComponent } = await mountComponent(); + expect( + controlGroupComponent.queryByTestId('presentationUtil__floatingActions__control1') + ).toBeInTheDocument(); + expect( + controlGroupComponent.queryByTestId('presentationUtil__floatingActions__control2') + ).toBeInTheDocument(); + }); +}); diff --git a/src/plugins/controls/public/control_group/component/control_group_component.tsx b/src/plugins/controls/public/control_group/component/control_group_component.tsx index 20d599aed0eb..ebbcf20b6636 100644 --- a/src/plugins/controls/public/control_group/component/control_group_component.tsx +++ b/src/plugins/controls/public/control_group/component/control_group_component.tsx @@ -10,7 +10,6 @@ import '../control_group.scss'; import classNames from 'classnames'; import React, { useEffect, useMemo, useState } from 'react'; -import { TypedUseSelectorHook, useSelector } from 'react-redux'; import { closestCenter, @@ -38,28 +37,36 @@ import { EuiIcon, EuiPanel, EuiText, + EuiToolTip, EuiTourStep, } from '@elastic/eui'; import { ViewMode } from '@kbn/embeddable-plugin/public'; import { ControlGroupStrings } from '../control_group_strings'; -import { useControlGroupContainer } from '../embeddable/control_group_container'; -import { ControlGroupReduxState } from '../types'; +import { + controlGroupSelector, + useControlGroupContainer, +} from '../embeddable/control_group_container'; import { ControlClone, SortableControl } from './control_group_sortable_item'; -const contextSelect = useSelector as TypedUseSelectorHook; - export const ControlGroup = () => { const controlGroup = useControlGroupContainer(); // current state - const panels = contextSelect((state) => state.explicitInput.panels); - const viewMode = contextSelect((state) => state.explicitInput.viewMode); - const controlStyle = contextSelect((state) => state.explicitInput.controlStyle); - const showAddButton = contextSelect((state) => state.componentState.showAddButton); - const controlWithInvalidSelectionsId = contextSelect( + const panels = controlGroupSelector((state) => state.explicitInput.panels); + const viewMode = controlGroupSelector((state) => state.explicitInput.viewMode); + const controlStyle = controlGroupSelector((state) => state.explicitInput.controlStyle); + const showApplySelections = controlGroupSelector( + (state) => state.explicitInput.showApplySelections + ); + const showAddButton = controlGroupSelector((state) => state.componentState.showAddButton); + const unpublishedFilters = controlGroupSelector( + (state) => state.componentState.unpublishedFilters + ); + const controlWithInvalidSelectionsId = controlGroupSelector( (state) => state.componentState.controlWithInvalidSelectionsId ); + const [tourStepOpen, setTourStepOpen] = useState(true); const [suppressTourChecked, setSuppressTourChecked] = useState(false); const [renderTourStep, setRenderTourStep] = useState(false); @@ -82,10 +89,49 @@ export const ControlGroup = () => { * This forces the tour step to get unmounted so that it can attach to the new invalid * control - otherwise, the anchor will remain attached to the old invalid control */ + let mounted = true; setRenderTourStep(false); - setTimeout(() => setRenderTourStep(true), 100); + setTimeout(() => { + if (mounted) { + setRenderTourStep(true); + } + }, 100); + return () => { + mounted = false; + }; }, [controlWithInvalidSelectionsId]); + const applyButtonEnabled = useMemo(() => { + /** + * this is undefined if there are no unpublished filters / timeslice; note that an empty filter array counts + * as unpublished filters and so the apply button should still be enabled in this case + */ + return Boolean(unpublishedFilters); + }, [unpublishedFilters]); + + const showAppendedButtonGroup = useMemo( + () => showAddButton || showApplySelections, + [showAddButton, showApplySelections] + ); + + const ApplyButtonComponent = useMemo(() => { + return ( + { + if (unpublishedFilters) controlGroup.publishFilters(unpublishedFilters); + }} + /> + ); + }, [applyButtonEnabled, unpublishedFilters, controlGroup]); + const tourStep = useMemo(() => { if ( !renderTourStep || @@ -208,10 +254,11 @@ export const ControlGroup = () => { > {tourStep} @@ -254,16 +301,42 @@ export const ControlGroup = () => { - {showAddButton && ( - - controlGroup.openAddDataControlFlyout()} - /> + {showAppendedButtonGroup && ( + + + {showAddButton && ( + + + controlGroup.openAddDataControlFlyout()} + /> + + + )} + {showApplySelections && ( + + {applyButtonEnabled ? ( + ApplyButtonComponent + ) : ( + + {ApplyButtonComponent} + + )} + + )} + )} diff --git a/src/plugins/controls/public/control_group/control_group.scss b/src/plugins/controls/public/control_group/control_group.scss index 4ad7753a9cb5..bfc1b79bac2b 100644 --- a/src/plugins/controls/public/control_group/control_group.scss +++ b/src/plugins/controls/public/control_group/control_group.scss @@ -3,8 +3,14 @@ $mediumControl: $euiSize * 25; $largeControl: $euiSize * 50; $controlMinWidth: $euiSize * 14; -.controlGroup { +.controlsWrapper { + display: flex; + align-items: center; min-height: $euiSize * 4; + + .controlGroup--endButtonGroup { + align-self: end; + } } .controlsWrapper--twoLine { diff --git a/src/plugins/controls/public/control_group/control_group_strings.ts b/src/plugins/controls/public/control_group/control_group_strings.ts index 7b1b3ff3c116..8a2d74c84292 100644 --- a/src/plugins/controls/public/control_group/control_group_strings.ts +++ b/src/plugins/controls/public/control_group/control_group_strings.ts @@ -172,6 +172,14 @@ export const ControlGroupStrings = { i18n.translate('controls.controlGroup.management.addControl', { defaultMessage: 'Add control', }), + getApplyButtonTitle: (applyResetButtonsEnabled: boolean) => + applyResetButtonsEnabled + ? i18n.translate('controls.controlGroup.management.applyButtonTooltip.enabled', { + defaultMessage: 'Apply selections', + }) + : i18n.translate('controls.controlGroup.management.applyButtonTooltip.disabled', { + defaultMessage: 'No new selections to apply', + }), getFlyoutTitle: () => i18n.translate('controls.controlGroup.management.flyoutTitle', { defaultMessage: 'Control settings', @@ -292,8 +300,8 @@ export const ControlGroupStrings = { i18n.translate('controls.controlGroup.management.validate.title', { defaultMessage: 'Validate user selections', }), - getValidateSelectionsSubTitle: () => - i18n.translate('controls.controlGroup.management.validate.subtitle', { + getValidateSelectionsTooltip: () => + i18n.translate('controls.controlGroup.management.validate.tooltip', { defaultMessage: 'Highlight control selections that result in no data.', }), }, @@ -302,12 +310,23 @@ export const ControlGroupStrings = { i18n.translate('controls.controlGroup.management.hierarchy.title', { defaultMessage: 'Chain controls', }), - getHierarchySubTitle: () => - i18n.translate('controls.controlGroup.management.hierarchy.subtitle', { + getHierarchyTooltip: () => + i18n.translate('controls.controlGroup.management.hierarchy.tooltip', { defaultMessage: 'Selections in one control narrow down available options in the next. Controls are chained from left to right.', }), }, + showApplySelections: { + getShowApplySelectionsTitle: () => + i18n.translate('controls.controlGroup.management.showApplySelections.title', { + defaultMessage: 'Apply selections automatically', + }), + getShowApplySelectionsTooltip: () => + i18n.translate('controls.controlGroup.management.showApplySelections.tooltip', { + defaultMessage: + 'If disabled, control selections will only be applied after clicking apply.', + }), + }, }, filteringSettings: { getFilteringSettingsTitle: () => diff --git a/src/plugins/controls/public/control_group/editor/control_group_editor.tsx b/src/plugins/controls/public/control_group/editor/control_group_editor.tsx index 70abc8ee86e7..aad2ca51bc57 100644 --- a/src/plugins/controls/public/control_group/editor/control_group_editor.tsx +++ b/src/plugins/controls/public/control_group/editor/control_group_editor.tsx @@ -50,8 +50,6 @@ interface EditControlGroupProps { onClose: () => void; } -type EditorControlGroupInput = ControlGroupInput; - const editorControlGroupInputIsEqual = (a: ControlGroupInput, b: ControlGroupInput) => fastIsEqual(a, b); @@ -62,7 +60,7 @@ export const ControlGroupEditor = ({ onDeleteAll, onClose, }: EditControlGroupProps) => { - const [controlGroupEditorState, setControlGroupEditorState] = useState({ + const [controlGroupEditorState, setControlGroupEditorState] = useState({ ...getDefaultControlGroupInput(), ...initialInput, }); @@ -92,7 +90,9 @@ export const ControlGroupEditor = ({ const applyChangesToInput = useCallback(() => { const inputToApply = { ...controlGroupEditorState }; - if (!editorControlGroupInputIsEqual(inputToApply, initialInput)) updateInput(inputToApply); + if (!editorControlGroupInputIsEqual(inputToApply, initialInput)) { + updateInput(inputToApply); + } }, [controlGroupEditorState, initialInput, updateInput]); return ( @@ -160,7 +160,7 @@ export const ControlGroupEditor = ({ label={ } checked={!Boolean(controlGroupEditorState.ignoreParentSettings?.ignoreValidations)} @@ -173,7 +173,7 @@ export const ControlGroupEditor = ({ label={ } checked={controlGroupEditorState.chainingSystem === 'HIERARCHICAL'} @@ -183,6 +183,23 @@ export const ControlGroupEditor = ({ }) } /> + + + } + checked={!controlGroupEditorState.showApplySelections} + onChange={(e) => + updateControlGroupEditorSetting({ + showApplySelections: !e.target.checked, + }) + } + /> diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_chaining_system.ts b/src/plugins/controls/public/control_group/embeddable/control_group_chaining_system.ts index 1857bd8a8df0..093d52a28bb7 100644 --- a/src/plugins/controls/public/control_group/embeddable/control_group_chaining_system.ts +++ b/src/plugins/controls/public/control_group/embeddable/control_group_chaining_system.ts @@ -18,6 +18,7 @@ import { ControlGroupInput, ControlsPanels, } from '../../../common/control_group/types'; +import { TimeSlice } from '../../../common/types'; interface GetPrecedingFiltersProps { id: string; @@ -38,7 +39,7 @@ interface ChainingSystem { ) => EmbeddableContainerSettings | undefined; getPrecedingFilters: ( props: GetPrecedingFiltersProps - ) => { filters: Filter[]; timeslice?: [number, number] } | undefined; + ) => { filters: Filter[]; timeslice?: TimeSlice } | undefined; onChildChange: (props: OnChildChangedProps) => void; } diff --git a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx index 0663d3a3d9c6..4d1ecc6458ce 100644 --- a/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx +++ b/src/plugins/controls/public/control_group/embeddable/control_group_container.tsx @@ -10,9 +10,9 @@ import { compareFilters, COMPARE_ALL_OPTIONS, Filter, uniqFilters } from '@kbn/e import { isEqual, pick } from 'lodash'; import React, { createContext, useContext } from 'react'; import ReactDOM from 'react-dom'; -import { Provider, TypedUseSelectorHook, useSelector } from 'react-redux'; +import { batch, Provider, TypedUseSelectorHook, useSelector } from 'react-redux'; import { BehaviorSubject, merge, Subject, Subscription } from 'rxjs'; -import { debounceTime, distinctUntilChanged, skip } from 'rxjs/operators'; +import { debounceTime, distinctUntilChanged, filter, first, skip } from 'rxjs/operators'; import { OverlayRef } from '@kbn/core/public'; import { Container, EmbeddableFactory } from '@kbn/embeddable-plugin/public'; @@ -24,6 +24,7 @@ import { persistableControlGroupInputIsEqual, persistableControlGroupInputKeys, } from '../../../common'; +import { TimeSlice } from '../../../common/types'; import { pluginServices } from '../../services'; import { ControlsStorageService } from '../../services/storage/types'; import { ControlEmbeddable, ControlInput, ControlOutput } from '../../types'; @@ -43,6 +44,7 @@ import { startDiffingControlGroupState } from '../state/control_group_diffing_in import { controlGroupReducers } from '../state/control_group_reducers'; import { ControlGroupComponentState, + ControlGroupFilterOutput, ControlGroupInput, ControlGroupOutput, ControlGroupReduxState, @@ -168,8 +170,9 @@ export class ControlGroupContainer extends Container< // when all children are ready setup subscriptions this.untilAllChildrenReady().then(() => { this.recalculateDataViews(); - this.recalculateFilters(); this.setupSubscriptions(); + const { filters, timeslice } = this.recalculateFilters(); + this.publishFilters({ filters, timeslice }); this.initialized$.next(true); }); @@ -203,6 +206,29 @@ export class ControlGroupContainer extends Container< }; private setupSubscriptions = () => { + /** + * on initialization, in order for comparison to be performed, calculate the last saved filters based on the + * selections from the last saved input and save them to component state. This is done as a subscription so that + * it can be done async without actually slowing down the loading of the controls. + */ + this.subscriptions.add( + this.initialized$ + .pipe( + filter((isInitialized) => isInitialized), + first() + ) + .subscribe(async () => { + const { + componentState: { lastSavedInput }, + explicitInput: { panels }, + } = this.getState(); + const filterOutput = await this.calculateFiltersFromSelections( + lastSavedInput?.panels ?? panels + ); + this.dispatch.setLastSavedFilters(filterOutput); + }) + ); + /** * refresh control order cache and make all panels refreshInputFromParent whenever panel orders change */ @@ -214,12 +240,29 @@ export class ControlGroupContainer extends Container< ) .subscribe((input) => { this.recalculateDataViews(); - this.recalculateFilters(); + this.recalculateFilters$.next(null); const childOrderCache = cachedChildEmbeddableOrder(input.panels); childOrderCache.idsInOrder.forEach((id) => this.getChild(id)?.refreshInputFromParent()); }) ); + /** + * force publish filters when `showApplySelections` value changes to keep state clean + */ + this.subscriptions.add( + this.getInput$() + .pipe( + skip(1), + distinctUntilChanged( + (a, b) => Boolean(a.showApplySelections) === Boolean(b.showApplySelections) + ) + ) + .subscribe(() => { + const { filters, timeslice } = this.recalculateFilters(); + this.publishFilters({ filters, timeslice }); + }) + ); + /** * run OnChildOutputChanged when any child's output has changed */ @@ -240,17 +283,37 @@ export class ControlGroupContainer extends Container< */ this.subscriptions.add( this.recalculateFilters$.pipe(debounceTime(10)).subscribe(() => { - this.recalculateFilters(); + const { filters, timeslice } = this.recalculateFilters(); + this.tryPublishFilters({ filters, timeslice }); }) ); }; + public setSavedState(lastSavedInput: PersistableControlGroupInput): void { + batch(() => { + this.dispatch.setLastSavedInput(lastSavedInput); + const { filters, timeslice } = this.getState().output; + this.dispatch.setLastSavedFilters({ filters, timeslice }); + }); + } + public resetToLastSavedState() { const { + explicitInput: { showApplySelections: currentShowApplySelections }, componentState: { lastSavedInput }, } = this.getState(); - if (!persistableControlGroupInputIsEqual(this.getPersistableInput(), lastSavedInput)) { + + if ( + lastSavedInput && + !persistableControlGroupInputIsEqual(this.getPersistableInput(), lastSavedInput) + ) { this.updateInput(lastSavedInput); + if (currentShowApplySelections || lastSavedInput.showApplySelections) { + /** If either the current or past state has auto-apply off, calling reset should force the changes to be published */ + this.calculateFiltersFromSelections(lastSavedInput.panels).then((filterOutput) => { + this.publishFilters(filterOutput); + }); + } this.reload(); // this forces the children to update their inputs + perform validation as necessary } } @@ -271,7 +334,8 @@ export class ControlGroupContainer extends Container< this.updateInput(newInput); this.untilAllChildrenReady().then(() => { this.recalculateDataViews(); - this.recalculateFilters(); + const { filters, timeslice } = this.recalculateFilters(); + this.publishFilters({ filters, timeslice }); this.setupSubscriptions(); this.initialized$.next(true); }); @@ -326,7 +390,7 @@ export class ControlGroupContainer extends Container< this.updateInput({ filters }); }; - private recalculateFilters = () => { + private recalculateFilters = (): ControlGroupFilterOutput => { const allFilters: Filter[] = []; let timeslice; Object.values(this.children).map((child: ControlEmbeddable) => { @@ -336,17 +400,71 @@ export class ControlGroupContainer extends Container< timeslice = childOutput.timeslice; } }); + return { filters: uniqFilters(allFilters), timeslice }; + }; - // if filters are different, publish them + private async calculateFiltersFromSelections( + panels: PersistableControlGroupInput['panels'] + ): Promise { + let filtersArray: Filter[] = []; + let timeslice; + await Promise.all( + Object.values(this.children).map(async (child) => { + if (panels[child.id]) { + const controlOutput = + (await (child as ControlEmbeddable).selectionsToFilters?.( + panels[child.id].explicitInput + )) ?? ({} as ControlGroupFilterOutput); + if (controlOutput.filters) { + filtersArray = [...filtersArray, ...controlOutput.filters]; + } else if (controlOutput.timeslice) { + timeslice = controlOutput.timeslice; + } + } + }) + ); + return { filters: filtersArray, timeslice }; + } + + /** + * If apply button is enabled, add the new filters to the unpublished filters component state; + * otherwise, publish new filters right away + */ + private tryPublishFilters = ({ + filters, + timeslice, + }: { + filters?: Filter[]; + timeslice?: TimeSlice; + }) => { + // if filters are different, try publishing them if ( - !compareFilters(this.output.filters ?? [], allFilters ?? [], COMPARE_ALL_OPTIONS) || + !compareFilters(this.output.filters ?? [], filters ?? [], COMPARE_ALL_OPTIONS) || !isEqual(this.output.timeslice, timeslice) ) { - this.updateOutput({ filters: uniqFilters(allFilters), timeslice }); - this.onFiltersPublished$.next(allFilters); + const { + explicitInput: { showApplySelections }, + } = this.getState(); + + if (!showApplySelections) { + this.publishFilters({ filters, timeslice }); + } else { + this.dispatch.setUnpublishedFilters({ filters, timeslice }); + } + } else { + this.dispatch.setUnpublishedFilters(undefined); } }; + public publishFilters = ({ filters, timeslice }: ControlGroupFilterOutput) => { + this.updateOutput({ + filters, + timeslice, + }); + this.dispatch.setUnpublishedFilters(undefined); + this.onFiltersPublished$.next(filters ?? []); + }; + private recalculateDataViews = () => { const allDataViewIds: Set = new Set(); Object.values(this.children).map((child) => { diff --git a/src/plugins/controls/public/control_group/state/control_group_diffing_integration.ts b/src/plugins/controls/public/control_group/state/control_group_diffing_integration.ts index 23f20ff885bc..f85dcd21bdce 100644 --- a/src/plugins/controls/public/control_group/state/control_group_diffing_integration.ts +++ b/src/plugins/controls/public/control_group/state/control_group_diffing_integration.ts @@ -6,9 +6,11 @@ * Side Public License, v 1. */ +import { isEqual } from 'lodash'; import { AnyAction, Middleware } from 'redux'; import { debounceTime, Observable, startWith, Subject, switchMap } from 'rxjs'; +import { compareFilters, COMPARE_ALL_OPTIONS } from '@kbn/es-query'; import { ControlGroupContainer } from '..'; import { persistableControlGroupInputIsEqual } from '../../../common'; import { CHANGE_CHECK_DEBOUNCE } from '../../constants'; @@ -41,12 +43,20 @@ export function startDiffingControlGroupState(this: ControlGroupContainer) { const { explicitInput: currentInput, - componentState: { lastSavedInput }, + componentState: { lastSavedInput, lastSavedFilters }, + output: { filters, timeslice }, } = this.getState(); - const hasUnsavedChanges = !persistableControlGroupInputIsEqual( - currentInput, - lastSavedInput + + const hasUnsavedChanges = !( + persistableControlGroupInputIsEqual( + currentInput, + lastSavedInput, + false // never diff selections for unsaved changes - compare the output filters instead + ) && + compareFilters(filters ?? [], lastSavedFilters?.filters ?? [], COMPARE_ALL_OPTIONS) && + isEqual(timeslice, lastSavedFilters?.timeslice) ); + this.unsavedChanges.next(hasUnsavedChanges ? this.getPersistableInput() : undefined); }); }) diff --git a/src/plugins/controls/public/control_group/state/control_group_reducers.ts b/src/plugins/controls/public/control_group/state/control_group_reducers.ts index 313b21af5745..8be7c9ce0383 100644 --- a/src/plugins/controls/public/control_group/state/control_group_reducers.ts +++ b/src/plugins/controls/public/control_group/state/control_group_reducers.ts @@ -13,17 +13,29 @@ import { ControlWidth } from '../../types'; import { ControlGroupComponentState, ControlGroupInput, ControlGroupReduxState } from '../types'; export const controlGroupReducers = { + setControlWithInvalidSelectionsId: ( + state: WritableDraft, + action: PayloadAction + ) => { + state.componentState.controlWithInvalidSelectionsId = action.payload; + }, setLastSavedInput: ( state: WritableDraft, action: PayloadAction ) => { state.componentState.lastSavedInput = action.payload; }, - setControlWithInvalidSelectionsId: ( + setLastSavedFilters: ( state: WritableDraft, - action: PayloadAction + action: PayloadAction ) => { - state.componentState.controlWithInvalidSelectionsId = action.payload; + state.componentState.lastSavedFilters = action.payload; + }, + setUnpublishedFilters: ( + state: WritableDraft, + action: PayloadAction + ) => { + state.componentState.unpublishedFilters = action.payload; }, setControlStyle: ( state: WritableDraft, diff --git a/src/plugins/controls/public/control_group/types.ts b/src/plugins/controls/public/control_group/types.ts index c48aee3f1ace..76b2e1f4d84a 100644 --- a/src/plugins/controls/public/control_group/types.ts +++ b/src/plugins/controls/public/control_group/types.ts @@ -8,12 +8,23 @@ import { DataViewField } from '@kbn/data-views-plugin/common'; import { ContainerOutput } from '@kbn/embeddable-plugin/public'; +import { Filter } from '@kbn/es-query'; import { ReduxEmbeddableState } from '@kbn/presentation-util-plugin/public'; + import { ControlGroupInput, PersistableControlGroupInput } from '../../common/control_group/types'; -import { CommonControlOutput } from '../types'; +import { TimeSlice } from '../../common/types'; + +export interface ControlFilterOutput { + filters?: Filter[]; +} +export interface ControlTimesliceOutput { + timeslice?: TimeSlice; +} + +export type ControlGroupFilterOutput = ControlFilterOutput & ControlTimesliceOutput; export type ControlGroupOutput = ContainerOutput & - Omit & { dataViewIds: string[] }; + ControlGroupFilterOutput & { dataViewIds: string[] }; // public only - redux embeddable state type export type ControlGroupReduxState = ReduxEmbeddableState< @@ -41,7 +52,9 @@ export interface ControlGroupSettings { } export type ControlGroupComponentState = ControlGroupSettings & { - lastSavedInput: PersistableControlGroupInput; + lastSavedInput?: PersistableControlGroupInput; + lastSavedFilters?: ControlGroupFilterOutput; + unpublishedFilters?: ControlGroupFilterOutput; controlWithInvalidSelectionsId?: string; }; diff --git a/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx b/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx index 9eef78edde7d..28ed16a3f4f0 100644 --- a/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx +++ b/src/plugins/controls/public/options_list/components/options_list_popover_footer.tsx @@ -26,10 +26,12 @@ import { useOptionsList } from '../embeddable/options_list_embeddable'; const aggregationToggleButtons = [ { id: 'optionsList__includeResults', + key: 'optionsList__includeResults', label: OptionsListStrings.popover.getIncludeLabel(), }, { id: 'optionsList__excludeResults', + key: 'optionsList__excludeResults', label: OptionsListStrings.popover.getExcludeLabel(), }, ]; diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx index d3c5bb4736e4..00d9ec69687d 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.test.tsx @@ -6,15 +6,13 @@ * Side Public License, v 1. */ -import { ControlGroupInput } from '../../../common'; -import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; import { storybookFlightsDataView } from '@kbn/presentation-util-plugin/public/mocks'; -import { OPTIONS_LIST_CONTROL } from '../../../common'; -import { ControlGroupContainer } from '../../control_group/embeddable/control_group_container'; +import { ControlGroupInput, OPTIONS_LIST_CONTROL } from '../../../common'; +import { mockControlGroupContainer } from '../../../common/mocks'; import { pluginServices } from '../../services'; import { injectStorybookDataView } from '../../services/data_views/data_views.story'; -import { OptionsListEmbeddableFactory } from './options_list_embeddable_factory'; import { OptionsListEmbeddable } from './options_list_embeddable'; +import { OptionsListEmbeddableFactory } from './options_list_embeddable_factory'; pluginServices.getServices().controls.getControlFactory = jest .fn() @@ -25,9 +23,8 @@ pluginServices.getServices().controls.getControlFactory = jest describe('initialize', () => { describe('without selected options', () => { test('should notify control group when initialization is finished', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); // data view not required for test case // setInitializationFinished is called before fetching options when value is not provided @@ -45,9 +42,8 @@ describe('initialize', () => { describe('with selected options', () => { test('should set error message when data view can not be found', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(undefined); @@ -68,9 +64,8 @@ describe('initialize', () => { }); test('should set error message when field can not be found', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); @@ -89,9 +84,8 @@ describe('initialize', () => { }); test('should notify control group when initialization is finished', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); diff --git a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx index ea3d4d80399c..506530edc185 100644 --- a/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx +++ b/src/plugins/controls/public/options_list/embeddable/options_list_embeddable.tsx @@ -35,6 +35,7 @@ import { OptionsListEmbeddableInput, OPTIONS_LIST_CONTROL, } from '../..'; +import { ControlFilterOutput } from '../../control_group/types'; import { pluginServices } from '../../services'; import { ControlsDataViewsService } from '../../services/data_views/types'; import { ControlsOptionsListService } from '../../services/options_list/types'; @@ -145,7 +146,14 @@ export class OptionsListEmbeddable private initialize = async () => { const { selectedOptions: initialSelectedOptions } = this.getInput(); if (initialSelectedOptions) { - const filters = await this.buildFilter(); + const { + explicitInput: { existsSelected, exclude }, + } = this.getState(); + const { filters } = await this.selectionsToFilters({ + existsSelected, + exclude, + selectedOptions: initialSelectedOptions, + }); this.dispatch.publishFilters(filters); } this.setInitializationFinished(); @@ -231,7 +239,7 @@ export class OptionsListEmbeddable } }), switchMap(async () => { - const newFilters = await this.buildFilter(); + const { filters: newFilters } = await this.buildFilter(); this.dispatch.publishFilters(newFilters); }) ) @@ -389,15 +397,17 @@ export class OptionsListEmbeddable }); }; - private buildFilter = async () => { - const { existsSelected, selectedOptions } = this.getState().explicitInput ?? {}; - const { exclude } = this.getInput(); + public selectionsToFilters = async ( + input: Partial + ): Promise => { + const { existsSelected, exclude, selectedOptions } = input; if ((!selectedOptions || isEmpty(selectedOptions)) && !existsSelected) { - return []; + return { filters: [] }; } + const { dataView, field } = await this.getCurrentDataViewAndField(); - if (!dataView || !field) return; + if (!dataView || !field) return { filters: [] }; let newFilter: Filter | undefined; if (existsSelected) { @@ -410,11 +420,23 @@ export class OptionsListEmbeddable } } - if (!newFilter) return []; - + if (!newFilter) return { filters: [] }; newFilter.meta.key = field?.name; if (exclude) newFilter.meta.negate = true; - return [newFilter]; + return { filters: [newFilter] }; + }; + + private buildFilter = async (): Promise => { + const { + componentState: { validSelections }, + explicitInput: { existsSelected, exclude }, + } = this.getState(); + + return await this.selectionsToFilters({ + existsSelected, + exclude, + selectedOptions: validSelections, + }); }; public clearSelections() { diff --git a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx index 6a07cd531f8e..9454e5ad3617 100644 --- a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx +++ b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.test.tsx @@ -6,16 +6,14 @@ * Side Public License, v 1. */ -import { of } from 'rxjs'; -import { ControlGroupInput } from '../../../common'; -import { lazyLoadReduxToolsPackage } from '@kbn/presentation-util-plugin/public'; import { storybookFlightsDataView } from '@kbn/presentation-util-plugin/public/mocks'; -import { RANGE_SLIDER_CONTROL } from '../../../common'; -import { ControlGroupContainer } from '../../control_group/embeddable/control_group_container'; +import { of } from 'rxjs'; +import { ControlGroupInput, RANGE_SLIDER_CONTROL } from '../../../common'; +import { mockControlGroupContainer } from '../../../common/mocks'; import { pluginServices } from '../../services'; import { injectStorybookDataView } from '../../services/data_views/data_views.story'; -import { RangeSliderEmbeddableFactory } from './range_slider_embeddable_factory'; import { RangeSliderEmbeddable } from './range_slider_embeddable'; +import { RangeSliderEmbeddableFactory } from './range_slider_embeddable_factory'; let totalResults = 20; beforeEach(() => { @@ -51,9 +49,8 @@ beforeEach(() => { describe('initialize', () => { describe('without selected range', () => { test('should notify control group when initialization is finished', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); // data view not required for test case // setInitializationFinished is called before fetching slider range when value is not provided @@ -71,9 +68,8 @@ describe('initialize', () => { describe('with selected range', () => { test('should set error message when data view can not be found', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(undefined); @@ -94,9 +90,8 @@ describe('initialize', () => { }); test('should set error message when field can not be found', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); @@ -115,9 +110,8 @@ describe('initialize', () => { }); test('should set invalid state when filter returns zero results', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); totalResults = 0; @@ -137,9 +131,8 @@ describe('initialize', () => { }); test('should set range and filter', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); @@ -168,9 +161,8 @@ describe('initialize', () => { }); test('should notify control group when initialization is finished', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); @@ -185,9 +177,8 @@ describe('initialize', () => { }); test('should notify control group when initialization throws', async () => { - const reduxEmbeddablePackage = await lazyLoadReduxToolsPackage(); const controlGroupInput = { chainingSystem: 'NONE', panels: {} } as ControlGroupInput; - const container = new ControlGroupContainer(reduxEmbeddablePackage, controlGroupInput); + const container = await mockControlGroupContainer(controlGroupInput); injectStorybookDataView(storybookFlightsDataView); diff --git a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx index 6efc6e9fc1a6..368fca384742 100644 --- a/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx +++ b/src/plugins/controls/public/range_slider/embeddable/range_slider_embeddable.tsx @@ -34,6 +34,7 @@ import { RangeSliderEmbeddableInput, RANGE_SLIDER_CONTROL, } from '../..'; +import { ControlFilterOutput } from '../../control_group/types'; import { pluginServices } from '../../services'; import { ControlsDataService } from '../../services/data/types'; import { ControlsDataViewsService } from '../../services/data_views/types'; @@ -135,8 +136,8 @@ export class RangeSliderEmbeddable private initialize = async () => { const [initialMin, initialMax] = this.getInput().value ?? []; if (!isEmpty(initialMin) || !isEmpty(initialMax)) { - const filter = await this.buildFilter(); - this.dispatch.publishFilters(filter); + const { filters: rangeFilter } = await this.buildFilter(); + this.dispatch.publishFilters(rangeFilter); } this.setInitializationFinished(); @@ -190,7 +191,7 @@ export class RangeSliderEmbeddable switchMap(async () => { try { this.dispatch.setLoading(true); - const rangeFilter = await this.buildFilter(); + const { filters: rangeFilter } = await this.buildFilter(); this.dispatch.publishFilters(rangeFilter); await this.runValidations(); this.dispatch.setLoading(false); @@ -300,25 +301,22 @@ export class RangeSliderEmbeddable return { min, max }; }; - private buildFilter = async () => { - const { - explicitInput: { value }, - } = this.getState(); - + public selectionsToFilters = async ( + input: Partial + ): Promise => { + const { value } = input; const [selectedMin, selectedMax] = value ?? ['', '']; const [min, max] = [selectedMin, selectedMax].map(parseFloat); const { dataView, field } = await this.getCurrentDataViewAndField(); - if (!dataView || !field) return []; - - if (isEmpty(selectedMin) && isEmpty(selectedMax)) return []; + if (!dataView || !field || (isEmpty(selectedMin) && isEmpty(selectedMax))) { + return { filters: [] }; + } const params = {} as RangeFilterParams; - if (selectedMin) { params.gte = min; } - if (selectedMax) { params.lte = max; } @@ -328,7 +326,14 @@ export class RangeSliderEmbeddable rangeFilter.meta.type = 'range'; rangeFilter.meta.params = params; - return [rangeFilter]; + return { filters: [rangeFilter] }; + }; + + private buildFilter = async () => { + const { + explicitInput: { value }, + } = this.getState(); + return await this.selectionsToFilters({ value }); }; private onLoadingError(errorMessage: string) { diff --git a/src/plugins/controls/public/time_slider/components/index.scss b/src/plugins/controls/public/time_slider/components/index.scss index c23667f314f0..794b27bddc05 100644 --- a/src/plugins/controls/public/time_slider/components/index.scss +++ b/src/plugins/controls/public/time_slider/components/index.scss @@ -4,7 +4,7 @@ max-inline-size: 100% !important; } -.timeSlider-playToggle { +.timeSlider-playToggle:enabled { background-color: $euiColorPrimary !important; } diff --git a/src/plugins/controls/public/time_slider/components/time_slider.tsx b/src/plugins/controls/public/time_slider/components/time_slider.tsx index 0a40e1c8420e..a9b0ffd2508e 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider.tsx @@ -6,11 +6,13 @@ * Side Public License, v 1. */ -import React, { FC } from 'react'; import { EuiInputPopover } from '@elastic/eui'; -import { FROM_INDEX, TO_INDEX } from '../time_utils'; -import { getRoundedTimeRangeBounds } from '../time_slider_selectors'; +import React, { FC } from 'react'; + +import { TimeSlice } from '../../../common/types'; import { useTimeSlider } from '../embeddable/time_slider_embeddable'; +import { getRoundedTimeRangeBounds } from '../time_slider_selectors'; +import { FROM_INDEX, TO_INDEX } from '../time_utils'; import { TimeSliderPopoverButton } from './time_slider_popover_button'; import { TimeSliderPopoverContent } from './time_slider_popover_content'; @@ -18,7 +20,7 @@ import './index.scss'; interface Props { formatDate: (epoch: number) => string; - onChange: (value?: [number, number]) => void; + onChange: (value?: TimeSlice) => void; } export const TimeSlider: FC = (props: Props) => { diff --git a/src/plugins/controls/public/time_slider/components/time_slider_anchored_range.tsx b/src/plugins/controls/public/time_slider/components/time_slider_anchored_range.tsx index 9e8a8451d083..041c3301acbc 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_anchored_range.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_anchored_range.tsx @@ -9,10 +9,11 @@ import React from 'react'; import { EuiRange, EuiRangeTick } from '@elastic/eui'; import { _SingleRangeChangeEvent } from '@elastic/eui/src/components/form/range/types'; +import { TimeSlice } from '../../../common/types'; interface Props { - value: [number, number]; - onChange: (value?: [number, number]) => void; + value: TimeSlice; + onChange: (value?: TimeSlice) => void; stepSize: number; ticks: EuiRangeTick[]; timeRangeMin: number; diff --git a/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx b/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx index 1e8a9f838ac0..5878a8983e93 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_popover_content.tsx @@ -14,10 +14,11 @@ import { TimeSliderStrings } from './time_slider_strings'; import { useTimeSlider } from '../embeddable/time_slider_embeddable'; import { TimeSliderAnchoredRange } from './time_slider_anchored_range'; import { TimeSliderSlidingWindowRange } from './time_slider_sliding_window_range'; +import { TimeSlice } from '../../../common/types'; interface Props { - value: [number, number]; - onChange: (value?: [number, number]) => void; + value: TimeSlice; + onChange: (value?: TimeSlice) => void; stepSize: number; ticks: EuiRangeTick[]; timeRangeMin: number; diff --git a/src/plugins/controls/public/time_slider/components/time_slider_prepend.tsx b/src/plugins/controls/public/time_slider/components/time_slider_prepend.tsx index bf27042190ac..0502592a68a8 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_prepend.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_prepend.tsx @@ -6,12 +6,14 @@ * Side Public License, v 1. */ -import { i18n } from '@kbn/i18n'; -import { first } from 'rxjs/operators'; -import React, { FC, useState } from 'react'; -import { EuiButtonIcon } from '@elastic/eui'; +import { EuiButtonIcon, EuiToolTip } from '@elastic/eui'; +import { ViewMode } from '@kbn/embeddable-plugin/common'; +import React, { FC, useCallback, useMemo, useState } from 'react'; import { Observable, Subscription } from 'rxjs'; +import { first } from 'rxjs/operators'; +import { useControlGroupContainer } from '../../control_group/embeddable/control_group_container'; import { useTimeSlider } from '../embeddable/time_slider_embeddable'; +import { TimeSliderStrings } from './time_slider_strings'; interface Props { onNext: () => void; @@ -21,12 +23,18 @@ interface Props { export const TimeSliderPrepend: FC = (props: Props) => { const timeSlider = useTimeSlider(); + const controlGroup = useControlGroupContainer(); + + const showApplySelectionsButton = controlGroup.select( + (state) => state.explicitInput.showApplySelections + ); + const viewMode = controlGroup.select((state) => state.explicitInput.viewMode); const [isPaused, setIsPaused] = useState(true); const [timeoutId, setTimeoutId] = useState(undefined); const [subscription, setSubscription] = useState(undefined); - const playNextFrame = () => { + const playNextFrame = useCallback(() => { // advance to next frame props.onNext(); @@ -42,15 +50,15 @@ export const TimeSliderPrepend: FC = (props: Props) => { }); setSubscription(nextFrameSubscription); } - }; + }, [props]); - const onPlay = () => { + const onPlay = useCallback(() => { timeSlider.dispatch.setIsOpen({ isOpen: true }); setIsPaused(false); playNextFrame(); - }; + }, [timeSlider.dispatch, playNextFrame]); - const onPause = () => { + const onPause = useCallback(() => { timeSlider.dispatch.setIsOpen({ isOpen: true }); setIsPaused(true); if (subscription) { @@ -61,7 +69,32 @@ export const TimeSliderPrepend: FC = (props: Props) => { clearTimeout(timeoutId); setTimeoutId(undefined); } - }; + }, [timeSlider.dispatch, subscription, timeoutId]); + + const PlayButton = useMemo(() => { + const Button = ( + + ); + return ( + <> + {showApplySelectionsButton ? ( + + {Button} + + ) : ( + Button + )} + + ); + }, [isPaused, onPlay, onPause, showApplySelectionsButton]); return (
@@ -72,29 +105,13 @@ export const TimeSliderPrepend: FC = (props: Props) => { }} iconType="framePrevious" color="text" - aria-label={i18n.translate('controls.timeSlider.previousLabel', { - defaultMessage: 'Previous time window', - })} + aria-label={TimeSliderStrings.control.getPreviousButtonAriaLabel()} data-test-subj="timeSlider-previousTimeWindow" /> - {props.waitForControlOutputConsumersToLoad$ === undefined ? null : ( - - )} + {props.waitForControlOutputConsumersToLoad$ === undefined || + (showApplySelectionsButton && viewMode === ViewMode.VIEW) + ? null + : PlayButton} { onPause(); @@ -102,9 +119,7 @@ export const TimeSliderPrepend: FC = (props: Props) => { }} iconType="frameNext" color="text" - aria-label={i18n.translate('controls.timeSlider.nextLabel', { - defaultMessage: 'Next time window', - })} + aria-label={TimeSliderStrings.control.getNextButtonAriaLabel()} data-test-subj="timeSlider-nextTimeWindow" />
diff --git a/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx b/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx index 4b87e8d3405c..8e1f4c2862b6 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx +++ b/src/plugins/controls/public/time_slider/components/time_slider_sliding_window_range.tsx @@ -8,10 +8,11 @@ import React from 'react'; import { EuiDualRange, EuiRangeTick } from '@elastic/eui'; +import { TimeSlice } from '../../../common/types'; interface Props { - value: [number, number]; - onChange: (value?: [number, number]) => void; + value: TimeSlice; + onChange: (value?: TimeSlice) => void; stepSize: number; ticks: EuiRangeTick[]; timeRangeMin: number; @@ -20,7 +21,7 @@ interface Props { export function TimeSliderSlidingWindowRange(props: Props) { function onChange(value?: [number | string, number | string]) { - props.onChange(value as [number, number]); + props.onChange(value as TimeSlice); } return ( diff --git a/src/plugins/controls/public/time_slider/components/time_slider_strings.ts b/src/plugins/controls/public/time_slider/components/time_slider_strings.ts index a80a5d477e1d..8d0e4a65962e 100644 --- a/src/plugins/controls/public/time_slider/components/time_slider_strings.ts +++ b/src/plugins/controls/public/time_slider/components/time_slider_strings.ts @@ -18,5 +18,25 @@ export const TimeSliderStrings = { i18n.translate('controls.timeSlider.settings.unpinStart', { defaultMessage: 'Unpin start', }), + getPlayButtonAriaLabel: (isPaused: boolean) => + isPaused + ? i18n.translate('controls.timeSlider.playLabel', { + defaultMessage: 'Play', + }) + : i18n.translate('controls.timeSlider.pauseLabel', { + defaultMessage: 'Pause', + }), + getPreviousButtonAriaLabel: () => + i18n.translate('controls.timeSlider.previousLabel', { + defaultMessage: 'Previous time window', + }), + getNextButtonAriaLabel: () => + i18n.translate('controls.timeSlider.nextLabel', { + defaultMessage: 'Next time window', + }), + getPlayButtonDisabledTooltip: () => + i18n.translate('controls.timeSlider.playButtonTooltip.disabled', { + defaultMessage: '"Apply selections automatically" is disabled in Control Settings.', + }), }, }; diff --git a/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx b/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx index cd073e5f9462..84ed946f56a9 100644 --- a/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx +++ b/src/plugins/controls/public/time_slider/embeddable/time_slider_embeddable.tsx @@ -20,7 +20,9 @@ import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { TIME_SLIDER_CONTROL } from '../..'; import { TimeSliderControlEmbeddableInput } from '../../../common/time_slider/types'; +import { TimeSlice } from '../../../common/types'; import { ControlGroupContainer } from '../../control_group/embeddable/control_group_container'; +import { ControlTimesliceOutput } from '../../control_group/types'; import { pluginServices } from '../../services'; import { ControlsDataService } from '../../services/data/types'; import { ControlsSettingsService } from '../../services/settings/types'; @@ -156,11 +158,36 @@ export class TimeSliderControlEmbeddable } }; + public selectionsToFilters = async ( + input: Partial + ): Promise => { + const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = input; + if ( + timesliceStartAsPercentageOfTimeRange === undefined || + timesliceEndAsPercentageOfTimeRange === undefined + ) { + return { timeslice: undefined }; + } + + const { + componentState: { stepSize, timeRangeBounds }, + } = this.getState(); + + const timeRange = timeRangeBounds[TO_INDEX] - timeRangeBounds[FROM_INDEX]; + const from = timeRangeBounds[FROM_INDEX] + timesliceStartAsPercentageOfTimeRange * timeRange; + const to = timeRangeBounds[FROM_INDEX] + timesliceEndAsPercentageOfTimeRange * timeRange; + const value = [ + roundDownToNextStepSizeFactor(from, stepSize), + roundUpToNextStepSizeFactor(to, stepSize), + ] as TimeSlice; + + return { timeslice: value }; + }; + private onInputChange() { const input = this.getInput(); const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = this.prevTimesliceAsPercentage ?? {}; - if ( timesliceStartAsPercentageOfTimeRange !== input.timesliceStartAsPercentageOfTimeRange || timesliceEndAsPercentageOfTimeRange !== input.timesliceEndAsPercentageOfTimeRange @@ -193,25 +220,18 @@ export class TimeSliderControlEmbeddable private syncWithTimeRange() { this.prevTimeRange = this.getInput().timeRange; - const stepSize = this.getState().componentState.stepSize; + const { explicitInput: currentInput } = this.getState(); const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = - this.getState().explicitInput; - + currentInput; if ( timesliceStartAsPercentageOfTimeRange !== undefined && timesliceEndAsPercentageOfTimeRange !== undefined ) { - const timeRangeBounds = this.getState().componentState.timeRangeBounds; - const timeRange = timeRangeBounds[TO_INDEX] - timeRangeBounds[FROM_INDEX]; - const from = timeRangeBounds[FROM_INDEX] + timesliceStartAsPercentageOfTimeRange * timeRange; - const to = timeRangeBounds[FROM_INDEX] + timesliceEndAsPercentageOfTimeRange * timeRange; - const value = [ - roundDownToNextStepSizeFactor(from, stepSize), - roundUpToNextStepSizeFactor(to, stepSize), - ] as [number, number]; - this.dispatch.publishValue({ value }); - this.dispatch.setValue({ value }); - this.onRangeChange(value[TO_INDEX] - value[FROM_INDEX]); + this.selectionsToFilters(currentInput).then(({ timeslice }) => { + this.dispatch.publishValue({ value: timeslice }); + this.dispatch.setValue({ value: timeslice }); + if (timeslice) this.onRangeChange(timeslice[TO_INDEX] - timeslice[FROM_INDEX]); + }); } } @@ -226,11 +246,11 @@ export class TimeSliderControlEmbeddable return; } - private debouncedPublishChange = _.debounce((value?: [number, number]) => { + private debouncedPublishChange = _.debounce((value?: TimeSlice) => { this.dispatch.publishValue({ value }); }, 500); - private getTimeSliceAsPercentageOfTimeRange(value?: [number, number]) { + private getTimeSliceAsPercentageOfTimeRange(value?: TimeSlice) { let timesliceStartAsPercentageOfTimeRange: number | undefined; let timesliceEndAsPercentageOfTimeRange: number | undefined; if (value) { @@ -248,7 +268,7 @@ export class TimeSliderControlEmbeddable return { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange }; } - private onTimesliceChange = (value?: [number, number]) => { + private onTimesliceChange = (value?: TimeSlice) => { const { timesliceStartAsPercentageOfTimeRange, timesliceEndAsPercentageOfTimeRange } = this.getTimeSliceAsPercentageOfTimeRange(value); @@ -371,7 +391,7 @@ export class TimeSliderControlEmbeddable { + onChange={(value?: TimeSlice) => { this.onTimesliceChange(value); const range = value ? value[TO_INDEX] - value[FROM_INDEX] : undefined; this.onRangeChange(range); diff --git a/src/plugins/controls/public/time_slider/time_slider_reducers.ts b/src/plugins/controls/public/time_slider/time_slider_reducers.ts index 4d4d599a06aa..e4bbda565d73 100644 --- a/src/plugins/controls/public/time_slider/time_slider_reducers.ts +++ b/src/plugins/controls/public/time_slider/time_slider_reducers.ts @@ -6,15 +6,17 @@ * Side Public License, v 1. */ +import { EuiRangeTick } from '@elastic/eui'; import { PayloadAction } from '@reduxjs/toolkit'; import { WritableDraft } from 'immer/dist/types/types-external'; -import { EuiRangeTick } from '@elastic/eui'; + +import { TimeSlice } from '../../common/types'; import { TimeSliderReduxState } from './types'; export const timeSliderReducers = { publishValue: ( state: WritableDraft, - action: PayloadAction<{ value?: [number, number] }> + action: PayloadAction<{ value?: TimeSlice }> ) => { state.output.timeslice = action.payload.value; }, @@ -47,7 +49,7 @@ export const timeSliderReducers = { setValue: ( state: WritableDraft, action: PayloadAction<{ - value?: [number, number]; + value?: TimeSlice; }> ) => { state.componentState.value = action.payload.value; diff --git a/src/plugins/controls/public/time_slider/types.ts b/src/plugins/controls/public/time_slider/types.ts index 9e72b7dd5011..3ec0cead0b75 100644 --- a/src/plugins/controls/public/time_slider/types.ts +++ b/src/plugins/controls/public/time_slider/types.ts @@ -11,6 +11,7 @@ import { EuiRangeTick } from '@elastic/eui'; import { ControlOutput } from '../types'; import { TimeSliderControlEmbeddableInput } from '../../common/time_slider/types'; +import { TimeSlice } from '../../common/types'; export * from '../../common/time_slider/types'; @@ -22,7 +23,7 @@ export interface TimeSliderSubjectState { stepSize: number; ticks: EuiRangeTick[]; timeRangeBounds: [number, number]; - value?: [number, number]; + value?: TimeSlice; } // public only - redux embeddable state type diff --git a/src/plugins/controls/public/types.ts b/src/plugins/controls/public/types.ts index 43b0e12f3fcb..bb1bbf87b62e 100644 --- a/src/plugins/controls/public/types.ts +++ b/src/plugins/controls/public/types.ts @@ -8,7 +8,8 @@ import { ReactNode } from 'react'; -import { Filter } from '@kbn/es-query'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { DataViewField, DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { EmbeddableFactory, EmbeddableOutput, @@ -17,18 +18,15 @@ import { IEmbeddable, } from '@kbn/embeddable-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { DataViewField, DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { ControlInput, ControlWidth, DataControlInput } from '../common/types'; +import { ControlGroupFilterOutput } from './control_group/types'; import { ControlsServiceType } from './services/controls/types'; -export interface CommonControlOutput { - filters?: Filter[]; +export type CommonControlOutput = ControlGroupFilterOutput & { dataViewId?: string; - timeslice?: [number, number]; -} +}; export type ControlOutput = EmbeddableOutput & CommonControlOutput; @@ -44,9 +42,14 @@ export type ControlEmbeddable< > = IEmbeddable & { isChained?: () => boolean; renderPrepend?: () => ReactNode | undefined; + selectionsToFilters?: ( + input: Partial + ) => Promise; }; -export interface IClearableControl extends ControlEmbeddable { +export interface IClearableControl< + TClearableControlEmbeddableInput extends ControlInput = ControlInput +> extends ControlEmbeddable { clearSelections: () => void; } @@ -113,4 +116,4 @@ export interface ControlsPluginStartDeps { } // re-export from common -export type { ControlWidth, ControlInput, DataControlInput, ControlStyle } from '../common/types'; +export type { ControlInput, ControlStyle, ControlWidth, DataControlInput } from '../common/types'; diff --git a/src/plugins/dashboard/common/content_management/cm_services.ts b/src/plugins/dashboard/common/content_management/cm_services.ts index 14f6a731e140..4e812bbf37b4 100644 --- a/src/plugins/dashboard/common/content_management/cm_services.ts +++ b/src/plugins/dashboard/common/content_management/cm_services.ts @@ -13,8 +13,10 @@ import type { // We export the versioned service definition from this file and not the barrel to avoid adding // the schemas in the "public" js bundle -import { serviceDefinition as v1 } from './v1/cm_services'; +import { serviceDefinition as v1 } from './v1'; +import { serviceDefinition as v2 } from './v2'; export const cmServicesDefinition: { [version: Version]: ServicesDefinition } = { 1: v1, + 2: v2, }; diff --git a/src/plugins/dashboard/common/content_management/constants.ts b/src/plugins/dashboard/common/content_management/constants.ts index dcbb1ac7d697..eaa6575eb82b 100644 --- a/src/plugins/dashboard/common/content_management/constants.ts +++ b/src/plugins/dashboard/common/content_management/constants.ts @@ -6,6 +6,6 @@ * Side Public License, v 1. */ -export const LATEST_VERSION = 1; +export const LATEST_VERSION = 2; export const CONTENT_ID = 'dashboard'; diff --git a/src/plugins/dashboard/common/content_management/index.ts b/src/plugins/dashboard/common/content_management/index.ts index 5f0a06d35f73..ac4a1373e510 100644 --- a/src/plugins/dashboard/common/content_management/index.ts +++ b/src/plugins/dashboard/common/content_management/index.ts @@ -17,8 +17,3 @@ export type { DashboardAttributes, SavedDashboardPanel, } from './latest'; - -// Today "v1" === "latest" so the export under DashboardV1 namespace is not really useful -// We leave it as a reference for future version when it will be needed to export/support older types -// in the UIs. -export * as DashboardV1 from './v1'; diff --git a/src/plugins/dashboard/common/content_management/latest.ts b/src/plugins/dashboard/common/content_management/latest.ts index f02d0a348e54..5616c4b4b3ff 100644 --- a/src/plugins/dashboard/common/content_management/latest.ts +++ b/src/plugins/dashboard/common/content_management/latest.ts @@ -6,5 +6,5 @@ * Side Public License, v 1. */ -// Latest version is 1 -export * from './v1'; +// Latest version is 2 +export * from './v2'; diff --git a/src/plugins/dashboard/common/content_management/v1/cm_services.ts b/src/plugins/dashboard/common/content_management/v1/cm_services.ts index 3de67a1dd3cd..e1fa81338a19 100644 --- a/src/plugins/dashboard/common/content_management/v1/cm_services.ts +++ b/src/plugins/dashboard/common/content_management/v1/cm_services.ts @@ -14,7 +14,16 @@ import { createResultSchema, } from '@kbn/content-management-utils'; -const dashboardAttributesSchema = schema.object( +export const controlGroupInputSchema = schema + .object({ + panelsJSON: schema.maybe(schema.string()), + controlStyle: schema.maybe(schema.string()), + chainingSystem: schema.maybe(schema.string()), + ignoreParentSettingsJSON: schema.maybe(schema.string()), + }) + .extends({}, { unknowns: 'ignore' }); + +export const dashboardAttributesSchema = schema.object( { // General title: schema.string(), @@ -39,14 +48,7 @@ const dashboardAttributesSchema = schema.object( ), // Dashboard Content - controlGroupInput: schema.maybe( - schema.object({ - panelsJSON: schema.maybe(schema.string()), - controlStyle: schema.maybe(schema.string()), - chainingSystem: schema.maybe(schema.string()), - ignoreParentSettingsJSON: schema.maybe(schema.string()), - }) - ), + controlGroupInput: schema.maybe(controlGroupInputSchema), panelsJSON: schema.string({ defaultValue: '[]' }), optionsJSON: schema.string({ defaultValue: '{}' }), @@ -57,7 +59,7 @@ const dashboardAttributesSchema = schema.object( { unknowns: 'forbid' } ); -const dashboardSavedObjectSchema = savedObjectSchema(dashboardAttributesSchema); +export const dashboardSavedObjectSchema = savedObjectSchema(dashboardAttributesSchema); const searchOptionsSchema = schema.maybe( schema.object( diff --git a/src/plugins/dashboard/common/content_management/v1/index.ts b/src/plugins/dashboard/common/content_management/v1/index.ts index ecfe16506e3e..4fb96a584691 100644 --- a/src/plugins/dashboard/common/content_management/v1/index.ts +++ b/src/plugins/dashboard/common/content_management/v1/index.ts @@ -6,11 +6,17 @@ * Side Public License, v 1. */ -import { DashboardCrudTypes } from './types'; export type { GridData, + DashboardItem, DashboardCrudTypes, DashboardAttributes, SavedDashboardPanel, } from './types'; -export type DashboardItem = DashboardCrudTypes['Item']; + +export { + serviceDefinition, + dashboardSavedObjectSchema, + controlGroupInputSchema, + dashboardAttributesSchema, +} from './cm_services'; diff --git a/src/plugins/dashboard/common/content_management/v1/types.ts b/src/plugins/dashboard/common/content_management/v1/types.ts index 05d216e8a785..55546f9f0679 100644 --- a/src/plugins/dashboard/common/content_management/v1/types.ts +++ b/src/plugins/dashboard/common/content_management/v1/types.ts @@ -28,6 +28,8 @@ export type DashboardCrudTypes = ContentManagementCrudTypes< } >; +export type DashboardItem = DashboardCrudTypes['Item']; + /** * Grid type for React Grid Layout */ @@ -59,9 +61,14 @@ export interface SavedDashboardPanel { version?: string; } +type ControlGroupAttributesV1 = Pick< + RawControlGroupAttributes, + 'panelsJSON' | 'chainingSystem' | 'controlStyle' | 'ignoreParentSettingsJSON' +>; + /* eslint-disable-next-line @typescript-eslint/consistent-type-definitions */ export type DashboardAttributes = { - controlGroupInput?: RawControlGroupAttributes; + controlGroupInput?: ControlGroupAttributesV1; refreshInterval?: RefreshInterval; timeRestore: boolean; optionsJSON?: string; diff --git a/src/plugins/dashboard/common/content_management/v2/cm_services.ts b/src/plugins/dashboard/common/content_management/v2/cm_services.ts new file mode 100644 index 000000000000..2c9bb746312c --- /dev/null +++ b/src/plugins/dashboard/common/content_management/v2/cm_services.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ +import { schema } from '@kbn/config-schema'; +import { + createResultSchema, + objectTypeToGetResultSchema, + savedObjectSchema, +} from '@kbn/content-management-utils'; +import type { ContentManagementServicesDefinition as ServicesDefinition } from '@kbn/object-versioning'; +import { + controlGroupInputSchema as controlGroupInputSchemaV1, + dashboardAttributesSchema as dashboardAttributesSchemaV1, + serviceDefinition as serviceDefinitionV1, +} from '../v1'; + +export const dashboardAttributesSchema = dashboardAttributesSchemaV1.extends( + { + controlGroupInput: schema.maybe( + controlGroupInputSchemaV1.extends( + { + showApplySelections: schema.maybe(schema.boolean()), + }, + { unknowns: 'ignore' } + ) + ), + }, + { unknowns: 'ignore' } +); + +export const dashboardSavedObjectSchema = savedObjectSchema(dashboardAttributesSchema); + +// Content management service definition. +export const serviceDefinition: ServicesDefinition = { + get: { + out: { + result: { + schema: objectTypeToGetResultSchema(dashboardSavedObjectSchema), + }, + }, + }, + create: { + in: { + ...serviceDefinitionV1?.create?.in, + data: { + schema: dashboardAttributesSchema, + }, + }, + out: { + result: { + schema: createResultSchema(dashboardSavedObjectSchema), + }, + }, + }, + update: { + in: { + ...serviceDefinitionV1.update?.in, + data: { + schema: dashboardAttributesSchema, + }, + }, + }, + search: { + in: serviceDefinitionV1.search?.in, + }, + mSearch: { + out: { + result: { + schema: dashboardSavedObjectSchema, + }, + }, + }, +}; diff --git a/src/plugins/dashboard/common/content_management/v2/index.ts b/src/plugins/dashboard/common/content_management/v2/index.ts new file mode 100644 index 000000000000..15105c60d5ab --- /dev/null +++ b/src/plugins/dashboard/common/content_management/v2/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export { + serviceDefinition, + dashboardSavedObjectSchema, + dashboardAttributesSchema, +} from './cm_services'; + +export type { GridData, DashboardItem, SavedDashboardPanel } from '../v1/types'; // no changes made to types from v1 to v2 +export type { DashboardCrudTypes, DashboardAttributes } from './types'; diff --git a/src/plugins/dashboard/common/content_management/v2/types.ts b/src/plugins/dashboard/common/content_management/v2/types.ts new file mode 100644 index 000000000000..00859c1f5cae --- /dev/null +++ b/src/plugins/dashboard/common/content_management/v2/types.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { + ContentManagementCrudTypes, + SavedObjectCreateOptions, + SavedObjectUpdateOptions, +} from '@kbn/content-management-utils'; +import { RawControlGroupAttributes } from '@kbn/controls-plugin/common'; +import { DashboardContentType } from '../types'; +import { DashboardAttributes as DashboardAttributesV1 } from '../v1/types'; + +type ControlGroupAttributesV2 = Pick< + RawControlGroupAttributes, + | 'panelsJSON' + | 'chainingSystem' + | 'controlStyle' + | 'ignoreParentSettingsJSON' + | 'showApplySelections' +>; + +export type DashboardAttributes = Omit & { + controlGroupInput?: ControlGroupAttributesV2; +}; + +export type DashboardCrudTypes = ContentManagementCrudTypes< + DashboardContentType, + DashboardAttributes, + Pick, + Pick, + { + /** Flag to indicate to only search the text on the "title" field */ + onlyTitle?: boolean; + } +>; diff --git a/src/plugins/dashboard/public/dashboard_app/_dashboard_app_strings.ts b/src/plugins/dashboard/public/dashboard_app/_dashboard_app_strings.ts index df343c3cf9d9..1d53561b619d 100644 --- a/src/plugins/dashboard/public/dashboard_app/_dashboard_app_strings.ts +++ b/src/plugins/dashboard/public/dashboard_app/_dashboard_app_strings.ts @@ -28,7 +28,7 @@ export const dashboardReadonlyBadge = { export const dashboardManagedBadge = { getTooltip: () => i18n.translate('dashboard.badge.managed.tooltip', { - defaultMessage: 'This dashboard is system managed. Clone this dashboard to make changes.', + defaultMessage: 'Elastic manages this dashboard. Clone it to make changes.', }), }; diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx index 64187ccd2d9e..5e4f12956461 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/run_save_functions.tsx @@ -153,7 +153,7 @@ export function runSaveAs(this: DashboardContainer) { this.dispatch.setStateFromSaveModal(stateFromSaveModal); this.dispatch.setLastSavedInput(dashboardStateToSave); if (this.controlGroup && persistableControlGroupInput) { - this.controlGroup.dispatch.setLastSavedInput(persistableControlGroupInput); + this.controlGroup.setSavedState(persistableControlGroupInput); } }); } @@ -214,7 +214,7 @@ export async function runQuickSave(this: DashboardContainer) { this.dispatch.setLastSavedInput(dashboardStateToSave); this.lastSavedState.next(); if (this.controlGroup && persistableControlGroupInput) { - this.controlGroup.dispatch.setLastSavedInput(persistableControlGroupInput); + this.controlGroup.setSavedState(persistableControlGroupInput); } return saveResult; diff --git a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts index 42915c0aa397..ad9a32d31f86 100644 --- a/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts +++ b/src/plugins/dashboard/public/dashboard_container/external_api/dashboard_api.ts @@ -8,12 +8,24 @@ import type { DataView } from '@kbn/data-views-plugin/public'; import { CanDuplicatePanels, CanExpandPanels, TracksOverlays } from '@kbn/presentation-containers'; -import { HasTypeDisplayName, PublishesSavedObjectId } from '@kbn/presentation-publishing'; +import { + HasType, + HasTypeDisplayName, + PublishesLocalUnifiedSearch, + PublishesPanelTitle, + PublishesSavedObjectId, +} from '@kbn/presentation-publishing'; import { DashboardPanelState } from '../../../common'; import { DashboardContainer } from '../embeddable/dashboard_container'; // TODO lock down DashboardAPI -export type DashboardAPI = DashboardContainer; +export type DashboardAPI = DashboardContainer & + Partial< + HasType<'dashboard'> & + PublishesLocalUnifiedSearch & + PublishesPanelTitle & + PublishesSavedObjectId + >; export type AwaitingDashboardAPI = DashboardAPI | null; export const buildApiFromDashboardContainer = (container?: DashboardContainer) => container ?? null; diff --git a/src/plugins/dashboard/public/dashboard_container/index.ts b/src/plugins/dashboard/public/dashboard_container/index.ts index d09b5014064d..e0b421d65fd1 100644 --- a/src/plugins/dashboard/public/dashboard_container/index.ts +++ b/src/plugins/dashboard/public/dashboard_container/index.ts @@ -6,11 +6,12 @@ * Side Public License, v 1. */ +import { LATEST_VERSION } from '../../common/content_management'; import { convertNumberToDashboardVersion } from '../services/dashboard_content_management/lib/dashboard_versioning'; export const DASHBOARD_CONTAINER_TYPE = 'dashboard'; -export const LATEST_DASHBOARD_CONTAINER_VERSION = convertNumberToDashboardVersion(1); +export const LATEST_DASHBOARD_CONTAINER_VERSION = convertNumberToDashboardVersion(LATEST_VERSION); export type { DashboardContainer } from './embeddable/dashboard_container'; export { diff --git a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts index a2b0c3f8609b..93f535b9b4d4 100644 --- a/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts +++ b/src/plugins/dashboard/public/services/dashboard_content_management/lib/save_dashboard_state.ts @@ -91,7 +91,6 @@ export const saveDashboardState = async ({ query, title, filters, - version, timeRestore, description, @@ -153,7 +152,7 @@ export const saveDashboardState = async ({ : undefined; const rawDashboardAttributes: DashboardAttributes = { - version: convertDashboardVersionToNumber(version ?? LATEST_DASHBOARD_CONTAINER_VERSION), + version: convertDashboardVersionToNumber(LATEST_DASHBOARD_CONTAINER_VERSION), controlGroupInput: serializeControlGroupInput(controlGroupInput), kibanaSavedObjectMeta: { searchSourceJSON }, description: description ?? '', diff --git a/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.test.ts b/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.test.ts new file mode 100644 index 000000000000..3e5c5d3a5b13 --- /dev/null +++ b/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.test.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { + createModelVersionTestMigrator, + type ModelVersionTestMigrator, +} from '@kbn/core-test-helpers-model-versions'; +import { createEmbeddableSetupMock } from '@kbn/embeddable-plugin/server/mocks'; + +import { createDashboardSavedObjectType } from './dashboard_saved_object'; + +const embeddableSetupMock = createEmbeddableSetupMock(); + +describe('dashboard saved object model version transformations', () => { + let migrator: ModelVersionTestMigrator; + + beforeEach(() => { + migrator = createModelVersionTestMigrator({ + type: createDashboardSavedObjectType({ migrationDeps: { embeddable: embeddableSetupMock } }), + }); + }); + + describe('model version 2', () => { + const dashboard = { + id: 'some-id', + type: 'dashboard', + attributes: { + title: 'Some Title', + description: 'some description', + panelsJSON: 'some panels', + kibanaSavedObjectMeta: {}, + optionsJSON: 'some options', + controlGroupInput: {}, + }, + references: [], + }; + + it('should properly remove the controlGroupInput.showApplySelections field when converting from v2 to v1', () => { + const migrated = migrator.migrate({ + document: { + ...dashboard, + attributes: { + ...dashboard.attributes, + controlGroupInput: { showApplySelections: false }, + }, + }, + fromVersion: 2, + toVersion: 1, + }); + + expect(migrated.attributes).toEqual(dashboard.attributes); + }); + }); +}); diff --git a/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts b/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts index 31595cb6268b..2cf913919b91 100644 --- a/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts +++ b/src/plugins/dashboard/server/dashboard_saved_object/dashboard_saved_object.ts @@ -6,9 +6,11 @@ * Side Public License, v 1. */ -import { schema } from '@kbn/config-schema'; import { ANALYTICS_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { SavedObjectsType } from '@kbn/core/server'; + +import { dashboardAttributesSchema as dashboardAttributesSchemaV1 } from '../../common/content_management/v1'; +import { dashboardAttributesSchema as dashboardAttributesSchemaV2 } from '../../common/content_management/v2'; import { createDashboardSavedObjectTypeMigrations, DashboardSavedObjectTypeMigrationsDeps, @@ -38,6 +40,33 @@ export const createDashboardSavedObjectType = ({ }; }, }, + modelVersions: { + 1: { + changes: [], + schemas: { + forwardCompatibility: dashboardAttributesSchemaV1.extends({}, { unknowns: 'ignore' }), + create: dashboardAttributesSchemaV1, + }, + }, + 2: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + controlGroupInput: { + properties: { + showApplySelections: { type: 'boolean', index: false, doc_values: false }, + }, + }, + }, + }, + ], + schemas: { + forwardCompatibility: dashboardAttributesSchemaV2.extends({}, { unknowns: 'ignore' }), + create: dashboardAttributesSchemaV2, + }, + }, + }, mappings: { properties: { description: { type: 'text' }, @@ -60,6 +89,7 @@ export const createDashboardSavedObjectType = ({ controlStyle: { type: 'keyword', index: false, doc_values: false }, chainingSystem: { type: 'keyword', index: false, doc_values: false }, panelsJSON: { type: 'text', index: false }, + showApplySelections: { type: 'boolean', index: false, doc_values: false }, ignoreParentSettingsJSON: { type: 'text', index: false }, }, }, @@ -71,45 +101,7 @@ export const createDashboardSavedObjectType = ({ }, }, schemas: { - '8.9.0': schema.object({ - // General - title: schema.string(), - description: schema.string({ defaultValue: '' }), - - // Search - kibanaSavedObjectMeta: schema.object({ - searchSourceJSON: schema.maybe(schema.string()), - }), - - // Time - timeRestore: schema.maybe(schema.boolean()), - timeFrom: schema.maybe(schema.string()), - timeTo: schema.maybe(schema.string()), - refreshInterval: schema.maybe( - schema.object({ - pause: schema.boolean(), - value: schema.number(), - display: schema.maybe(schema.string()), - section: schema.maybe(schema.number()), - }) - ), - - // Dashboard Content - controlGroupInput: schema.maybe( - schema.object({ - panelsJSON: schema.maybe(schema.string()), - controlStyle: schema.maybe(schema.string()), - chainingSystem: schema.maybe(schema.string()), - ignoreParentSettingsJSON: schema.maybe(schema.string()), - }) - ), - panelsJSON: schema.string({ defaultValue: '[]' }), - optionsJSON: schema.string({ defaultValue: '{}' }), - - // Legacy - hits: schema.maybe(schema.number()), - version: schema.maybe(schema.number()), - }), + '8.9.0': dashboardAttributesSchemaV1, }, migrations: () => createDashboardSavedObjectTypeMigrations(migrationDeps), }); diff --git a/src/plugins/dashboard/tsconfig.json b/src/plugins/dashboard/tsconfig.json index 371ec81c3d2c..f3245510cb6b 100644 --- a/src/plugins/dashboard/tsconfig.json +++ b/src/plugins/dashboard/tsconfig.json @@ -76,6 +76,7 @@ "@kbn/content-management-table-list-view-common", "@kbn/shared-ux-utility", "@kbn/managed-content-badge", + "@kbn/core-test-helpers-model-versions", ], "exclude": ["target/**/*"] } diff --git a/src/plugins/discover/public/__mocks__/services.ts b/src/plugins/discover/public/__mocks__/services.ts index 6d617e38d4df..fff99c922375 100644 --- a/src/plugins/discover/public/__mocks__/services.ts +++ b/src/plugins/discover/public/__mocks__/services.ts @@ -15,6 +15,7 @@ import { chromeServiceMock, coreMock, docLinksServiceMock, + scopedHistoryMock, themeServiceMock, } from '@kbn/core/public/mocks'; import { @@ -42,6 +43,7 @@ import { LocalStorageMock } from './local_storage_mock'; import { createDiscoverDataViewsMock } from './data_views'; import { SearchSourceDependencies } from '@kbn/data-plugin/common'; import { SearchResponse } from '@elastic/elasticsearch/lib/api/types'; +import { urlTrackerMock } from './url_tracker.mock'; export function createDiscoverServicesMock(): DiscoverServices { const dataPlugin = dataPluginMock.createStartContract(); @@ -146,12 +148,13 @@ export function createDiscoverServicesMock(): DiscoverServices { core: corePluginMock, charts: chartPluginMock.createSetupContract(), chrome: chromeServiceMock.createStartContract(), - history: () => ({ + history: { location: { search: '', }, listen: jest.fn(), - }), + }, + getScopedHistory: () => scopedHistoryMock.create(), data: dataPlugin, docLinks: docLinksServiceMock.createStartContract(), capabilities: { @@ -228,6 +231,8 @@ export function createDiscoverServicesMock(): DiscoverServices { }, contextLocator: { getRedirectUrl: jest.fn(() => '') }, singleDocLocator: { getRedirectUrl: jest.fn(() => '') }, + urlTracker: urlTrackerMock, + setHeaderActionMenu: jest.fn(), } as unknown as DiscoverServices; } diff --git a/src/plugins/discover/public/__mocks__/url_tracker.mock.ts b/src/plugins/discover/public/__mocks__/url_tracker.mock.ts index f7cc4d0a6142..c9e2558d66fc 100644 --- a/src/plugins/discover/public/__mocks__/url_tracker.mock.ts +++ b/src/plugins/discover/public/__mocks__/url_tracker.mock.ts @@ -5,7 +5,8 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { UrlTracker } from '../kibana_services'; + +import { UrlTracker } from '../build_services'; export const urlTrackerMock = { setTrackedUrl: jest.fn(), diff --git a/src/plugins/discover/public/application/context/context_app.test.tsx b/src/plugins/discover/public/application/context/context_app.test.tsx index b05dc3ca36e7..42ef78f6f757 100644 --- a/src/plugins/discover/public/application/context/context_app.test.tsx +++ b/src/plugins/discover/public/application/context/context_app.test.tsx @@ -59,7 +59,7 @@ describe('ContextApp test', () => { notifications: { toasts: [] }, theme: { theme$: themeServiceMock.createStartContract().theme$ }, }, - history: () => history, + history, fieldFormats: { getDefaultInstance: jest.fn(() => ({ convert: (value: unknown) => value })), getFormatterForField: jest.fn(() => ({ convert: (value: unknown) => value })), diff --git a/src/plugins/discover/public/application/context/context_app_route.tsx b/src/plugins/discover/public/application/context/context_app_route.tsx index 61def9cff3e6..d278b729e83a 100644 --- a/src/plugins/discover/public/application/context/context_app_route.tsx +++ b/src/plugins/discover/public/application/context/context_app_route.tsx @@ -9,12 +9,11 @@ import React, { useEffect, useMemo } from 'react'; import { useParams } from 'react-router-dom'; import { EuiEmptyPrompt } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { ScopedHistory } from '@kbn/core/public'; import { ContextApp } from './context_app'; import { LoadingIndicator } from '../../components/common/loading_indicator'; -import { getScopedHistory } from '../../kibana_services'; import { useDataView } from '../../hooks/use_data_view'; import type { ContextHistoryLocationState } from './services/locator'; +import { useDiscoverServices } from '../../hooks/use_discover_services'; export interface ContextUrlParams { dataViewId: string; @@ -22,9 +21,10 @@ export interface ContextUrlParams { } export function ContextAppRoute() { + const scopedHistory = useDiscoverServices().getScopedHistory(); const locationState = useMemo( - () => getScopedHistory().location.state as ContextHistoryLocationState | undefined, - [] + () => scopedHistory?.location.state as ContextHistoryLocationState | undefined, + [scopedHistory?.location.state] ); /** @@ -32,18 +32,15 @@ export function ContextAppRoute() { * Should be removed once url state will be deleted from context page. */ useEffect(() => { - const scopedHistory = getScopedHistory() as ScopedHistory< - ContextHistoryLocationState | undefined - >; - const unlisten = scopedHistory.listen((location) => { + const unlisten = scopedHistory?.listen((location) => { const currentState = location.state; if (!currentState?.referrer && locationState) { const newLocation = { ...location, state: { ...currentState, ...locationState } }; scopedHistory.replace(newLocation); } }); - return () => unlisten(); - }, [locationState]); + return () => unlisten?.(); + }, [locationState, scopedHistory]); const { dataViewId: encodedDataViewId, id } = useParams(); const dataViewId = decodeURIComponent(encodedDataViewId); diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts index 74e4bab05332..5a05c53ada20 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_state.ts @@ -25,7 +25,7 @@ export function useContextAppState({ return getState({ defaultSize: parseInt(config.get(CONTEXT_DEFAULT_SIZE_SETTING), 10), storeInSessionStorage: config.get('state:storeInSessionStorage'), - history: history(), + history, toasts: core.notifications.toasts, uiSettings: config, data: services.data, diff --git a/src/plugins/discover/public/application/discover_router.test.tsx b/src/plugins/discover/public/application/discover_router.test.tsx index 9ec7b7ed52fa..479abb551172 100644 --- a/src/plugins/discover/public/application/discover_router.test.tsx +++ b/src/plugins/discover/public/application/discover_router.test.tsx @@ -50,7 +50,6 @@ const gatherRoutes = (wrapper: ShallowWrapper) => { }; const props: DiscoverRoutesProps = { - isDev: false, customizationCallbacks: [], customizationContext: mockCustomizationContext, }; @@ -157,7 +156,6 @@ describe('CustomDiscoverRoutes', () => { ); expect(component.find(DiscoverRoutes).getElement()).toMatchObject( @@ -165,7 +163,6 @@ describe('CustomDiscoverRoutes', () => { prefix={addProfile('', mockProfile)} customizationCallbacks={callbacks} customizationContext={mockCustomizationContext} - isDev={props.isDev} /> ); }); @@ -176,7 +173,6 @@ describe('CustomDiscoverRoutes', () => { ); expect(component.find(NotFoundRoute).getElement()).toMatchObject(); @@ -195,7 +191,6 @@ describe('DiscoverRouter', () => { history={history} profileRegistry={profileRegistry} customizationContext={mockCustomizationContext} - isDev={props.isDev} /> ); gatherRoutes(component); @@ -206,7 +201,6 @@ describe('DiscoverRouter', () => { ); }); @@ -216,7 +210,6 @@ describe('DiscoverRouter', () => { ); }); diff --git a/src/plugins/discover/public/application/discover_router.tsx b/src/plugins/discover/public/application/discover_router.tsx index 70c56b864e8e..a9d252127013 100644 --- a/src/plugins/discover/public/application/discover_router.tsx +++ b/src/plugins/discover/public/application/discover_router.tsx @@ -26,7 +26,6 @@ export interface DiscoverRoutesProps { prefix?: string; customizationCallbacks: CustomizationCallback[]; customizationContext: DiscoverCustomizationContext; - isDev: boolean; } export const DiscoverRoutes = ({ prefix, ...mainRouteProps }: DiscoverRoutesProps) => { @@ -68,7 +67,6 @@ export const DiscoverRoutes = ({ prefix, ...mainRouteProps }: DiscoverRoutesProp interface CustomDiscoverRoutesProps { profileRegistry: DiscoverProfileRegistry; customizationContext: DiscoverCustomizationContext; - isDev: boolean; } export const CustomDiscoverRoutes = ({ profileRegistry, ...props }: CustomDiscoverRoutesProps) => { @@ -96,7 +94,6 @@ export interface DiscoverRouterProps { profileRegistry: DiscoverProfileRegistry; customizationContext: DiscoverCustomizationContext; history: History; - isDev: boolean; } export const DiscoverRouter = ({ diff --git a/src/plugins/discover/public/application/doc/single_doc_route.tsx b/src/plugins/discover/public/application/doc/single_doc_route.tsx index ad50a508fc0e..3a3d10dcd0e9 100644 --- a/src/plugins/discover/public/application/doc/single_doc_route.tsx +++ b/src/plugins/discover/public/application/doc/single_doc_route.tsx @@ -14,7 +14,6 @@ import { i18n } from '@kbn/i18n'; import { LoadingIndicator } from '../../components/common/loading_indicator'; import { Doc } from './components/doc'; import { useDiscoverServices } from '../../hooks/use_discover_services'; -import { getScopedHistory } from '../../kibana_services'; import { DiscoverError } from '../../components/common/error_alert'; import { useDataView } from '../../hooks/use_data_view'; import { DocHistoryLocationState } from './locator'; @@ -25,7 +24,7 @@ export interface DocUrlParams { } export const SingleDocRoute = () => { - const { timefilter, core } = useDiscoverServices(); + const { timefilter, core, getScopedHistory } = useDiscoverServices(); const { search } = useLocation(); const { dataViewId, index } = useParams(); @@ -33,8 +32,8 @@ export const SingleDocRoute = () => { const id = query.get('id'); const locationState = useMemo( - () => getScopedHistory().location.state as DocHistoryLocationState | undefined, - [] + () => getScopedHistory()?.location.state, + [getScopedHistory] ); useExecutionContext(core.executionContext, { diff --git a/src/plugins/discover/public/application/index.tsx b/src/plugins/discover/public/application/index.tsx index df592ac7ffdb..89dd06d2104d 100644 --- a/src/plugins/discover/public/application/index.tsx +++ b/src/plugins/discover/public/application/index.tsx @@ -19,7 +19,6 @@ export interface RenderAppProps { services: DiscoverServices; profileRegistry: DiscoverProfileRegistry; customizationContext: DiscoverCustomizationContext; - isDev: boolean; } export const renderApp = ({ @@ -27,11 +26,9 @@ export const renderApp = ({ services, profileRegistry, customizationContext, - isDev, }: RenderAppProps) => { - const { history: getHistory, capabilities, chrome, data, core } = services; + const { history, capabilities, chrome, data, core } = services; - const history = getHistory(); if (!capabilities.discover.save) { chrome.setBadge({ text: i18n.translate('discover.badge.readOnly.text', { @@ -49,7 +46,6 @@ export const renderApp = ({ profileRegistry={profileRegistry} customizationContext={customizationContext} history={history} - isDev={isDev} />, { theme: core.theme, diff --git a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx index 4e143c80d96d..38b9fed87793 100644 --- a/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx +++ b/src/plugins/discover/public/application/main/components/layout/__stories__/discover_layout.stories.tsx @@ -15,9 +15,6 @@ import { getDataViewMock } from '../../../../../__mocks__/__storybook_mocks__/ge import { withDiscoverServices } from '../../../../../__mocks__/__storybook_mocks__/with_discover_services'; import { getDocumentsLayoutProps, getPlainRecordLayoutProps } from './get_layout_props'; import { DiscoverLayout, DiscoverLayoutProps } from '../discover_layout'; -import { setHeaderActionMenuMounter } from '../../../../../kibana_services'; - -setHeaderActionMenuMounter(() => void 0); const DiscoverLayoutStory = (layoutProps: DiscoverLayoutProps) => { const [state, setState] = useState({}); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx index 62c38fe43a3b..bb085774768d 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx @@ -11,7 +11,6 @@ import { act } from 'react-dom/test-utils'; import { BehaviorSubject } from 'rxjs'; import { findTestSubject } from '@elastic/eui/lib/test'; import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { setHeaderActionMenuMounter } from '../../../../kibana_services'; import { DataDocuments$ } from '../../services/discover_data_state_container'; import { discoverServiceMock } from '../../../../__mocks__/services'; import { FetchStatus } from '../../../types'; @@ -27,8 +26,6 @@ import { DiscoverCustomization, DiscoverCustomizationProvider } from '../../../. import { createCustomizationService } from '../../../../customizations/customization_service'; import { DiscoverGrid } from '../../../../components/discover_grid'; -setHeaderActionMenuMounter(jest.fn()); - const customisationService = createCustomizationService(); async function mountComponent(fetchStatus: FetchStatus, hits: EsHitRecord[]) { diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx index 9788273ea5f6..2d61a4dbdd7d 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx @@ -11,7 +11,6 @@ import { BehaviorSubject, of } from 'rxjs'; import { EuiPageSidebar } from '@elastic/eui'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import type { Query, AggregateQuery } from '@kbn/es-query'; -import { setHeaderActionMenuMounter } from '../../../../kibana_services'; import { DiscoverLayout } from './discover_layout'; import { dataViewMock, esHitsMock } from '@kbn/discover-utils/src/__mocks__'; import { savedSearchMock } from '../../../../__mocks__/saved_search'; @@ -46,8 +45,6 @@ jest.mock('@elastic/eui', () => ({ useResizeObserver: jest.fn(() => ({ width: 1000, height: 1000 })), })); -setHeaderActionMenuMounter(jest.fn()); - async function mountComponent( dataView: DataView, prevSidebarClosed?: boolean, diff --git a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts index 871edb89d15a..52e184e25e16 100644 --- a/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts +++ b/src/plugins/discover/public/application/main/components/layout/use_discover_histogram.ts @@ -28,7 +28,6 @@ import useObservable from 'react-use/lib/useObservable'; import type { RequestAdapter } from '@kbn/inspector-plugin/common'; import { useDiscoverCustomization } from '../../../../customizations'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; -import { getUiActions } from '../../../../kibana_services'; import { FetchStatus } from '../../../types'; import type { InspectorAdapters } from '../../hooks/use_inspector'; import { checkHitCount, sendErrorTo } from '../../hooks/use_saved_search_messages'; @@ -311,8 +310,6 @@ export const useDiscoverHistogram = ({ const histogramCustomization = useDiscoverCustomization('unified_histogram'); - const servicesMemoized = useMemo(() => ({ ...services, uiActions: getUiActions() }), [services]); - const filtersMemoized = useMemo( () => [...(filters ?? []), ...customFilters], [filters, customFilters] @@ -324,7 +321,7 @@ export const useDiscoverHistogram = ({ return { ref, getCreationOptions, - services: servicesMemoized, + services, dataView: isPlainRecord ? textBasedDataView : dataView, query: isPlainRecord ? textBasedQuery : query, filters: filtersMemoized, diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx index 9c976b83c1dc..41a90d7a8520 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.test.tsx @@ -145,14 +145,6 @@ const mockCalcFieldCounts = jest.fn(() => { return mockfieldCounts; }); -jest.mock('../../../../kibana_services', () => ({ - getUiActions: jest.fn(() => { - return { - getTriggerCompatibleActions: jest.fn(() => []), - }; - }), -})); - jest.mock('../../utils/calc_field_counts', () => ({ calcFieldCounts: () => mockCalcFieldCounts(), })); diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx index fc492bc48baa..ae1e26b54896 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx @@ -31,7 +31,6 @@ import { import { calcFieldCounts } from '../../utils/calc_field_counts'; import { FetchStatus, SidebarToggleState } from '../../../types'; import { DISCOVER_TOUR_STEP_ANCHOR_IDS } from '../../../../components/discover_tour'; -import { getUiActions } from '../../../../kibana_services'; import { discoverSidebarReducer, getInitialState, @@ -331,14 +330,6 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) [canEditDataView, dataViewEditor, setDataViewEditorRef, onDataViewCreated, closeFieldListFlyout] ); - const fieldListSidebarServices: UnifiedFieldListSidebarContainerProps['services'] = useMemo( - () => ({ - ...services, - uiActions: getUiActions(), - }), - [services] - ); - const searchBarCustomization = useDiscoverCustomization('search_bar'); const fieldListCustomization = useDiscoverCustomization('field_list'); const CustomDataViewPicker = searchBarCustomization?.CustomDataViewPicker; @@ -405,7 +396,7 @@ export function DiscoverSidebarResponsive(props: DiscoverSidebarResponsiveProps) ref={initializeUnifiedFieldListSidebarContainerApi} variant={fieldListVariant} getCreationOptions={getCreationOptions} - services={fieldListSidebarServices} + services={services} dataView={selectedDataView} trackUiMetric={trackUiMetric} allFields={sidebarState.allFields} diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx index 1212772f6d59..4626eafec936 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx @@ -11,7 +11,6 @@ import { mountWithIntl } from '@kbn/test-jest-helpers'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { DiscoverTopNav, DiscoverTopNavProps } from './discover_topnav'; import { TopNavMenu, TopNavMenuData } from '@kbn/navigation-plugin/public'; -import { setHeaderActionMenuMounter } from '../../../../kibana_services'; import { discoverServiceMock as mockDiscoverService } from '../../../../__mocks__/services'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; import { DiscoverMainProvider } from '../../services/discover_state_provider'; @@ -20,8 +19,6 @@ import type { DiscoverCustomizationId } from '../../../../customizations/customi import { useDiscoverCustomization } from '../../../../customizations'; import { useKibana } from '@kbn/kibana-react-plugin/public'; -setHeaderActionMenuMounter(jest.fn()); - jest.mock('@kbn/kibana-react-plugin/public', () => ({ ...jest.requireActual('@kbn/kibana-react-plugin/public'), useKibana: jest.fn(), diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 5c14592eff0c..0af9e4ab303a 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -19,7 +19,6 @@ import { } from '../../services/discover_state_provider'; import { useInternalStateSelector } from '../../services/discover_internal_state_container'; import { useDiscoverServices } from '../../../../hooks/use_discover_services'; -import { getHeaderActionMenuMounter } from '../../../../kibana_services'; import type { DiscoverStateContainer } from '../../services/discover_state'; import { onSaveSearch } from './on_save_search'; import { useDiscoverCustomization } from '../../../../customizations'; @@ -53,7 +52,15 @@ export const DiscoverTopNav = ({ onCancelClick, }: DiscoverTopNavProps) => { const services = useDiscoverServices(); - const { dataViewEditor, navigation, dataViewFieldEditor, data, uiSettings, dataViews } = services; + const { + dataViewEditor, + navigation, + dataViewFieldEditor, + data, + uiSettings, + dataViews, + setHeaderActionMenu, + } = services; const query = useAppStateSelector((state) => state.query); const adHocDataViews = useInternalStateSelector((state) => state.adHocDataViews); const dataView = useInternalStateSelector((state) => state.dataView!); @@ -164,7 +171,6 @@ export const DiscoverTopNav = ({ ); const { topNavBadges, topNavMenu } = useDiscoverTopNav({ stateContainer }); - const setMenuMountPoint = getHeaderActionMenuMounter(); const topNavProps = useMemo(() => { if (stateContainer.customizationContext.inlineTopNav.enabled) { return undefined; @@ -173,10 +179,10 @@ export const DiscoverTopNav = ({ return { badges: topNavBadges, config: topNavMenu, - setMenuMountPoint, + setMenuMountPoint: setHeaderActionMenu, }; }, [ - setMenuMountPoint, + setHeaderActionMenu, stateContainer.customizationContext.inlineTopNav.enabled, topNavBadges, topNavMenu, diff --git a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx index 443a528e26e6..84c056f60ad0 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx @@ -284,7 +284,7 @@ const SaveSearchObjectModal: React.FC<{ managed ? i18n.translate('discover.localMenu.mustCopyOnSave', { defaultMessage: - 'This saved search is managed by Elastic. Changes here must be saved to a new saved search.', + 'Elastic manages this saved search. Save any changes to a new saved search.', }) : undefined } diff --git a/src/plugins/discover/public/application/main/discover_main_app.test.tsx b/src/plugins/discover/public/application/main/discover_main_app.test.tsx index 170f38e6fda3..43566c95a332 100644 --- a/src/plugins/discover/public/application/main/discover_main_app.test.tsx +++ b/src/plugins/discover/public/application/main/discover_main_app.test.tsx @@ -12,18 +12,13 @@ import { DataViewListItem } from '@kbn/data-views-plugin/public'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { DiscoverMainApp } from './discover_main_app'; import { DiscoverTopNav } from './components/top_nav/discover_topnav'; -import { setHeaderActionMenuMounter, setUrlTracker } from '../../kibana_services'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { discoverServiceMock } from '../../__mocks__/services'; import { Router } from '@kbn/shared-ux-router'; import { createMemoryHistory } from 'history'; -import { urlTrackerMock } from '../../__mocks__/url_tracker.mock'; import { getDiscoverStateMock } from '../../__mocks__/discover_state.mock'; import { DiscoverMainProvider } from './services/discover_state_provider'; -setHeaderActionMenuMounter(jest.fn()); -setUrlTracker(urlTrackerMock); - discoverServiceMock.data.query.timefilter.timefilter.getTime = () => { return { from: '2020-05-14T11:05:13.590', to: '2020-05-14T11:20:13.590' }; }; diff --git a/src/plugins/discover/public/application/main/discover_main_route.test.tsx b/src/plugins/discover/public/application/main/discover_main_route.test.tsx index 06d42f818287..496bb91f92cf 100644 --- a/src/plugins/discover/public/application/main/discover_main_route.test.tsx +++ b/src/plugins/discover/public/application/main/discover_main_route.test.tsx @@ -8,14 +8,12 @@ import React from 'react'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { waitFor } from '@testing-library/react'; -import { setHeaderActionMenuMounter, setScopedHistory } from '../../kibana_services'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { discoverServiceMock } from '../../__mocks__/services'; import { DiscoverMainRoute, MainRouteProps } from './discover_main_route'; import { MemoryRouter } from 'react-router-dom'; import { DiscoverMainApp } from './discover_main_app'; import { findTestSubject } from '@elastic/eui/lib/test'; -import { scopedHistoryMock } from '@kbn/core/public/mocks'; import { createCustomizationService, DiscoverCustomizationService, @@ -42,8 +40,6 @@ jest.mock('./discover_main_app', () => { }; }); -setScopedHistory(scopedHistoryMock.create()); - describe('DiscoverMainRoute', () => { beforeEach(() => { mockCustomizationService = createCustomizationService(); @@ -112,7 +108,6 @@ describe('DiscoverMainRoute', () => { const mountComponent = (hasESData = true, hasUserDataView = true) => { const props: MainRouteProps = { - isDev: false, customizationCallbacks: [], customizationContext: mockCustomizationContext, }; @@ -136,5 +131,3 @@ function getServicesMock(hasESData = true, hasUserDataView = true) { discoverServiceMock.core.http.get = jest.fn().mockResolvedValue({}); return discoverServiceMock; } - -setHeaderActionMenuMounter(jest.fn()); diff --git a/src/plugins/discover/public/application/main/discover_main_route.tsx b/src/plugins/discover/public/application/main/discover_main_route.tsx index 2bffb8d82a17..05263482662b 100644 --- a/src/plugins/discover/public/application/main/discover_main_route.tsx +++ b/src/plugins/discover/public/application/main/discover_main_route.tsx @@ -30,7 +30,6 @@ import { setBreadcrumbs } from '../../utils/breadcrumbs'; import { LoadingIndicator } from '../../components/common/loading_indicator'; import { DiscoverError } from '../../components/common/error_alert'; import { useDiscoverServices } from '../../hooks/use_discover_services'; -import { getScopedHistory, getUrlTracker } from '../../kibana_services'; import { useAlertResultsToast } from './hooks/use_alert_results_toast'; import { DiscoverMainProvider } from './services/discover_state_provider'; import { @@ -52,7 +51,6 @@ interface DiscoverLandingParams { export interface MainRouteProps { customizationCallbacks: CustomizationCallback[]; stateStorageContainer?: IKbnUrlStateStorage; - isDev: boolean; customizationContext: DiscoverCustomizationContext; } @@ -71,6 +69,7 @@ export function DiscoverMainRoute({ http: { basePath }, dataViewEditor, share, + getScopedHistory, } = services; const { id: savedSearchId } = useParams(); const [stateContainer, { reset: resetStateContainer }] = useDiscoverStateContainer({ @@ -96,8 +95,8 @@ export function DiscoverMainRoute({ * Get location state of scoped history only on initial load */ const historyLocationState = useMemo( - () => getScopedHistory().location.state as MainHistoryLocationState | undefined, - [] + () => getScopedHistory()?.location.state, + [getScopedHistory] ); useAlertResultsToast({ @@ -205,7 +204,7 @@ export function DiscoverMainRoute({ }, toastNotifications, onBeforeRedirect() { - getUrlTracker().setTrackedUrl('/'); + services.urlTracker.setTrackedUrl('/'); }, theme: core.theme, })(e); diff --git a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts index 138ca8ce011d..88f69dceb44a 100644 --- a/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts +++ b/src/plugins/discover/public/application/main/hooks/use_url_tracking.ts @@ -7,12 +7,14 @@ */ import { useEffect } from 'react'; import { DiscoverSavedSearchContainer } from '../services/discover_saved_search_container'; -import { getUrlTracker } from '../../../kibana_services'; +import { useDiscoverServices } from '../../../hooks/use_discover_services'; /** * Enable/disable kbn url tracking (That's the URL used when selecting Discover in the side menu) */ export function useUrlTracking(savedSearchContainer: DiscoverSavedSearchContainer) { + const { urlTracker } = useDiscoverServices(); + useEffect(() => { const subscription = savedSearchContainer.getCurrent$().subscribe((savedSearch) => { const dataView = savedSearch.searchSource.getField('index'); @@ -20,11 +22,11 @@ export function useUrlTracking(savedSearchContainer: DiscoverSavedSearchContaine return; } const trackingEnabled = Boolean(dataView.isPersisted() || savedSearch.id); - getUrlTracker().setTrackingEnabled(trackingEnabled); + urlTracker.setTrackingEnabled(trackingEnabled); }); return () => { subscription.unsubscribe(); }; - }, [savedSearchContainer]); + }, [savedSearchContainer, urlTracker]); } diff --git a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts index 516d81cc9c3f..247a3a4d355a 100644 --- a/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts +++ b/src/plugins/discover/public/application/main/services/discover_data_state_container.test.ts @@ -12,8 +12,6 @@ import { dataViewMock, esHitsMockWithSort } from '@kbn/discover-utils/src/__mock import { discoverServiceMock } from '../../../__mocks__/services'; import { savedSearchMockWithESQL } from '../../../__mocks__/saved_search'; import { FetchStatus } from '../../types'; -import { setUrlTracker } from '../../../kibana_services'; -import { urlTrackerMock } from '../../../__mocks__/url_tracker.mock'; import { DataDocuments$, RecordRawType } from './discover_data_state_container'; import { getDiscoverStateMock } from '../../../__mocks__/discover_state.mock'; import { fetchDocuments } from '../utils/fetch_documents'; @@ -28,7 +26,6 @@ jest.mock('@kbn/ebt-tools', () => ({ const mockFetchDocuments = fetchDocuments as unknown as jest.MockedFunction; -setUrlTracker(urlTrackerMock); describe('test getDataStateContainer', () => { test('return is valid', async () => { const stateContainer = getDiscoverStateMock({ isTimeBased: true }); diff --git a/src/plugins/discover/public/application/main/services/discover_state.ts b/src/plugins/discover/public/application/main/services/discover_state.ts index aa6830008f5c..07db2d90857d 100644 --- a/src/plugins/discover/public/application/main/services/discover_state.ts +++ b/src/plugins/discover/public/application/main/services/discover_state.ts @@ -30,7 +30,6 @@ import { FetchStatus } from '../../types'; import { changeDataView } from '../hooks/utils/change_data_view'; import { buildStateSubscribe } from '../hooks/utils/build_state_subscribe'; import { addLog } from '../../../utils/add_log'; -import { getUrlTracker } from '../../../kibana_services'; import { DiscoverDataStateContainer, getDataStateContainer } from './discover_data_state_container'; import { DiscoverSearchSessionManager } from './discover_search_session'; import { DISCOVER_APP_LOCATOR, DiscoverAppLocatorParams } from '../../../../common'; @@ -307,12 +306,16 @@ export function getDiscoverStateContainer({ const newDataView = await services.dataViews.create({ ...prevDataView.toSpec(), id: uuidv4() }); services.dataViews.clearInstanceCache(prevDataView.id); - updateFiltersReferences(prevDataView, newDataView); + updateFiltersReferences({ + prevDataView, + nextDataView: newDataView, + services, + }); internalStateContainer.transitions.replaceAdHocDataViewWithId(prevDataView.id!, newDataView); await appStateContainer.replaceUrlState({ index: newDataView.id }); const trackingEnabled = Boolean(newDataView.isPersisted() || savedSearchContainer.getId()); - getUrlTracker().setTrackingEnabled(trackingEnabled); + services.urlTracker.setTrackingEnabled(trackingEnabled); return newDataView; }; diff --git a/src/plugins/discover/public/application/main/utils/update_filter_references.ts b/src/plugins/discover/public/application/main/utils/update_filter_references.ts index 8ab92d37a76f..2017e2d41ed9 100644 --- a/src/plugins/discover/public/application/main/utils/update_filter_references.ts +++ b/src/plugins/discover/public/application/main/utils/update_filter_references.ts @@ -12,10 +12,17 @@ import { } from '@kbn/unified-search-plugin/public'; import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; -import { getUiActions } from '../../../kibana_services'; +import { DiscoverServices } from '../../../build_services'; -export const updateFiltersReferences = (prevDataView: DataView, nextDataView: DataView) => { - const uiActions = getUiActions(); +export const updateFiltersReferences = ({ + prevDataView, + nextDataView, + services: { uiActions }, +}: { + prevDataView: DataView; + nextDataView: DataView; + services: DiscoverServices; +}) => { const trigger = uiActions.getTrigger(UPDATE_FILTER_REFERENCES_TRIGGER); const action = uiActions.getAction(UPDATE_FILTER_REFERENCES_ACTION); action?.execute({ diff --git a/src/plugins/discover/public/application/not_found/not_found_route.tsx b/src/plugins/discover/public/application/not_found/not_found_route.tsx index 4b2aa2b99022..90612394c40a 100644 --- a/src/plugins/discover/public/application/not_found/not_found_route.tsx +++ b/src/plugins/discover/public/application/not_found/not_found_route.tsx @@ -11,19 +11,18 @@ import { EuiCallOut } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { Redirect } from 'react-router-dom'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { getUrlTracker } from '../../kibana_services'; import { useDiscoverServices } from '../../hooks/use_discover_services'; let bannerId: string | undefined; export function NotFoundRoute() { const services = useDiscoverServices(); - const { urlForwarding, core, history } = services; - const currentLocation = history().location.pathname; + const { urlForwarding, urlTracker, core, history } = services; + const currentLocation = history.location.pathname; useEffect(() => { const path = window.location.hash.substr(1); - getUrlTracker().restorePreviousUrl(); + urlTracker.restorePreviousUrl(); urlForwarding.navigateToLegacyKibanaUrl(path); const bannerMessage = i18n.translate('discover.noMatchRoute.bannerTitleText', { @@ -39,7 +38,7 @@ export function NotFoundRoute() { id="discover.noMatchRoute.bannerText" defaultMessage="Discover application doesn't recognize this route: {route}" values={{ - route: history().location.state.referrer, + route: history.location.state.referrer, }} />

@@ -57,7 +56,7 @@ export function NotFoundRoute() { core.overlays.banners.remove(bannerId); } }, 15000); - }, [core, history, urlForwarding]); + }, [core, history, urlForwarding, urlTracker]); return ; } diff --git a/src/plugins/discover/public/build_services.ts b/src/plugins/discover/public/build_services.ts index da82df24e184..d40edd879288 100644 --- a/src/plugins/discover/public/build_services.ts +++ b/src/plugins/discover/public/build_services.ts @@ -20,6 +20,8 @@ import { NotificationsStart, ApplicationStart, AnalyticsServiceStart, + AppMountParameters, + ScopedHistory, } from '@kbn/core/public'; import { FilterManager, @@ -51,9 +53,8 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; import type { ContentClient } from '@kbn/content-management-plugin/public'; -import { memoize } from 'lodash'; +import { memoize, noop } from 'lodash'; import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; -import { getHistory } from './kibana_services'; import { DiscoverStartPlugins } from './plugin'; import { DiscoverContextAppLocator } from './application/context/services/locator'; import { DiscoverSingleDocLocator } from './application/doc/locator'; @@ -66,6 +67,12 @@ export interface HistoryLocationState { referrer: string; } +export interface UrlTracker { + setTrackedUrl: (url: string) => void; + restorePreviousUrl: () => void; + setTrackingEnabled: (value: boolean) => void; +} + export interface DiscoverServices { application: ApplicationStart; addBasePath: (path: string) => string; @@ -76,7 +83,9 @@ export interface DiscoverServices { data: DataPublicPluginStart; docLinks: DocLinksStart; embeddable: EmbeddableStart; - history: () => History; + history: History; + getScopedHistory: () => ScopedHistory | undefined; + setHeaderActionMenu: AppMountParameters['setHeaderActionMenu']; theme: CoreStart['theme']; filterManager: FilterManager; fieldFormats: FieldFormatsStart; @@ -86,6 +95,7 @@ export interface DiscoverServices { navigation: NavigationPublicPluginStart; share?: SharePluginStart; urlForwarding: UrlForwardingStart; + urlTracker: UrlTracker; timefilter: TimefilterContract; toastNotifications: ToastsStart; notifications: NotificationsStart; @@ -113,63 +123,83 @@ export interface DiscoverServices { noDataPage?: NoDataPagePluginStart; } -export const buildServices = memoize(function ( - core: CoreStart, - plugins: DiscoverStartPlugins, - context: PluginInitializerContext, - locator: DiscoverAppLocator, - contextLocator: DiscoverContextAppLocator, - singleDocLocator: DiscoverSingleDocLocator -): DiscoverServices { - const { usageCollection } = plugins; - const storage = new Storage(localStorage); - - return { - application: core.application, - addBasePath: core.http.basePath.prepend, - analytics: core.analytics, - capabilities: core.application.capabilities, - chrome: core.chrome, +export const buildServices = memoize( + ({ core, - data: plugins.data, - docLinks: core.docLinks, - embeddable: plugins.embeddable, - theme: core.theme, - fieldFormats: plugins.fieldFormats, - filterManager: plugins.data.query.filterManager, - history: getHistory, - dataViews: plugins.data.dataViews, - inspector: plugins.inspector, - metadata: { - branch: context.env.packageInfo.branch, - }, - navigation: plugins.navigation, - share: plugins.share, - urlForwarding: plugins.urlForwarding, - timefilter: plugins.data.query.timefilter.timefilter, - toastNotifications: core.notifications.toasts, - notifications: core.notifications, - uiSettings: core.uiSettings, - settings: core.settings, - storage, - trackUiMetric: usageCollection?.reportUiCounter.bind(usageCollection, 'discover'), - dataViewFieldEditor: plugins.dataViewFieldEditor, - http: core.http, - spaces: plugins.spaces, - dataViewEditor: plugins.dataViewEditor, - triggersActionsUi: plugins.triggersActionsUi, + plugins, + context, locator, contextLocator, singleDocLocator, - expressions: plugins.expressions, - charts: plugins.charts, - savedObjectsTagging: plugins.savedObjectsTaggingOss?.getTaggingApi(), - savedObjectsManagement: plugins.savedObjectsManagement, - savedSearch: plugins.savedSearch, - unifiedSearch: plugins.unifiedSearch, - lens: plugins.lens, - uiActions: plugins.uiActions, - contentClient: plugins.contentManagement.client, - noDataPage: plugins.noDataPage, - }; -}); + history, + scopedHistory, + urlTracker, + setHeaderActionMenu = noop, + }: { + core: CoreStart; + plugins: DiscoverStartPlugins; + context: PluginInitializerContext; + locator: DiscoverAppLocator; + contextLocator: DiscoverContextAppLocator; + singleDocLocator: DiscoverSingleDocLocator; + history: History; + scopedHistory?: ScopedHistory; + urlTracker: UrlTracker; + setHeaderActionMenu?: AppMountParameters['setHeaderActionMenu']; + }): DiscoverServices => { + const { usageCollection } = plugins; + const storage = new Storage(localStorage); + + return { + application: core.application, + addBasePath: core.http.basePath.prepend, + analytics: core.analytics, + capabilities: core.application.capabilities, + chrome: core.chrome, + core, + data: plugins.data, + docLinks: core.docLinks, + embeddable: plugins.embeddable, + theme: core.theme, + fieldFormats: plugins.fieldFormats, + filterManager: plugins.data.query.filterManager, + history, + getScopedHistory: () => scopedHistory as ScopedHistory, + setHeaderActionMenu, + dataViews: plugins.data.dataViews, + inspector: plugins.inspector, + metadata: { + branch: context.env.packageInfo.branch, + }, + navigation: plugins.navigation, + share: plugins.share, + urlForwarding: plugins.urlForwarding, + urlTracker, + timefilter: plugins.data.query.timefilter.timefilter, + toastNotifications: core.notifications.toasts, + notifications: core.notifications, + uiSettings: core.uiSettings, + settings: core.settings, + storage, + trackUiMetric: usageCollection?.reportUiCounter.bind(usageCollection, 'discover'), + dataViewFieldEditor: plugins.dataViewFieldEditor, + http: core.http, + spaces: plugins.spaces, + dataViewEditor: plugins.dataViewEditor, + triggersActionsUi: plugins.triggersActionsUi, + locator, + contextLocator, + singleDocLocator, + expressions: plugins.expressions, + charts: plugins.charts, + savedObjectsTagging: plugins.savedObjectsTaggingOss?.getTaggingApi(), + savedObjectsManagement: plugins.savedObjectsManagement, + savedSearch: plugins.savedSearch, + unifiedSearch: plugins.unifiedSearch, + lens: plugins.lens, + uiActions: plugins.uiActions, + contentClient: plugins.contentManagement.client, + noDataPage: plugins.noDataPage, + }; + } +); diff --git a/src/plugins/discover/public/components/discover_container/discover_container.test.tsx b/src/plugins/discover/public/components/discover_container/discover_container.test.tsx index 708fc93e63b8..3dc04996c483 100644 --- a/src/plugins/discover/public/components/discover_container/discover_container.test.tsx +++ b/src/plugins/discover/public/components/discover_container/discover_container.test.tsx @@ -13,7 +13,6 @@ import { DiscoverContainerInternal, type DiscoverContainerInternalProps, } from './discover_container'; -import type { ScopedHistory } from '@kbn/core-application-browser'; import { discoverServiceMock } from '../../__mocks__/services'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; @@ -31,7 +30,7 @@ jest.mock('../../application/main', () => { jest.mock('@kbn/kibana-react-plugin/public'); -const { history } = discoverServiceMock; +const { getScopedHistory } = discoverServiceMock; const customizeMock = jest.fn(); @@ -40,8 +39,7 @@ const TestComponent = (props: Partial) => { )} + scopedHistory={props.scopedHistory ?? getScopedHistory()!} getDiscoverServices={getDiscoverServicesMock} /> ); diff --git a/src/plugins/discover/public/components/discover_container/discover_container.tsx b/src/plugins/discover/public/components/discover_container/discover_container.tsx index 7c345304b6f2..f9695f57f867 100644 --- a/src/plugins/discover/public/components/discover_container/discover_container.tsx +++ b/src/plugins/discover/public/components/discover_container/discover_container.tsx @@ -15,7 +15,6 @@ import type { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { DiscoverMainRoute } from '../../application/main'; import type { DiscoverServices } from '../../build_services'; import type { CustomizationCallback, DiscoverCustomizationContext } from '../../customizations'; -import { setHeaderActionMenuMounter, setScopedHistory } from '../../kibana_services'; import { LoadingIndicator } from '../common/loading_indicator'; export interface DiscoverContainerInternalProps { @@ -30,7 +29,6 @@ export interface DiscoverContainerInternalProps { scopedHistory: ScopedHistory; customizationCallbacks: CustomizationCallback[]; stateStorageContainer?: IKbnUrlStateStorage; - isDev: boolean; isLoading?: boolean; } @@ -57,30 +55,27 @@ export const DiscoverContainerInternal = ({ overrideServices, scopedHistory, customizationCallbacks, - isDev, getDiscoverServices, stateStorageContainer, isLoading = false, }: DiscoverContainerInternalProps) => { - const [discoverServices, setDiscoverServices] = useState(); - const [initialized, setInitialized] = useState(false); + const [discoverServices, setDiscoverServices] = useState(); useEffect(() => { - getDiscoverServices().then((svcs) => setDiscoverServices(svcs)); + getDiscoverServices().then(setDiscoverServices); }, [getDiscoverServices]); - useEffect(() => { - setScopedHistory(scopedHistory); - setHeaderActionMenuMounter(() => {}); - setInitialized(true); - }, [scopedHistory]); - - const services = useMemo(() => { - if (!discoverServices) return; - return { ...discoverServices, ...overrideServices }; - }, [discoverServices, overrideServices]); + const services = useMemo(() => { + return discoverServices + ? { + ...discoverServices, + ...overrideServices, + getScopedHistory: () => scopedHistory as ScopedHistory, + } + : undefined; + }, [discoverServices, overrideServices, scopedHistory]); - if (!initialized || !services || isLoading) { + if (!services || isLoading) { return ( @@ -103,7 +98,6 @@ export const DiscoverContainerInternal = ({ customizationCallbacks={customizationCallbacks} customizationContext={customizationContext} stateStorageContainer={stateStorageContainer} - isDev={isDev} /> diff --git a/src/plugins/discover/public/components/discover_container/index.ts b/src/plugins/discover/public/components/discover_container/index.ts index 0cc48d01dfaf..e6f0dcb16022 100644 --- a/src/plugins/discover/public/components/discover_container/index.ts +++ b/src/plugins/discover/public/components/discover_container/index.ts @@ -10,9 +10,6 @@ import { withSuspense } from '@kbn/shared-ux-utility'; import { lazy } from 'react'; import type { DiscoverContainerInternalProps } from './discover_container'; -export type DiscoverContainerProps = Omit< - DiscoverContainerInternalProps, - 'isDev' | 'getDiscoverServices' ->; +export type DiscoverContainerProps = Omit; export const DiscoverContainerInternal = withSuspense(lazy(() => import('./discover_container'))); diff --git a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx index d65bc83befa9..c004a3edd2e1 100644 --- a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx +++ b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.test.tsx @@ -17,17 +17,16 @@ import { SavedSearch } from '@kbn/saved-search-plugin/public'; describe('SavedSearchURLConflictCallout', () => { let spaces: ReturnType; - let history: () => History; + let history: History; beforeEach(() => { spaces = spacesPluginMock.createStartContract(); spaces.ui.components.getLegacyUrlConflict = jest.fn().mockReturnValue('callout'); - history = () => - ({ - location: { - search: '?_g=foo', - }, - } as History); + history = { + location: { + search: '?_g=foo', + }, + } as History; }); test("should render URLConflictCallout in case of id's conflicts", () => { diff --git a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts index 1fbb74d6130c..d74ce2a49a38 100644 --- a/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts +++ b/src/plugins/discover/public/components/saved_search_url_conflict_callout/saved_search_url_conflict_callout.ts @@ -14,7 +14,7 @@ import { getSavedSearchUrl, SavedSearch } from '@kbn/saved-search-plugin/public' interface SavedSearchURLConflictCalloutProps { savedSearch?: SavedSearch; spaces?: SpacesApi; - history: () => History; + history: History; } export const SavedSearchURLConflictCallout = ({ @@ -34,7 +34,7 @@ export const SavedSearchURLConflictCallout = ({ }, }), currentObjectId: savedSearch.id, - otherObjectPath: `${getSavedSearchUrl(otherObjectId)}${history().location.search}`, + otherObjectPath: `${getSavedSearchUrl(otherObjectId)}${history.location.search}`, otherObjectId, }); } diff --git a/src/plugins/discover/public/customizations/profile_aware_locator.test.ts b/src/plugins/discover/public/customizations/profile_aware_locator.test.ts index 7916710b4e27..d0ef7a526dac 100644 --- a/src/plugins/discover/public/customizations/profile_aware_locator.test.ts +++ b/src/plugins/discover/public/customizations/profile_aware_locator.test.ts @@ -6,30 +6,24 @@ * Side Public License, v 1. */ +import { History } from 'history'; import { addProfile } from '../../common/customizations'; +import { HistoryLocationState } from '../build_services'; import { ProfileAwareLocator } from './profile_aware_locator'; -let mockPathname: string | undefined; - -jest.mock('../kibana_services', () => { - const originalModule = jest.requireActual('../kibana_services'); - return { - ...originalModule, - getHistory: jest.fn(() => ({ - location: { - pathname: mockPathname, - }, - })), - }; -}); +let mockHistory: History; describe('ProfileAwareLocator', () => { beforeEach(() => { - mockPathname = undefined; + mockHistory = { + location: { + pathname: '', + }, + } as History; }); it('should inject profile', async () => { - mockPathname = addProfile('', 'test'); + mockHistory.location.pathname = addProfile('', 'test'); const locator = { id: 'test', migrations: {}, @@ -43,7 +37,7 @@ describe('ProfileAwareLocator', () => { inject: jest.fn(), extract: jest.fn(), }; - const profileAwareLocator = new ProfileAwareLocator(locator); + const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory); const params = { foo: 'bar' }; const injectedParams = { foo: 'bar', profile: 'test' }; await profileAwareLocator.getLocation(params); @@ -69,7 +63,7 @@ describe('ProfileAwareLocator', () => { }); it('should not overwrite the provided profile with an injected one', async () => { - mockPathname = addProfile('', 'test'); + mockHistory.location.pathname = addProfile('', 'test'); const locator = { id: 'test', migrations: {}, @@ -83,7 +77,7 @@ describe('ProfileAwareLocator', () => { inject: jest.fn(), extract: jest.fn(), }; - const profileAwareLocator = new ProfileAwareLocator(locator); + const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory); const params = { foo: 'bar', profile: 'test2' }; await profileAwareLocator.getLocation(params); expect(locator.getLocation).toHaveBeenCalledWith(params); @@ -121,7 +115,7 @@ describe('ProfileAwareLocator', () => { inject: jest.fn(), extract: jest.fn(), }; - const profileAwareLocator = new ProfileAwareLocator(locator); + const profileAwareLocator = new ProfileAwareLocator(locator, mockHistory); const params = { foo: 'bar' }; await profileAwareLocator.getLocation(params); expect(locator.getLocation).toHaveBeenCalledWith(params); diff --git a/src/plugins/discover/public/customizations/profile_aware_locator.ts b/src/plugins/discover/public/customizations/profile_aware_locator.ts index 44c14c4e99aa..5339a7c382aa 100644 --- a/src/plugins/discover/public/customizations/profile_aware_locator.ts +++ b/src/plugins/discover/public/customizations/profile_aware_locator.ts @@ -17,15 +17,19 @@ import type { LocatorNavigationParams, } from '@kbn/share-plugin/common/url_service'; import type { LocatorPublic } from '@kbn/share-plugin/public'; +import { History } from 'history'; import type { DependencyList } from 'react'; import { getProfile } from '../../common/customizations'; -import { getHistory } from '../kibana_services'; +import { HistoryLocationState } from '../build_services'; export class ProfileAwareLocator implements LocatorPublic { id: string; migrations: MigrateFunctionsObject | GetMigrationFunctionObjectFn; - constructor(private readonly locator: LocatorPublic) { + constructor( + private readonly locator: LocatorPublic, + private readonly history: History + ) { this.id = locator.id; this.migrations = locator.migrations; } @@ -35,8 +39,7 @@ export class ProfileAwareLocator implements Loca return params; } - const history = getHistory(); - const { profile } = getProfile(history.location.pathname); + const { profile } = getProfile(this.history.location.pathname); if (profile) { params = { ...params, profile }; diff --git a/src/plugins/discover/public/history_service.ts b/src/plugins/discover/public/history_service.ts new file mode 100644 index 000000000000..b96746697913 --- /dev/null +++ b/src/plugins/discover/public/history_service.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { createHashHistory, History } from 'history'; +import { HistoryLocationState } from './build_services'; + +export class HistoryService { + private history?: History; + + /** + * Makes sure discover and context are using one instance of history. + */ + getHistory() { + if (!this.history) { + this.history = createHashHistory(); + this.history.listen(() => { + // keep at least one listener so that `history.location` always in sync + }); + } + + return this.history; + } + + /** + * Discover currently uses two `history` instances: one from Kibana Platform and + * another from `history` package. Below function is used every time Discover + * app is loaded to synchronize both instances. + * + * This helper is temporary until https://github.com/elastic/kibana/issues/65161 is resolved. + */ + syncHistoryLocations() { + const history = this.getHistory(); + Object.assign(history.location, createHashHistory().location); + return history; + } +} diff --git a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts index 93f2c1be1ab6..e2ba306e57cb 100644 --- a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts +++ b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.test.ts @@ -16,16 +16,15 @@ import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; describe('useSavedSearchAliasMatchRedirect', () => { let spaces: ReturnType; - let history: () => History; + let history: History; beforeEach(() => { spaces = spacesPluginMock.createStartContract(); - history = () => - ({ - location: { - search: '?_g=foo', - }, - } as History); + history = { + location: { + search: '?_g=foo', + }, + } as History; }); test('should redirect in case of aliasMatch', () => { diff --git a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts index 983701236e59..3f9ccda65b68 100644 --- a/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts +++ b/src/plugins/discover/public/hooks/saved_search_alias_match_redirect.ts @@ -15,7 +15,7 @@ import { getSavedSearchUrl, SavedSearch } from '@kbn/saved-search-plugin/public' interface SavedSearchAliasMatchRedirectProps { savedSearch?: SavedSearch; spaces?: SpacesApi; - history: () => History; + history: History; } export const useSavedSearchAliasMatchRedirect = ({ @@ -31,7 +31,7 @@ export const useSavedSearchAliasMatchRedirect = ({ if (spaces && aliasTargetId && outcome === 'aliasMatch') { await spaces.ui.redirectLegacyUrl({ - path: `${getSavedSearchUrl(aliasTargetId)}${history().location.search}`, + path: `${getSavedSearchUrl(aliasTargetId)}${history.location.search}`, aliasPurpose, objectNoun: i18n.translate('discover.savedSearchAliasMatchRedirect.objectNoun', { defaultMessage: '{savedSearch} search', diff --git a/src/plugins/discover/public/kibana_services.ts b/src/plugins/discover/public/kibana_services.ts deleted file mode 100644 index ebab3c97c0ce..000000000000 --- a/src/plugins/discover/public/kibana_services.ts +++ /dev/null @@ -1,56 +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 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { once } from 'lodash'; -import { createHashHistory } from 'history'; -import type { ScopedHistory, AppMountParameters } from '@kbn/core/public'; -import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import { createGetterSetter } from '@kbn/kibana-utils-plugin/public'; -import { HistoryLocationState } from './build_services'; - -let uiActions: UiActionsStart; -export interface UrlTracker { - setTrackedUrl: (url: string) => void; - restorePreviousUrl: () => void; - setTrackingEnabled: (value: boolean) => void; -} - -export const setUiActions = (pluginUiActions: UiActionsStart) => (uiActions = pluginUiActions); -export const getUiActions = () => uiActions; - -export const [getHeaderActionMenuMounter, setHeaderActionMenuMounter] = - createGetterSetter('headerActionMenuMounter'); - -export const [getUrlTracker, setUrlTracker] = createGetterSetter('urlTracker'); - -/** - * Makes sure discover and context are using one instance of history. - */ -export const getHistory = once(() => { - const history = createHashHistory(); - history.listen(() => { - // keep at least one listener so that `history.location` always in sync - }); - return history; -}); - -/** - * Discover currently uses two `history` instances: one from Kibana Platform and - * another from `history` package. Below function is used every time Discover - * app is loaded to synchronize both instances. - * - * This helper is temporary until https://github.com/elastic/kibana/issues/65161 is resolved. - */ -export const syncHistoryLocations = () => { - const h = getHistory(); - Object.assign(h.location, createHashHistory().location); - return h; -}; - -export const [getScopedHistory, setScopedHistory] = - createGetterSetter('scopedHistory'); diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index 6441b30a06ec..a862c7844637 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -15,6 +15,7 @@ import { CoreStart, Plugin, PluginInitializerContext, + ScopedHistory, } from '@kbn/core/public'; import { UiActionsSetup, UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { ExpressionsSetup, ExpressionsStart } from '@kbn/expressions-plugin/public'; @@ -46,15 +47,8 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public'; import { TRUNCATE_MAX_HEIGHT, ENABLE_ESQL } from '@kbn/discover-utils'; import type { NoDataPagePluginStart } from '@kbn/no-data-page-plugin/public'; import { PLUGIN_ID } from '../common'; -import { - setHeaderActionMenuMounter, - setScopedHistory, - setUiActions, - setUrlTracker, - syncHistoryLocations, -} from './kibana_services'; import { registerFeature } from './register_feature'; -import { buildServices } from './build_services'; +import { buildServices, UrlTracker } from './build_services'; import { SearchEmbeddableFactory } from './embeddable'; import { ViewSavedSearchAction } from './embeddable/view_saved_search_action'; import { injectTruncateStyles } from './utils/truncate_styles'; @@ -83,6 +77,7 @@ import { type DiscoverContainerProps, } from './components/discover_container'; import { getESQLSearchProvider } from './global_search/search_provider'; +import { HistoryService } from './history_service'; /** * @public @@ -215,6 +210,9 @@ export class DiscoverPlugin constructor(private readonly initializerContext: PluginInitializerContext) {} private appStateUpdater = new BehaviorSubject(() => ({})); + private historyService = new HistoryService(); + private scopedHistory?: ScopedHistory; + private urlTracker?: UrlTracker; private stopUrlTracking: (() => void) | undefined = undefined; private profileRegistry = createProfileRegistry(); private locator?: DiscoverAppLocator; @@ -230,7 +228,6 @@ export class DiscoverPlugin plugins: DiscoverSetupPlugins ): DiscoverSetup { const baseUrl = core.http.basePath.prepend('/app/discover'); - const isDev = this.initializerContext.env.mode.dev; if (plugins.share) { const useHash = core.uiSettings.get('state:storeInSessionStorage'); @@ -275,11 +272,16 @@ export class DiscoverPlugin appMounted, appUnMounted, setTrackingEnabled, - } = initializeKbnUrlTracking(baseUrl, core, this.appStateUpdater, plugins); - setUrlTracker({ setTrackedUrl, restorePreviousUrl, setTrackingEnabled }); - this.stopUrlTracking = () => { - stopUrlTracker(); - }; + } = initializeKbnUrlTracking({ + baseUrl, + core, + navLinkUpdater$: this.appStateUpdater, + plugins, + getScopedHistory: () => this.scopedHistory!, + }); + + this.urlTracker = { setTrackedUrl, restorePreviousUrl, setTrackingEnabled }; + this.stopUrlTracking = stopUrlTracker; const appStateUpdater$ = combineLatest([ this.appStateUpdater, @@ -305,31 +307,37 @@ export class DiscoverPlugin visibleIn: ['globalSearch', 'sideNav', 'kibanaOverview'], mount: async (params: AppMountParameters) => { const [coreStart, discoverStartPlugins] = await core.getStartServices(); - setScopedHistory(params.history); - setHeaderActionMenuMounter(params.setHeaderActionMenu); - syncHistoryLocations(); + + // Store the current scoped history so initializeKbnUrlTracking can access it + this.scopedHistory = params.history; + + this.historyService.syncHistoryLocations(); appMounted(); // dispatch synthetic hash change event to update hash history objects // this is necessary because hash updates triggered by using popState won't trigger this event naturally. - const unlistenParentHistory = params.history.listen(() => { + const unlistenParentHistory = this.scopedHistory.listen(() => { window.dispatchEvent(new HashChangeEvent('hashchange')); }); - const { locator, contextLocator, singleDocLocator } = await getProfileAwareLocators({ + const { locator, contextLocator, singleDocLocator } = await this.getProfileAwareLocators({ locator: this.locator!, contextLocator: this.contextLocator!, singleDocLocator: this.singleDocLocator!, }); - const services = buildServices( - coreStart, - discoverStartPlugins, - this.initializerContext, + const services = buildServices({ + core: coreStart, + plugins: discoverStartPlugins, + context: this.initializerContext, locator, contextLocator, - singleDocLocator - ); + singleDocLocator, + history: this.historyService.getHistory(), + scopedHistory: this.scopedHistory, + urlTracker: this.urlTracker!, + setHeaderActionMenu: params.setHeaderActionMenu, + }); // make sure the data view list is up to date discoverStartPlugins.dataViews.clearCache(); @@ -347,7 +355,6 @@ export class DiscoverPlugin displayMode: 'standalone', inlineTopNav: this.inlineTopNav, }, - isDev, }); return () => { @@ -405,10 +412,8 @@ export class DiscoverPlugin plugins.uiActions.addTriggerAction('CONTEXT_MENU_TRIGGER', viewSavedSearchAction); plugins.uiActions.registerTrigger(SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER); - setUiActions(plugins.uiActions); injectTruncateStyles(core.uiSettings.get(TRUNCATE_MAX_HEIGHT)); - const isDev = this.initializerContext.env.mode.dev; const getDiscoverServicesInternal = () => { return this.getDiscoverServices(core, plugins); }; @@ -426,15 +431,9 @@ export class DiscoverPlugin return { locator: this.locator, - DiscoverContainer: (props: DiscoverContainerProps) => { - return ( - - ); - }, + DiscoverContainer: (props: DiscoverContainerProps) => ( + + ), registerCustomizationProfile: createRegisterCustomizationProfile(this.profileRegistry), }; } @@ -446,22 +445,46 @@ export class DiscoverPlugin } private getDiscoverServices = async (core: CoreStart, plugins: DiscoverStartPlugins) => { - const { locator, contextLocator, singleDocLocator } = await getProfileAwareLocators({ + const { locator, contextLocator, singleDocLocator } = await this.getProfileAwareLocators({ locator: this.locator!, contextLocator: this.contextLocator!, singleDocLocator: this.singleDocLocator!, }); - return buildServices( + return buildServices({ core, plugins, - this.initializerContext, + context: this.initializerContext, locator, contextLocator, - singleDocLocator - ); + singleDocLocator, + history: this.historyService.getHistory(), + urlTracker: this.urlTracker!, + }); }; + /** + * Create profile-aware locators for internal use + */ + private async getProfileAwareLocators({ + locator, + contextLocator, + singleDocLocator, + }: { + locator: DiscoverAppLocator; + contextLocator: DiscoverContextAppLocator; + singleDocLocator: DiscoverSingleDocLocator; + }) { + const { ProfileAwareLocator } = await import('./customizations/profile_aware_locator'); + const history = this.historyService.getHistory(); + + return { + locator: new ProfileAwareLocator(locator, history), + contextLocator: new ProfileAwareLocator(contextLocator, history), + singleDocLocator: new ProfileAwareLocator(singleDocLocator, history), + }; + } + private registerEmbeddable(core: CoreSetup, plugins: DiscoverSetupPlugins) { const getStartServices = async () => { const [coreStart, deps] = await core.getStartServices(); @@ -480,24 +503,3 @@ export class DiscoverPlugin plugins.embeddable.registerEmbeddableFactory(factory.type, factory); } } - -/** - * Create profile-aware locators for internal use - */ -const getProfileAwareLocators = async ({ - locator, - contextLocator, - singleDocLocator, -}: { - locator: DiscoverAppLocator; - contextLocator: DiscoverContextAppLocator; - singleDocLocator: DiscoverSingleDocLocator; -}) => { - const { ProfileAwareLocator } = await import('./customizations/profile_aware_locator'); - - return { - locator: new ProfileAwareLocator(locator), - contextLocator: new ProfileAwareLocator(contextLocator), - singleDocLocator: new ProfileAwareLocator(singleDocLocator), - }; -}; diff --git a/src/plugins/discover/public/utils/breadcrumbs.test.ts b/src/plugins/discover/public/utils/breadcrumbs.test.ts index da76998020e5..22c87cd4b50a 100644 --- a/src/plugins/discover/public/utils/breadcrumbs.test.ts +++ b/src/plugins/discover/public/utils/breadcrumbs.test.ts @@ -43,14 +43,12 @@ describe('Breadcrumbs', () => { }); test('should set breadcrumbs with profile root path', () => { + const history = createMemoryHistory({}); + history.push('/p/my-profile'); setBreadcrumbs({ services: { ...discoverServiceMock, - history: () => { - const history = createMemoryHistory({}); - history.push('/p/my-profile'); - return history; - }, + history, }, titleBreadcrumbText: 'Saved Search', }); diff --git a/src/plugins/discover/public/utils/breadcrumbs.ts b/src/plugins/discover/public/utils/breadcrumbs.ts index 217fb7d4c00f..c260077e24f9 100644 --- a/src/plugins/discover/public/utils/breadcrumbs.ts +++ b/src/plugins/discover/public/utils/breadcrumbs.ts @@ -14,7 +14,7 @@ import type { DiscoverServices } from '../build_services'; const rootPath = '#/'; const getRootPath = ({ history }: DiscoverServices) => { - const { profile } = getProfile(history().location.pathname); + const { profile } = getProfile(history.location.pathname); return profile ? addProfile(rootPath, profile) : rootPath; }; diff --git a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts index 3c508f76cfe4..e4a9a3edf6f6 100644 --- a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts +++ b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.test.ts @@ -7,7 +7,7 @@ */ import { AppUpdater } from '@kbn/core/public'; import { BehaviorSubject, Observable } from 'rxjs'; -import { coreMock } from '@kbn/core/public/mocks'; +import { coreMock, scopedHistoryMock } from '@kbn/core/public/mocks'; import { DiscoverSetupPlugins } from '../plugin'; import { initializeKbnUrlTracking } from './initialize_kbn_url_tracking'; @@ -20,12 +20,13 @@ describe('initializeKbnUrlTracking', () => { }, }, } as DiscoverSetupPlugins; - const result = initializeKbnUrlTracking( - '', - coreMock.createSetup(), - new BehaviorSubject(() => ({})), - pluginsSetup - ); + const result = initializeKbnUrlTracking({ + baseUrl: '', + core: coreMock.createSetup(), + navLinkUpdater$: new BehaviorSubject(() => ({})), + plugins: pluginsSetup, + getScopedHistory: () => scopedHistoryMock.create(), + }); expect(result).toMatchInlineSnapshot(` Object { "appMounted": [Function], diff --git a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts index 4fdb1fa9742c..8ec6a0f0dfa3 100644 --- a/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts +++ b/src/plugins/discover/public/utils/initialize_kbn_url_tracking.ts @@ -5,40 +5,45 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { AppUpdater, CoreSetup } from '@kbn/core/public'; +import { AppUpdater, CoreSetup, ScopedHistory } from '@kbn/core/public'; import type { BehaviorSubject } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { createGetterSetter, createKbnUrlTracker } from '@kbn/kibana-utils-plugin/public'; +import { createKbnUrlTracker } from '@kbn/kibana-utils-plugin/public'; import { replaceUrlHashQuery } from '@kbn/kibana-utils-plugin/common'; import { isFilterPinned } from '@kbn/es-query'; -import { getScopedHistory } from '../kibana_services'; import { SEARCH_SESSION_ID_QUERY_PARAM } from '../constants'; import type { DiscoverSetupPlugins } from '../plugin'; -/** - * Store the setting of enabling / disabling url - * it's should be disabled for ad-hoc data views to omit error messages - * - When you've added an ad hoc data view in Discover - * - Continued your work in different parts of Kibana - * - You've closed the Kibana tab - */ -export const [getUrlTracking, setUrlTracking] = createGetterSetter<{ - enabled: boolean; -}>('urlTrackingEnabled'); /** * It creates the kbn url tracker for Discover to listens to history changes and optionally to global state * changes and updates the nav link url of to point to the last visited page */ -export function initializeKbnUrlTracking( - baseUrl: string, - core: CoreSetup, - navLinkUpdater$: BehaviorSubject, - plugins: DiscoverSetupPlugins -) { - setUrlTracking({ enabled: true }); +export function initializeKbnUrlTracking({ + baseUrl, + core, + navLinkUpdater$, + plugins, + getScopedHistory, +}: { + baseUrl: string; + core: CoreSetup; + navLinkUpdater$: BehaviorSubject; + plugins: DiscoverSetupPlugins; + getScopedHistory: () => ScopedHistory; +}) { + /** + * Store the setting of enabling / disabling url + * it's should be disabled for ad-hoc data views to omit error messages + * - When you've added an ad hoc data view in Discover + * - Continued your work in different parts of Kibana + * - You've closed the Kibana tab + */ + let urlTrackingEnabled = true; + const setTrackingEnabled = (value: boolean) => { - setUrlTracking({ enabled: value }); + urlTrackingEnabled = value; }; + const { appMounted, appUnMounted, @@ -70,7 +75,7 @@ export function initializeKbnUrlTracking( }, ], shouldTrackUrlUpdate: () => { - return getUrlTracking().enabled; + return urlTrackingEnabled; }, onBeforeNavLinkSaved: (newNavLink: string) => { // Do not save SEARCH_SESSION_ID into nav link, because of possible edge cases @@ -86,6 +91,7 @@ export function initializeKbnUrlTracking( return newNavLink; }, }); + return { appMounted, appUnMounted, diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index 3ca07c8ac348..4e6213e74579 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -60,7 +60,6 @@ "@kbn/core-saved-objects-api-server", "@kbn/cell-actions", "@kbn/shared-ux-utility", - "@kbn/core-application-browser", "@kbn/core-saved-objects-server", "@kbn/discover-utils", "@kbn/search-errors", diff --git a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx index a407fb025e2c..b0bdcdbf6a91 100644 --- a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx +++ b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx @@ -159,7 +159,7 @@ export const AddPanelFlyout = ({ return item.managed ? i18n.translate('embeddableApi.addPanel.managedPanelTooltip', { defaultMessage: - 'This panel is managed by Elastic. It can be added but will be unlinked from the library.', + 'Elastic manages this panel. Adding it to a dashboard unlinks it from the library.', }) : undefined; }} diff --git a/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx b/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx index e98acc44e61e..01a63f6171d9 100644 --- a/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx +++ b/src/plugins/embeddable/public/embeddable_panel/embeddable_panel.tsx @@ -10,17 +10,21 @@ import { css } from '@emotion/react'; import { PresentationPanel } from '@kbn/presentation-panel-plugin/public'; import { PanelCompatibleComponent } from '@kbn/presentation-panel-plugin/public/panel_component/types'; import { isPromise } from '@kbn/std'; -import React, { ReactNode, useEffect, useImperativeHandle, useMemo, useState } from 'react'; +import React, { ReactNode, useEffect, useImperativeHandle, useMemo, useState, useRef } from 'react'; import { untilPluginStartServicesReady } from '../kibana_services'; import { EmbeddablePanelProps } from './types'; const getComponentFromEmbeddable = async ( - embeddable: EmbeddablePanelProps['embeddable'] -): Promise => { + embeddable: EmbeddablePanelProps['embeddable'], + isMounted: () => boolean +): Promise => { const startServicesPromise = untilPluginStartServicesReady(); const embeddablePromise = typeof embeddable === 'function' ? embeddable() : Promise.resolve(embeddable); const [, unwrappedEmbeddable] = await Promise.all([startServicesPromise, embeddablePromise]); + if (!isMounted()) { + return null; + } if (unwrappedEmbeddable.parent) { await unwrappedEmbeddable.parent.untilEmbeddableLoaded(unwrappedEmbeddable.id); } @@ -55,9 +59,33 @@ const getComponentFromEmbeddable = async ( /** * Loads and renders a legacy embeddable. + * + * Ancestry chain must use 'key' attribute to reset DOM and state when embeddable changes + * For example */ export const EmbeddablePanel = (props: EmbeddablePanelProps) => { + // can not use useMountedState + // 1. useMountedState defaults mountedRef to false and sets mountedRef to true in useEffect + // 2. embeddable can be an object or a function that returns a promise + // 3. when embeddable is an object, Promise.resolve(embeddable) returns before + // useMountedState useEffect is called and thus isMounted() returns false when component has not been unmounted + const mountedRef = useRef(true); + useEffect(() => { + return () => { + mountedRef.current = false; + }; + }, []); + const isMounted = () => { + return mountedRef.current; + }; const { embeddable, ...passThroughProps } = props; - const componentPromise = useMemo(() => getComponentFromEmbeddable(embeddable), [embeddable]); + const componentPromise = useMemo( + () => getComponentFromEmbeddable(embeddable, isMounted), + // Ancestry chain is expected to use 'key' attribute to reset DOM and state + // when embeddable needs to be re-loaded + // empty array is consistent with PresentationPanel useAsync dependency check + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); return ; }; diff --git a/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx b/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx index 561fefe8d1ec..afc7714ea022 100644 --- a/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx +++ b/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx @@ -36,6 +36,8 @@ export const PresentationPanel = < ]); const Panel = panelModule.PresentationPanelInternal; return { Panel, unwrappedComponent }; + // Ancestry chain is expected to use 'key' attribute to reset DOM and state + // when unwrappedComponent needs to be re-loaded }, []); if (error || (!loading && (!value?.Panel || !value?.unwrappedComponent))) { diff --git a/src/plugins/presentation_panel/public/panel_component/types.ts b/src/plugins/presentation_panel/public/panel_component/types.ts index 654626e5959d..aaee39d43939 100644 --- a/src/plugins/presentation_panel/public/panel_component/types.ts +++ b/src/plugins/presentation_panel/public/panel_component/types.ts @@ -77,5 +77,5 @@ export type PresentationPanelProps< ApiType extends DefaultPresentationPanelApi = DefaultPresentationPanelApi, PropsType extends {} = {} > = Omit, 'Component'> & { - Component: MaybePromise>; + Component: MaybePromise | null>; }; diff --git a/src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx b/src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx index be0e6ef1054f..7cb462a5f1de 100644 --- a/src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx +++ b/src/plugins/presentation_util/public/components/floating_actions/floating_actions.tsx @@ -5,15 +5,15 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import React, { FC, ReactElement, useEffect, useState } from 'react'; import classNames from 'classnames'; +import React, { FC, ReactElement, useEffect, useState } from 'react'; import { - type ViewMode, - type IEmbeddable, - type EmbeddableInput, panelHoverTrigger, PANEL_HOVER_TRIGGER, + type EmbeddableInput, + type IEmbeddable, + type ViewMode, } from '@kbn/embeddable-plugin/public'; import { Action } from '@kbn/ui-actions-plugin/public'; @@ -41,13 +41,13 @@ export const FloatingActions: FC = ({ const { uiActions: { getTriggerCompatibleActions }, } = pluginServices.getServices(); - const [floatingActions, setFloatingActions] = useState(undefined); useEffect(() => { if (!embeddable) return; const getActions = async () => { + let mounted = true; const context = { embeddable, trigger: panelHoverTrigger, @@ -57,6 +57,8 @@ export const FloatingActions: FC = ({ return action.MenuItem !== undefined && (disabledActions ?? []).indexOf(action.id) === -1; }) .sort((a, b) => (a.order || 0) - (b.order || 0)); + + if (!mounted) return; if (actions.length > 0) { setFloatingActions( <> @@ -71,6 +73,9 @@ export const FloatingActions: FC = ({ } else { setFloatingActions(undefined); } + return () => { + mounted = false; + }; }; getActions(); @@ -80,7 +85,10 @@ export const FloatingActions: FC = ({
{children} {isEnabled && floatingActions && ( -
+
{floatingActions}
)} diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap index 39bd053c069b..06893662c845 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/table.test.tsx.snap @@ -26,20 +26,33 @@ exports[`Table prevents saved objects from being deleted 1`] = ` onChange={[Function]} toolsRight={ Array [ - + } + delay="regular" + display="inlineBlock" + position="top" > - - , + + + + , + } + delay="regular" + display="inlineBlock" + position="top" > - - , + + + + , { onChange={this.onChange} defaultQuery={this.props.initialQuery} toolsRight={[ - !managed && !hiddenType - ).length === 0 || !capabilities.savedObjectsManagement.delete - } - title={ - capabilities.savedObjectsManagement.delete - ? undefined - : i18n.translate('savedObjectsManagement.objectsTable.table.deleteButtonTitle', { - defaultMessage: 'Unable to delete saved objects', - }) + } - data-test-subj="savedObjectsManagementDelete" > - - , + !managed && !hiddenType + ).length === 0 || !capabilities.savedObjectsManagement.delete + } + title={ + capabilities.savedObjectsManagement.delete + ? undefined + : i18n.translate( + 'savedObjectsManagement.objectsTable.table.deleteButtonTitle', + { + defaultMessage: 'Unable to delete saved objects', + } + ) + } + data-test-subj="savedObjectsManagementDelete" + > + + + ,
"`; -exports[`VisLegend Component Legend open should match the snapshot 1`] = `"
"`; +exports[`VisLegend Component Legend open should match the snapshot 1`] = `"
"`; diff --git a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx index 2efe612e433c..10f2c26de417 100644 --- a/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx +++ b/src/plugins/visualizations/public/actions/edit_in_lens_action.tsx @@ -6,31 +6,41 @@ * Side Public License, v 1. */ -import React from 'react'; -import { take } from 'rxjs/operators'; -import { EuiFlexGroup, EuiFlexItem, EuiBadge } from '@elastic/eui'; +import { EuiBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { METRIC_TYPE } from '@kbn/analytics'; -import { ActionExecutionContext } from '@kbn/ui-actions-plugin/public'; import { TimefilterContract } from '@kbn/data-plugin/public'; +import { ViewMode } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; -import { IEmbeddable, ViewMode } from '@kbn/embeddable-plugin/public'; +import { + apiCanAccessViewMode, + apiHasUniqueId, + CanAccessViewMode, + EmbeddableApiContext, + getInheritedViewMode, + HasUniqueId, + PublishesLocalUnifiedSearch, + PublishesPanelDescription, + PublishesPanelTitle, +} from '@kbn/presentation-publishing'; import { Action } from '@kbn/ui-actions-plugin/public'; -import { VisualizeEmbeddable } from '../embeddable'; -import { DASHBOARD_VISUALIZATION_PANEL_TRIGGER } from '../triggers'; +import React from 'react'; +import { take } from 'rxjs/operators'; +import { apiHasVisualizeConfig, HasVisualizeConfig } from '../embeddable'; +import { + apiHasExpressionVariables, + HasExpressionVariables, +} from '../embeddable/interfaces/has_expression_variables'; import { - getUiActions, getApplication, + getCapabilities, getEmbeddable, + getUiActions, getUsageCollection, - getCapabilities, } from '../services'; +import { DASHBOARD_VISUALIZATION_PANEL_TRIGGER } from '../triggers'; export const ACTION_EDIT_IN_LENS = 'ACTION_EDIT_IN_LENS'; -export interface EditInLensContext { - embeddable: IEmbeddable; -} - const displayName = i18n.translate('visualizations.actions.editInLens.displayName', { defaultMessage: 'Convert to Lens', }); @@ -50,11 +60,20 @@ const MenuItem: React.FC = () => { ); }; -const isVisualizeEmbeddable = (embeddable: IEmbeddable): embeddable is VisualizeEmbeddable => { - return 'getVis' in embeddable; -}; +type EditInLensActionApi = HasUniqueId & + HasVisualizeConfig & + CanAccessViewMode & + Partial< + PublishesLocalUnifiedSearch & + HasExpressionVariables & + PublishesPanelTitle & + PublishesPanelDescription + >; + +const compatibilityCheck = (api: EmbeddableApiContext['embeddable']): api is EditInLensActionApi => + apiHasUniqueId(api) && apiCanAccessViewMode(api) && apiHasVisualizeConfig(api); -export class EditInLensAction implements Action { +export class EditInLensAction implements Action { public id = ACTION_EDIT_IN_LENS; public readonly type = ACTION_EDIT_IN_LENS; public order = 49; @@ -63,7 +82,7 @@ export class EditInLensAction implements Action { constructor(private readonly timefilter: TimefilterContract) {} - async execute(context: ActionExecutionContext): Promise { + async execute(context: EmbeddableApiContext): Promise { const application = getApplication(); if (application?.currentAppId$) { application.currentAppId$ @@ -73,66 +92,73 @@ export class EditInLensAction implements Action { getEmbeddable().getStateTransfer().isTransferInProgress = false; }); } + const { embeddable } = context; - if (isVisualizeEmbeddable(embeddable)) { - const vis = embeddable.getVis(); - const navigateToLensConfig = await vis.type.navigateToLens?.(vis, this.timefilter); - // Filters and query set on the visualization level - const visFilters = vis.data.searchSource?.getField('filter'); - const visQuery = vis.data.searchSource?.getField('query'); - const parentSearchSource = vis.data.searchSource?.getParent(); - const searchFilters = parentSearchSource?.getField('filter') ?? visFilters; - const searchQuery = parentSearchSource?.getField('query') ?? visQuery; - const title = vis.title || embeddable.getOutput().title; - const updatedWithMeta = { - ...navigateToLensConfig, - title, - visTypeTitle: vis.type.title, - embeddableId: embeddable.id, - originatingApp: this.currentAppId, - searchFilters, - searchQuery, - isEmbeddable: true, - description: vis.description || embeddable.getOutput().description, - panelTimeRange: embeddable.getExplicitInput()?.timeRange, - }; - if (navigateToLensConfig) { - if (this.currentAppId) { - getUsageCollection().reportUiCounter( - this.currentAppId, - METRIC_TYPE.CLICK, - ACTION_EDIT_IN_LENS - ); - } - getEmbeddable().getStateTransfer().isTransferInProgress = true; - getUiActions().getTrigger(DASHBOARD_VISUALIZATION_PANEL_TRIGGER).exec(updatedWithMeta); + if (!compatibilityCheck(embeddable)) return; + + const vis = embeddable.getVis(); + const navigateToLensConfig = await vis.type.navigateToLens?.(vis, this.timefilter); + // Filters and query set on the visualization level + const visFilters = vis.data.searchSource?.getField('filter'); + const visQuery = vis.data.searchSource?.getField('query'); + const parentSearchSource = vis.data.searchSource?.getParent(); + const searchFilters = parentSearchSource?.getField('filter') ?? visFilters; + const searchQuery = parentSearchSource?.getField('query') ?? visQuery; + const title = vis.title || embeddable.panelTitle?.getValue(); + const panelTimeRange = embeddable.localTimeRange?.getValue(); + const updatedWithMeta = { + ...navigateToLensConfig, + title, + visTypeTitle: vis.type.title, + embeddableId: embeddable.uuid, + originatingApp: this.currentAppId, + searchFilters, + searchQuery, + isEmbeddable: true, + description: vis.description || embeddable.panelDescription?.getValue(), + panelTimeRange, + }; + if (navigateToLensConfig) { + if (this.currentAppId) { + getUsageCollection().reportUiCounter( + this.currentAppId, + METRIC_TYPE.CLICK, + ACTION_EDIT_IN_LENS + ); } + getEmbeddable().getStateTransfer().isTransferInProgress = true; + getUiActions().getTrigger(DASHBOARD_VISUALIZATION_PANEL_TRIGGER).exec(updatedWithMeta); } } - getDisplayName(context: ActionExecutionContext): string { + getDisplayName(): string { return displayName; } MenuItem = MenuItem; - getIconType(context: ActionExecutionContext): string | undefined { + getIconType(): string { return 'merge'; } - async isCompatible(context: ActionExecutionContext) { + async isCompatible(context: EmbeddableApiContext) { const { embeddable } = context; - const { visualize } = getCapabilities(); - if (!isVisualizeEmbeddable(embeddable) || !visualize.show) { + if (!compatibilityCheck(embeddable) || getInheritedViewMode(embeddable) !== ViewMode.EDIT) return false; - } + const vis = embeddable.getVis(); - if (!vis) { + const { visualize } = getCapabilities(); + if (!vis || !visualize.show) { return false; } - const canNavigateToLens = - embeddable.getExpressionVariables?.()?.canNavigateToLens ?? - (await vis.type.navigateToLens?.(vis, this.timefilter)); - return Boolean(canNavigateToLens && embeddable.getInput().viewMode === ViewMode.EDIT); + + // determine whether navigation to lens is available + if ( + apiHasExpressionVariables(embeddable) && + embeddable.getExpressionVariables()?.canNavigateToLens + ) { + return true; + } + return Boolean(await vis.type.navigateToLens?.(vis, this.timefilter)); } } diff --git a/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts b/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts new file mode 100644 index 000000000000..1a26eafc9734 --- /dev/null +++ b/src/plugins/visualizations/public/embeddable/interfaces/has_expression_variables.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { type HasType, apiIsOfType } from '@kbn/presentation-publishing'; +import { Observable } from 'rxjs'; + +type ExpressionVariables = Record | undefined; + +export type HasExpressionVariables = HasType<'visualization'> & { + getExpressionVariables: () => ExpressionVariables; + getExpressionVariables$: () => Observable; +}; + +export const apiHasExpressionVariables = (api: unknown): api is HasExpressionVariables => { + const maybeHasExpressionVariables = api as HasExpressionVariables; + return Boolean( + api && + apiIsOfType(api, 'visualization') && + maybeHasExpressionVariables.getExpressionVariables && + typeof maybeHasExpressionVariables.getExpressionVariables === 'function' && + maybeHasExpressionVariables.getExpressionVariables$ && + typeof maybeHasExpressionVariables.getExpressionVariables$ === 'function' + ); +}; diff --git a/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx b/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx index 267b9baf6adf..1bd4a14c2e7d 100644 --- a/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx +++ b/src/plugins/visualizations/public/visualize_app/components/visualize_listing.tsx @@ -269,7 +269,7 @@ const useTableListViewProps = ( reason: managed ? i18n.translate('visualizations.managedLegacyVisMessage', { defaultMessage: - 'This visualization is managed by Elastic and cannot be changed.', + 'Elastic manages this visualisation. Changing it is not possible.', }) : i18n.translate('visualizations.readOnlyLegacyVisMessage', { defaultMessage: diff --git a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx index 955c3f611176..6cbe7864031a 100644 --- a/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx +++ b/src/plugins/visualizations/public/visualize_app/utils/get_top_nav_config.tsx @@ -609,7 +609,7 @@ export const getTopNavConfig = ( savedVis.managed ? i18n.translate('visualizations.topNavMenu.mustCopyOnSave', { defaultMessage: - 'This visualization is managed by Elastic. Changes here must be saved to a new visualization.', + 'Elastic manages this visualization. Save any changes to a new visualization.', }) : undefined } diff --git a/test/api_integration/apis/saved_objects/bulk_get.ts b/test/api_integration/apis/saved_objects/bulk_get.ts index 62f95c718ab1..d9a6dfc2f743 100644 --- a/test/api_integration/apis/saved_objects/bulk_get.ts +++ b/test/api_integration/apis/saved_objects/bulk_get.ts @@ -230,10 +230,10 @@ export default function ({ getService }: FtrProviderContext) { type: 'dashboard', namespaces: ['default'], migrationVersion: { - dashboard: '8.9.0', + dashboard: '10.2.0', }, coreMigrationVersion: '8.8.0', - typeMigrationVersion: '8.9.0', + typeMigrationVersion: '10.2.0', updated_at: '2015-01-01T00:00:00.000Z', created_at: '2015-01-01T00:00:00.000Z', version: resp.body.saved_objects[3].version, diff --git a/test/api_integration/apis/saved_objects/get.ts b/test/api_integration/apis/saved_objects/get.ts index 7a1b272b515f..a399e095da0a 100644 --- a/test/api_integration/apis/saved_objects/get.ts +++ b/test/api_integration/apis/saved_objects/get.ts @@ -80,10 +80,10 @@ export default function ({ getService }: FtrProviderContext) { type: 'dashboard', namespaces: ['default'], migrationVersion: { - dashboard: '8.9.0', + dashboard: '10.2.0', }, coreMigrationVersion: '8.8.0', - typeMigrationVersion: '8.9.0', + typeMigrationVersion: '10.2.0', updated_at: resp.body.updated_at, created_at: resp.body.created_at, version: resp.body.version, diff --git a/test/functional/apps/dashboard/group5/embed_mode.ts b/test/functional/apps/dashboard/group5/embed_mode.ts index 25eabca77f71..d8ff2f42a3a3 100644 --- a/test/functional/apps/dashboard/group5/embed_mode.ts +++ b/test/functional/apps/dashboard/group5/embed_mode.ts @@ -24,7 +24,8 @@ export default function ({ const screenshot = getService('screenshots'); const log = getService('log'); - describe('embed mode', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('embed mode', () => { /* * Note: The baseline images used in all of the screenshot tests in this test suite were taken directly from the CI environment * in order to overcome a known issue with the pixel density of fonts being significantly different when running locally versus diff --git a/test/functional/apps/dashboard_elements/controls/common/control_group_apply_button.ts b/test/functional/apps/dashboard_elements/controls/common/control_group_apply_button.ts new file mode 100644 index 000000000000..f07f7206b628 --- /dev/null +++ b/test/functional/apps/dashboard_elements/controls/common/control_group_apply_button.ts @@ -0,0 +1,223 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OPTIONS_LIST_CONTROL, RANGE_SLIDER_CONTROL } from '@kbn/controls-plugin/common'; +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const pieChart = getService('pieChart'); + const elasticChart = getService('elasticChart'); + const testSubjects = getService('testSubjects'); + const dashboardAddPanel = getService('dashboardAddPanel'); + + const { dashboard, header, dashboardControls, timePicker } = getPageObjects([ + 'dashboardControls', + 'timePicker', + 'dashboard', + 'header', + ]); + + describe('Dashboard control group apply button', () => { + let controlIds: string[]; + + before(async () => { + await dashboard.navigateToApp(); + await dashboard.gotoDashboardLandingPage(); + await dashboard.clickNewDashboard(); + await timePicker.setDefaultDataRange(); + + await elasticChart.setNewChartUiDebugFlag(); + await dashboardAddPanel.addVisualization('Rendering-Test:-animal-sounds-pie'); + + // populate an initial set of controls and get their ids. + await dashboardControls.createControl({ + controlType: OPTIONS_LIST_CONTROL, + dataViewTitle: 'animals-*', + fieldName: 'animal.keyword', + title: 'Animal', + }); + await dashboardControls.createControl({ + controlType: RANGE_SLIDER_CONTROL, + dataViewTitle: 'animals-*', + fieldName: 'weightLbs', + title: 'Animal Name', + }); + await dashboardControls.createTimeSliderControl(); + controlIds = await dashboardControls.getAllControlIds(); + + // save the dashboard + await dashboard.saveDashboard('Test Control Group Apply Button', { exitFromEditMode: false }); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + await dashboard.expectMissingUnsavedChangesBadge(); + }); + + it('able to set apply button setting', async () => { + await dashboardControls.updateShowApplyButtonSetting(true); + await testSubjects.existOrFail('controlGroup--applyFiltersButton'); + await dashboard.expectUnsavedChangesBadge(); + + await dashboard.clickQuickSave(); + await header.waitUntilLoadingHasFinished(); + await dashboard.expectMissingUnsavedChangesBadge(); + }); + + it('renabling auto-apply forces filters to be published', async () => { + const optionsListId = controlIds[0]; + await dashboardControls.verifyApplyButtonEnabled(false); + await dashboardControls.optionsListOpenPopover(optionsListId); + await dashboardControls.optionsListPopoverSelectOption('cat'); + await dashboardControls.optionsListEnsurePopoverIsClosed(optionsListId); + await header.waitUntilLoadingHasFinished(); + await dashboardControls.verifyApplyButtonEnabled(); + + await dashboardControls.updateShowApplyButtonSetting(false); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + await dashboard.expectUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(4); + await dashboard.clickDiscardChanges(); + }); + + describe('options list selections', () => { + let optionsListId: string; + + before(async () => { + optionsListId = controlIds[0]; + }); + + it('making selection enables apply button', async () => { + await dashboardControls.verifyApplyButtonEnabled(false); + await dashboardControls.optionsListOpenPopover(optionsListId); + await dashboardControls.optionsListPopoverSelectOption('cat'); + await dashboardControls.optionsListEnsurePopoverIsClosed(optionsListId); + await header.waitUntilLoadingHasFinished(); + await dashboardControls.verifyApplyButtonEnabled(); + }); + + it('waits to apply filters until button is pressed', async () => { + await dashboard.expectMissingUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(5); + + await dashboardControls.clickApplyButton(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + await dashboard.expectUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(4); + }); + + it('hitting dashboard resets selections + unapplies filters', async () => { + await dashboardControls.optionsListOpenPopover(optionsListId); + await dashboardControls.optionsListPopoverSelectOption('dog'); + await dashboardControls.optionsListEnsurePopoverIsClosed(optionsListId); + await header.waitUntilLoadingHasFinished(); + await dashboardControls.verifyApplyButtonEnabled(); + + await dashboard.clickDiscardChanges(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(5); + await dashboardControls.verifyApplyButtonEnabled(false); + expect(await dashboardControls.optionsListGetSelectionsString(optionsListId)).to.be('Any'); + }); + }); + + describe('range slider selections', () => { + let rangeSliderId: string; + + before(async () => { + rangeSliderId = controlIds[1]; + }); + + it('making selection enables apply button', async () => { + await dashboardControls.verifyApplyButtonEnabled(false); + await dashboardControls.rangeSliderSetUpperBound(rangeSliderId, '30'); + await dashboardControls.verifyApplyButtonEnabled(); + }); + + it('waits to apply filters until apply button is pressed', async () => { + await dashboard.expectMissingUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(5); + + await dashboardControls.clickApplyButton(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + await dashboard.expectUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(4); + }); + + it('hitting dashboard resets selections + unapplies filters', async () => { + await dashboardControls.rangeSliderSetLowerBound(rangeSliderId, '15'); + await dashboardControls.rangeSliderEnsurePopoverIsClosed(rangeSliderId); + await header.waitUntilLoadingHasFinished(); + await dashboardControls.verifyApplyButtonEnabled(); + + await dashboard.clickDiscardChanges(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(5); + await dashboardControls.verifyApplyButtonEnabled(false); + expect( + await dashboardControls.rangeSliderGetLowerBoundAttribute(rangeSliderId, 'value') + ).to.be(''); + expect( + await dashboardControls.rangeSliderGetUpperBoundAttribute(rangeSliderId, 'value') + ).to.be(''); + }); + }); + + describe('time slider selections', () => { + let valueBefore: string; + + before(async () => { + valueBefore = await dashboardControls.getTimeSliceFromTimeSlider(); + }); + + it('making selection enables apply button', async () => { + await dashboardControls.verifyApplyButtonEnabled(false); + await dashboardControls.gotoNextTimeSlice(); + await dashboardControls.gotoNextTimeSlice(); // go to an empty timeslice + await header.waitUntilLoadingHasFinished(); + await dashboardControls.verifyApplyButtonEnabled(); + }); + + it('waits to apply timeslice until apply button is pressed', async () => { + await dashboard.expectMissingUnsavedChangesBadge(); + expect(await pieChart.getPieSliceCount()).to.be(5); + + await dashboardControls.clickApplyButton(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + await dashboard.expectUnsavedChangesBadge(); + pieChart.expectEmptyPieChart(); + }); + + it('hitting dashboard resets selections + unapplies timeslice', async () => { + await dashboardControls.gotoNextTimeSlice(); + await dashboardControls.verifyApplyButtonEnabled(); + + await dashboard.clickDiscardChanges(); + await header.waitUntilLoadingHasFinished(); + await dashboard.waitForRenderComplete(); + + expect(await pieChart.getPieSliceCount()).to.be(5); + await dashboardControls.verifyApplyButtonEnabled(false); + const valueNow = await dashboardControls.getTimeSliceFromTimeSlider(); + expect(valueNow).to.equal(valueBefore); + }); + }); + }); +} diff --git a/test/functional/apps/dashboard_elements/controls/common/index.ts b/test/functional/apps/dashboard_elements/controls/common/index.ts index 74e64052f166..c9098b1a2c68 100644 --- a/test/functional/apps/dashboard_elements/controls/common/index.ts +++ b/test/functional/apps/dashboard_elements/controls/common/index.ts @@ -44,6 +44,7 @@ export default function ({ loadTestFile, getService, getPageObjects }: FtrProvid loadTestFile(require.resolve('./range_slider')); loadTestFile(require.resolve('./time_slider')); loadTestFile(require.resolve('./control_group_chaining')); + loadTestFile(require.resolve('./control_group_apply_button')); loadTestFile(require.resolve('./replace_controls')); }); } diff --git a/test/functional/apps/discover/group1/_discover.ts b/test/functional/apps/discover/group1/_discover.ts index c931187250cc..3885230c861c 100644 --- a/test/functional/apps/discover/group1/_discover.ts +++ b/test/functional/apps/discover/group1/_discover.ts @@ -31,7 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', }; - describe('discover test', function describeIndexTests() { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('discover test', function describeIndexTests() { before(async function () { log.debug('load kibana index with default index pattern'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); diff --git a/test/functional/apps/discover/group1/_url_state.ts b/test/functional/apps/discover/group1/_url_state.ts index e97ac332e8b6..95ef40a58698 100644 --- a/test/functional/apps/discover/group1/_url_state.ts +++ b/test/functional/apps/discover/group1/_url_state.ts @@ -35,7 +35,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { hideAnnouncements: true, }; - describe('discover URL state', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('discover URL state', () => { before(async function () { log.debug('load kibana index with default index pattern'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); diff --git a/test/functional/apps/visualize/group3/_annotation_listing.ts b/test/functional/apps/visualize/group3/_annotation_listing.ts index 53ae9d48e2b5..f58f2fd38602 100644 --- a/test/functional/apps/visualize/group3/_annotation_listing.ts +++ b/test/functional/apps/visualize/group3/_annotation_listing.ts @@ -50,8 +50,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('by text', () => { it('matches on the first word', async function () { - await listingTable.searchForItemWithName('search'); - await listingTable.expectItemsCount('eventAnnotation', 1); + await retry.try(async () => { + await listingTable.searchForItemWithName('search'); + await listingTable.expectItemsCount('eventAnnotation', 1); + }); }); it('matches the second word', async function () { diff --git a/test/functional/page_objects/dashboard_page.ts b/test/functional/page_objects/dashboard_page.ts index f5acc43f8827..01fe52270cc8 100644 --- a/test/functional/page_objects/dashboard_page.ts +++ b/test/functional/page_objects/dashboard_page.ts @@ -348,12 +348,14 @@ export class DashboardPageObject extends FtrService { } public async expectUnsavedChangesBadge() { + this.log.debug('Expect unsaved changes badge to be present'); await this.retry.try(async () => { await this.testSubjects.existOrFail('dashboardUnsavedChangesBadge'); }); } public async expectMissingUnsavedChangesBadge() { + this.log.debug('Expect there to be no unsaved changes badge'); await this.retry.try(async () => { await this.testSubjects.missingOrFail('dashboardUnsavedChangesBadge'); }); diff --git a/test/functional/page_objects/dashboard_page_controls.ts b/test/functional/page_objects/dashboard_page_controls.ts index 8f7a64260c37..119b347c2ca6 100644 --- a/test/functional/page_objects/dashboard_page_controls.ts +++ b/test/functional/page_objects/dashboard_page_controls.ts @@ -203,6 +203,34 @@ export class DashboardPageControls extends FtrService { await this.testSubjects.click('control-group-editor-save'); } + public async updateShowApplyButtonSetting(showApplyButton: boolean) { + this.log.debug(`Update show apply button setting to ${showApplyButton}`); + await this.openControlGroupSettingsFlyout(); + // the "showApplyButton" toggle has in inverse relationship with the `showApplyButton` seting - so, negate `showApplyButton` + await this.setSwitchState(!showApplyButton, 'control-group-auto-apply-selections'); + await this.testSubjects.click('control-group-editor-save'); + } + + public async clickApplyButton() { + this.log.debug('Clicking the apply button'); + await this.verifyApplyButtonEnabled(); + + const applyButton = await this.testSubjects.find('controlGroup--applyFiltersButton'); + await applyButton.click(); + + await this.verifyApplyButtonEnabled(false); + } + + public async verifyApplyButtonEnabled(enabled: boolean = true) { + this.log.debug( + `Checking that control group apply button is ${enabled ? 'enabled' : 'not enabled'}` + ); + const applyButton = await this.testSubjects.find('controlGroup--applyFiltersButton'); + await this.retry.try(async () => { + expect(await applyButton.isEnabled()).to.be(enabled); + }); + } + /* ----------------------------------------------------------- Individual controls functions ----------------------------------------------------------- */ @@ -670,6 +698,10 @@ export class DashboardPageControls extends FtrService { `range-slider-control-${controlId} > rangeSlider__lowerBoundFieldNumber`, value ); + await this.testSubjects.pressEnter( + // force the change without waiting for the debounce + `range-slider-control-${controlId} > rangeSlider__lowerBoundFieldNumber` + ); expect(await this.rangeSliderGetLowerBoundAttribute(controlId, 'value')).to.be(value); }); } @@ -681,6 +713,10 @@ export class DashboardPageControls extends FtrService { `range-slider-control-${controlId} > rangeSlider__upperBoundFieldNumber`, value ); + await this.testSubjects.pressEnter( + // force the change without waiting for the debounce + `range-slider-control-${controlId} > rangeSlider__upperBoundFieldNumber` + ); expect(await this.rangeSliderGetUpperBoundAttribute(controlId, 'value')).to.be(value); }); } diff --git a/test/functional/page_objects/home_page.ts b/test/functional/page_objects/home_page.ts index 1901f1207343..4225f52b1699 100644 --- a/test/functional/page_objects/home_page.ts +++ b/test/functional/page_objects/home_page.ts @@ -48,9 +48,12 @@ export class HomePageObject extends FtrService { async isSampleDataSetInstalled(id: string) { const sampleDataCard = await this.testSubjects.find(`sampleDataSetCard${id}`); + const installStatus = await ( + await sampleDataCard.findByCssSelector('[data-status]') + ).getAttribute('data-status'); const deleteButton = await sampleDataCard.findAllByTestSubject(`removeSampleDataSet${id}`); this.log.debug(`Sample data installed: ${deleteButton.length > 0}`); - return deleteButton.length > 0; + return installStatus === 'installed' && deleteButton.length > 0; } async isWelcomeInterstitialDisplayed() { diff --git a/test/functional/services/index.ts b/test/functional/services/index.ts index 1966755f157e..43a588cdf938 100644 --- a/test/functional/services/index.ts +++ b/test/functional/services/index.ts @@ -17,6 +17,7 @@ import { SnapshotsService, } from './common'; import { ComboBoxService } from './combo_box'; +import { SelectableService } from './selectable'; import { DashboardAddPanelService, DashboardReplacePanelService, @@ -76,6 +77,7 @@ export const services = { dashboardSettings: DashboardSettingsProvider, flyout: FlyoutService, comboBox: ComboBoxService, + selectable: SelectableService, dataGrid: DataGridService, embedding: EmbeddingService, renderable: RenderableService, diff --git a/test/functional/services/selectable.ts b/test/functional/services/selectable.ts new file mode 100644 index 000000000000..8dd347ace74a --- /dev/null +++ b/test/functional/services/selectable.ts @@ -0,0 +1,91 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { FtrService } from '../ftr_provider_context'; + +/** + * Wrapper around EuiSelectable to provide abstraction for selecting options + * + * @example + * ```tsx + * const button = ( + * + * {label} + * + * ); + * + * + * + * {listOptions} + * + * + * ``` + * + * // Select only options with text 'option1' and 'option2' + * ```typescript + * await selectableService.selectOnlyOptionsWithText('buttonTestId', 'selectableTestId', ['option1', 'option2']); + * ``` + */ +export class SelectableService extends FtrService { + private readonly log = this.ctx.getService('log'); + private readonly testSubjects = this.ctx.getService('testSubjects'); + private readonly common = this.ctx.getPageObject('common'); + + public async selectOnlyOptionsWithText( + buttonTestSubjectId: string, + selectableBodyTestSubjectId: string, + textsToSelect: string[] + ) { + this.log.debug( + `Selectable.selectOnlyOptionsWithText, buttonTestSubjectId: ${buttonTestSubjectId},` + + `selectableBodyTestSubjectId: ${selectableBodyTestSubjectId}, textsToSelect: ${textsToSelect}` + ); + + // Open the selectable + await this.testSubjects.click(buttonTestSubjectId); + await this.common.sleep(500); + + const selectableBodyContainer = await this.testSubjects.find(selectableBodyTestSubjectId); + const listContainer = await selectableBodyContainer.findByClassName('euiSelectableList'); + const optionListElements = await listContainer.findAllByCssSelector('li[role="option"]'); + + for (let i = 0; i < optionListElements.length; i++) { + const option = optionListElements[i]; + const isSelected = (await option.getAttribute('aria-checked')) === 'true'; + const textWrapper = await option.findByClassName('euiSelectableListItem__text'); + + // Use innerText as getVisibleText doesn't return deeply nested text + const innerText = await textWrapper.getAttribute('innerText'); + + // Replace screen reader and other Eui related text + const visibleText = innerText + .replace(screenReaderOptionText, '') + .replace('\n.', '') + .replace('.\n', '') + .trim(); + const doesOptionTextMatch = textsToSelect.some((text) => text === visibleText); + + if ((doesOptionTextMatch && !isSelected) || (!doesOptionTextMatch && isSelected)) { + await option.click(); + } + } + + // Close selectable + return this.testSubjects.click(buttonTestSubjectId); + } + + public async clearSelection(buttonTestSubjectId: string, selectableBodyTestSubjectId: string) { + return this.selectOnlyOptionsWithText(buttonTestSubjectId, selectableBodyTestSubjectId, []); + } +} + +const screenReaderOptionText = 'To check this option, press Enter.'; diff --git a/tsconfig.base.json b/tsconfig.base.json index 94bd00f22559..f0c0a36383b5 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1132,6 +1132,8 @@ "@kbn/notifications-plugin/*": ["x-pack/plugins/notifications/*"], "@kbn/object-versioning": ["packages/kbn-object-versioning"], "@kbn/object-versioning/*": ["packages/kbn-object-versioning/*"], + "@kbn/observability-ai-assistant-app-plugin": ["x-pack/plugins/observability_solution/observability_ai_assistant_app"], + "@kbn/observability-ai-assistant-app-plugin/*": ["x-pack/plugins/observability_solution/observability_ai_assistant_app/*"], "@kbn/observability-ai-assistant-plugin": ["x-pack/plugins/observability_solution/observability_ai_assistant"], "@kbn/observability-ai-assistant-plugin/*": ["x-pack/plugins/observability_solution/observability_ai_assistant/*"], "@kbn/observability-alert-details": ["x-pack/packages/observability/alert_details"], diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index b640b2ac0f8e..b3b25e47fc22 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -2,7 +2,10 @@ "prefix": "xpack", "paths": { "xpack.actions": "plugins/actions", - "xpack.aiops": ["packages/ml/aiops_components", "plugins/aiops"], + "xpack.aiops": [ + "packages/ml/aiops_components", + "plugins/aiops" + ], "xpack.alerting": "plugins/alerting", "xpack.eventLog": "plugins/event_log", "xpack.stackAlerts": "plugins/stack_alerts", @@ -33,9 +36,15 @@ "xpack.dataVisualizer": "plugins/data_visualizer", "xpack.exploratoryView": "plugins/observability_solution/exploratory_view", "xpack.fileUpload": "plugins/file_upload", - "xpack.globalSearch": ["plugins/global_search"], - "xpack.globalSearchBar": ["plugins/global_search_bar"], - "xpack.graph": ["plugins/graph"], + "xpack.globalSearch": [ + "plugins/global_search" + ], + "xpack.globalSearchBar": [ + "plugins/global_search_bar" + ], + "xpack.graph": [ + "plugins/graph" + ], "xpack.grokDebugger": "plugins/grokdebugger", "xpack.idxMgmt": "plugins/index_management", "xpack.indexLifecycleMgmt": "plugins/index_lifecycle_management", @@ -50,9 +59,13 @@ "xpack.licenseMgmt": "plugins/license_management", "xpack.licensing": "plugins/licensing", "xpack.lists": "plugins/lists", - "xpack.logstash": ["plugins/logstash"], + "xpack.logstash": [ + "plugins/logstash" + ], "xpack.main": "legacy/plugins/xpack_main", - "xpack.maps": ["plugins/maps"], + "xpack.maps": [ + "plugins/maps" + ], "xpack.metricsData": "plugins/metrics_data_access", "xpack.ml": [ "packages/ml/anomaly_utils", @@ -65,18 +78,31 @@ "packages/ml/ui_actions", "plugins/ml" ], - "xpack.monitoring": ["plugins/monitoring"], + "xpack.monitoring": [ + "plugins/monitoring" + ], "xpack.observability": "plugins/observability_solution/observability", - "xpack.observabilityAiAssistant": "plugins/observability_solution/observability_ai_assistant", + "xpack.observabilityAiAssistant": [ + "plugins/observability_solution/observability_ai_assistant", + "plugins/observability_solution/observability_ai_assistant_app" + ], "xpack.observabilityLogsExplorer": "plugins/observability_solution/observability_logs_explorer", "xpack.observability_onboarding": "plugins/observability_solution/observability_onboarding", "xpack.observabilityShared": "plugins/observability_solution/observability_shared", - "xpack.osquery": ["plugins/osquery"], + "xpack.osquery": [ + "plugins/osquery" + ], "xpack.painlessLab": "plugins/painless_lab", - "xpack.profiling": ["plugins/observability_solution/profiling"], + "xpack.profiling": [ + "plugins/observability_solution/profiling" + ], "xpack.remoteClusters": "plugins/remote_clusters", - "xpack.reporting": ["plugins/reporting"], - "xpack.rollupJobs": ["plugins/rollup"], + "xpack.reporting": [ + "plugins/reporting" + ], + "xpack.rollupJobs": [ + "plugins/rollup" + ], "xpack.runtimeFields": "plugins/runtime_fields", "xpack.screenshotting": "plugins/screenshotting", "xpack.searchProfiler": "plugins/searchprofiler", @@ -91,20 +117,30 @@ "xpack.sessionView": "plugins/session_view", "xpack.snapshotRestore": "plugins/snapshot_restore", "xpack.spaces": "plugins/spaces", - "xpack.savedObjectsTagging": ["plugins/saved_objects_tagging"], + "xpack.savedObjectsTagging": [ + "plugins/saved_objects_tagging" + ], "xpack.taskManager": "legacy/plugins/task_manager", "xpack.threatIntelligence": "plugins/threat_intelligence", "xpack.timelines": "plugins/timelines", "xpack.transform": "plugins/transform", "xpack.triggersActionsUI": "plugins/triggers_actions_ui", "xpack.upgradeAssistant": "plugins/upgrade_assistant", - "xpack.uptime": ["plugins/observability_solution/uptime"], - "xpack.synthetics": ["plugins/observability_solution/synthetics"], - "xpack.ux": ["plugins/observability_solution/ux"], + "xpack.uptime": [ + "plugins/observability_solution/uptime" + ], + "xpack.synthetics": [ + "plugins/observability_solution/synthetics" + ], + "xpack.ux": [ + "plugins/observability_solution/ux" + ], "xpack.urlDrilldown": "plugins/drilldowns/url_drilldown", "xpack.watcher": "plugins/watcher" }, - "exclude": ["examples"], + "exclude": [ + "examples" + ], "translations": [ "@kbn/translations-plugin/translations/zh-CN.json", "@kbn/translations-plugin/translations/ja-JP.json", diff --git a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap index 11624752650e..9b74e91c6eac 100644 --- a/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap +++ b/x-pack/plugins/actions/server/integration_tests/__snapshots__/connector_types.test.ts.snap @@ -10,7 +10,7 @@ Object { "presence": "optional", }, "keys": Object { - "apiUrl": Object { + "body": Object { "flags": Object { "error": [Function], }, @@ -24,9 +24,9 @@ Object { ], "type": "string", }, - "defaultModel": Object { + "model": Object { "flags": Object { - "default": "anthropic.claude-v2:1", + "default": [Function], "error": [Function], "presence": "optional", }, @@ -60,21 +60,7 @@ Object { "presence": "optional", }, "keys": Object { - "accessKey": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "secret": Object { + "dashboardId": Object { "flags": Object { "error": [Function], }, @@ -108,7 +94,7 @@ Object { "presence": "optional", }, "keys": Object { - "subAction": Object { + "body": Object { "flags": Object { "error": [Function], }, @@ -122,22 +108,21 @@ Object { ], "type": "string", }, - "subActionParams": Object { + "model": Object { "flags": Object { - "default": Object { - "special": "deep", - }, + "default": [Function], "error": [Function], "presence": "optional", - "unknown": true, }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - }, - "type": "object", + ], + "type": "string", }, }, "preferences": Object { @@ -149,7 +134,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .cases-webhook 1`] = ` +exports[`Connector type config checks detect connector type changes for: .bedrock 4`] = ` Object { "flags": Object { "default": Object { @@ -159,155 +144,64 @@ Object { "presence": "optional", }, "keys": Object { - "createCommentJson": Object { + "messages": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "items": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, + "flags": Object { + "default": Object { + "special": "deep", }, - "type": "any", + "error": [Function], + "presence": "optional", }, - }, - ], - "type": "alternatives", - }, - "createCommentMethod": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "default": "put", - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "allow": Array [ - "post", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, + "keys": Object { + "content": Object { + "flags": Object { + "error": [Function], }, - Object { - "schema": Object { - "allow": Array [ - "put", - ], - "flags": Object { - "error": [Function], - "only": true, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "type": "any", + "name": "custom", }, + ], + "type": "string", + }, + "role": Object { + "flags": Object { + "error": [Function], }, - Object { - "schema": Object { - "allow": Array [ - "patch", - ], - "flags": Object { - "error": [Function], - "only": true, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "type": "any", + "name": "custom", }, - }, - ], - "type": "alternatives", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "createCommentUrl": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], + ], + "type": "string", }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, + "preferences": Object { + "stripUnknown": Object { + "objects": false, }, - "type": "any", }, + "type": "object", }, ], - "type": "alternatives", + "type": "array", }, - "createIncidentJson": Object { + "model": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "rules": Array [ Object { @@ -319,71 +213,117 @@ Object { ], "type": "string", }, - "createIncidentMethod": Object { + "stopSequences": Object { "flags": Object { - "default": "post", + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ + "items": Array [ Object { - "schema": Object { - "allow": Array [ - "post", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "flags": Object { + "error": [Function], + "presence": "optional", }, - }, - Object { - "schema": Object { - "allow": Array [ - "put", - ], - "flags": Object { - "error": [Function], - "only": true, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - "type": "any", - }, + ], + "type": "string", }, ], - "type": "alternatives", + "type": "array", }, - "createIncidentResponseKey": Object { + "temperature": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "type": "number", }, - "createIncidentUrl": Object { - "flags": Object { + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .bedrock 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "messages": Object { + "flags": Object { "error": [Function], }, - "rules": Array [ + "items": Array [ Object { - "args": Object { - "method": [Function], + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", }, - "name": "custom", + "keys": Object { + "content": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "role": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", }, ], - "type": "string", + "type": "array", }, - "getIncidentResponseExternalTitleKey": Object { + "model": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "rules": Array [ Object { @@ -395,94 +335,60 @@ Object { ], "type": "string", }, - "getIncidentUrl": Object { + "stopSequences": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, - "rules": Array [ + "items": Array [ Object { - "args": Object { - "method": [Function], + "flags": Object { + "error": [Function], + "presence": "optional", }, - "name": "custom", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, ], - "type": "string", - }, - "hasAuth": Object { - "flags": Object { - "default": true, - "error": [Function], - "presence": "optional", - }, - "type": "boolean", + "type": "array", }, - "headers": Object { + "temperature": Object { "flags": Object { "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "key": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "value": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "name": "entries", - }, - ], - "type": "record", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", + "type": "number", }, - "updateIncidentJson": Object { + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .bedrock 6`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { "flags": Object { "error": [Function], }, @@ -496,53 +402,43 @@ Object { ], "type": "string", }, - "updateIncidentMethod": Object { + "defaultModel": Object { "flags": Object { - "default": "put", + "default": "anthropic.claude-v2:1", "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "allow": Array [ - "post", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - Object { - "schema": Object { - "allow": Array [ - "patch", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, + "rules": Array [ Object { - "schema": Object { - "allow": Array [ - "put", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "updateIncidentUrl": Object { + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .bedrock 7`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "accessKey": Object { "flags": Object { "error": [Function], }, @@ -556,7 +452,7 @@ Object { ], "type": "string", }, - "viewIncidentUrl": Object { + "secret": Object { "flags": Object { "error": [Function], }, @@ -580,7 +476,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .cases-webhook 2`] = ` +exports[`Connector type config checks detect connector type changes for: .bedrock 8`] = ` Object { "flags": Object { "default": Object { @@ -590,16 +486,67 @@ Object { "presence": "optional", }, "keys": Object { - "password": Object { + "subAction": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ + "rules": Array [ Object { - "schema": Object { - "flags": Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .cases-webhook 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "createCommentJson": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { "error": [Function], }, "rules": Array [ @@ -628,7 +575,77 @@ Object { ], "type": "alternatives", }, - "user": Object { + "createCommentMethod": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": "put", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "patch", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createCommentUrl": Object { "flags": Object { "default": null, "error": [Function], @@ -666,35 +683,31 @@ Object { ], "type": "alternatives", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .cases-webhook 3`] = ` -Object { - "flags": Object { - "error": [Function], - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "createIncidentJson": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "error": [Function], - "presence": "optional", + "name": "custom", }, - "keys": Object { - "subAction": Object { + ], + "type": "string", + }, + "createIncidentMethod": Object { + "flags": Object { + "default": "post", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "allow": Array [ - "pushToService", + "post", ], "flags": Object { "error": [Function], @@ -702,393 +715,152 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", + "only": true, }, - "keys": Object { - "comments": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "comment": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "commentId": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - ], - "type": "array", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "incident": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "description": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "externalId": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "id": Object { + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createIncidentResponseKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "createIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "getIncidentResponseExternalTitleKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "getIncidentUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "hasAuth": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + "headers": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "rules": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "severity": Object { + "value": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "rules": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", - }, - "status": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "tags": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - ], - "type": "array", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "title": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "type": "string", }, }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "entries", }, - }, - "type": "object", + ], + "type": "record", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, }, - "type": "object", - }, - }, - ], - "type": "alternatives", -} -`; - -exports[`Connector type config checks detect connector type changes for: .d3security 1`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + ], + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "url": Object { + "updateIncidentJson": Object { "flags": Object { "error": [Function], }, @@ -1102,27 +874,53 @@ Object { ], "type": "string", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .d3security 2`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + "updateIncidentMethod": Object { + "flags": Object { + "default": "put", + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "post", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "patch", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "put", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "token": Object { + "updateIncidentUrl": Object { "flags": Object { "error": [Function], }, @@ -1136,27 +934,7 @@ Object { ], "type": "string", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .d3security 3`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "subAction": Object { + "viewIncidentUrl": Object { "flags": Object { "error": [Function], }, @@ -1170,23 +948,6 @@ Object { ], "type": "string", }, - "subActionParams": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - "unknown": true, - }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, }, "preferences": Object { "stripUnknown": Object { @@ -1197,7 +958,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .email 1`] = ` +exports[`Connector type config checks detect connector type changes for: .cases-webhook 2`] = ` Object { "flags": Object { "default": Object { @@ -1207,7 +968,7 @@ Object { "presence": "optional", }, "keys": Object { - "clientId": Object { + "password": Object { "flags": Object { "default": null, "error": [Function], @@ -1245,197 +1006,9 @@ Object { ], "type": "alternatives", }, - "from": Object { + "user": Object { "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "hasAuth": Object { - "flags": Object { - "default": true, - "error": [Function], - "presence": "optional", - }, - "type": "boolean", - }, - "host": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "oauthTokenUrl": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "port": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "limit": 1, - }, - "name": "min", - }, - Object { - "args": Object { - "limit": 65535, - }, - "name": "max", - }, - ], - "type": "number", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "secure": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "type": "boolean", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "service": Object { - "flags": Object { - "default": "other", - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "tenantId": Object { - "flags": Object { - "default": null, + "default": null, "error": [Function], "presence": "optional", }, @@ -1481,43 +1054,25 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .email 2`] = ` +exports[`Connector type config checks detect connector type changes for: .cases-webhook 3`] = ` Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "clientSecret": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", }, + "error": [Function], + "presence": "optional", }, - Object { - "schema": Object { + "keys": Object { + "subAction": Object { "allow": Array [ - null, + "pushToService", ], "flags": Object { "error": [Function], @@ -1525,426 +1080,369 @@ Object { }, "type": "any", }, - }, - ], - "type": "alternatives", - }, - "password": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { + "subActionParams": Object { "flags": Object { + "default": Object { + "special": "deep", + }, "error": [Function], + "presence": "optional", }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "user": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .email 3`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "bcc": Object { - "flags": Object { - "default": Array [], - "error": [Function], - "presence": "optional", - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - ], - "type": "array", - }, - "cc": Object { - "flags": Object { - "default": Array [], - "error": [Function], - "presence": "optional", - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - ], - "type": "array", - }, - "kibanaFooterLink": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "path": Object { - "flags": Object { - "default": "/", - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "text": Object { - "flags": Object { - "default": "Go to Elastic", - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - "message": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "messageHTML": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "subject": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "to": Object { - "flags": Object { - "default": Array [], - "error": [Function], - "presence": "optional", - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - ], - "type": "array", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .gen-ai 1`] = ` -Object { - "flags": Object { - "error": [Function], - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiProvider": Object { - "flags": Object { - "error": [Function], - }, - "matches": Array [ - Object { - "schema": Object { - "allow": Array [ - "Azure OpenAI", - ], - "flags": Object { - "error": [Function], - "only": true, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "apiUrl": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], + "error": [Function], + "presence": "optional", }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiProvider": Object { - "flags": Object { - "error": [Function], - }, - "matches": Array [ - Object { - "schema": Object { - "allow": Array [ - "OpenAI", - ], - "flags": Object { - "error": [Function], - "only": true, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "apiUrl": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "defaultModel": Object { - "flags": Object { - "default": "gpt-4", - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "id": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "severity": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "status": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "tags": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "title": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, "preferences": Object { "stripUnknown": Object { "objects": false, @@ -1958,7 +1456,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .gen-ai 2`] = ` +exports[`Connector type config checks detect connector type changes for: .d3security 1`] = ` Object { "flags": Object { "default": Object { @@ -1968,9 +1466,11 @@ Object { "presence": "optional", }, "keys": Object { - "apiKey": Object { + "body": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "rules": Array [ Object { @@ -1982,29 +1482,27 @@ Object { ], "type": "string", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "eventType": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .gen-ai 3`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "subAction": Object { + "severity": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "rules": Array [ Object { @@ -2016,23 +1514,6 @@ Object { ], "type": "string", }, - "subActionParams": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - "unknown": true, - }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, }, "preferences": Object { "stripUnknown": Object { @@ -2043,7 +1524,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .index 1`] = ` +exports[`Connector type config checks detect connector type changes for: .d3security 2`] = ` Object { "flags": Object { "default": Object { @@ -2053,47 +1534,27 @@ Object { "presence": "optional", }, "keys": Object { - "executionTimeField": Object { + "body": Object { "flags": Object { - "default": null, + "default": [Function], "error": [Function], "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "rules": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, - "index": Object { + "eventType": Object { "flags": Object { + "default": [Function], "error": [Function], + "presence": "optional", }, "rules": Array [ Object { @@ -2105,32 +1566,23 @@ Object { ], "type": "string", }, - "refresh": Object { + "severity": Object { "flags": Object { - "default": false, + "default": [Function], "error": [Function], "presence": "optional", }, - "type": "boolean", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .index 2`] = ` -Object { - "flags": Object { - "default": Object {}, - "error": [Function], - "presence": "optional", - }, - "keys": Object {}, "preferences": Object { "stripUnknown": Object { "objects": false, @@ -2140,7 +1592,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .index 3`] = ` +exports[`Connector type config checks detect connector type changes for: .d3security 3`] = ` Object { "flags": Object { "default": Object { @@ -2150,91 +1602,19 @@ Object { "presence": "optional", }, "keys": Object { - "documents": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "key": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "value": Object { - "flags": Object { - "error": [Function], - }, - "type": "any", - }, - }, - "name": "entries", - }, - ], - "type": "record", - }, - ], - "type": "array", - }, - "indexOverride": Object { + "url": Object { "flags": Object { - "default": null, "error": [Function], - "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, + "rules": Array [ Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", + "args": Object { + "method": [Function], }, + "name": "custom", }, ], - "type": "alternatives", + "type": "string", }, }, "preferences": Object { @@ -2246,7 +1626,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .jira 1`] = ` +exports[`Connector type config checks detect connector type changes for: .d3security 4`] = ` Object { "flags": Object { "default": Object { @@ -2256,21 +1636,7 @@ Object { "presence": "optional", }, "keys": Object { - "apiUrl": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "projectKey": Object { + "token": Object { "flags": Object { "error": [Function], }, @@ -2294,7 +1660,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .jira 2`] = ` +exports[`Connector type config checks detect connector type changes for: .d3security 5`] = ` Object { "flags": Object { "default": Object { @@ -2304,7 +1670,7 @@ Object { "presence": "optional", }, "keys": Object { - "apiToken": Object { + "subAction": Object { "flags": Object { "error": [Function], }, @@ -2318,19 +1684,22 @@ Object { ], "type": "string", }, - "email": Object { + "subActionParams": Object { "flags": Object { + "default": Object { + "special": "deep", + }, "error": [Function], + "presence": "optional", + "unknown": true, }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, }, - ], - "type": "string", + }, + "type": "object", }, }, "preferences": Object { @@ -2342,70 +1711,103 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .jira 3`] = ` +exports[`Connector type config checks detect connector type changes for: .email 1`] = ` Object { "flags": Object { + "default": Object { + "special": "deep", + }, "error": [Function], + "presence": "optional", }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "subAction": Object { - "allow": Array [ - "getFields", - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - "subActionParams": Object { + "keys": Object { + "clientId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, }, - "type": "object", + "type": "any", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + ], + "type": "alternatives", + }, + "from": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, - "type": "object", + ], + "type": "string", + }, + "hasAuth": Object { + "flags": Object { + "default": true, + "error": [Function], + "presence": "optional", }, + "type": "boolean", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "host": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "getIncident", + null, ], "flags": Object { "error": [Function], @@ -2413,59 +1815,37 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "oauthTokenUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "externalId": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "custom", }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "handshake", + null, ], "flags": Object { "error": [Function], @@ -2473,44 +1853,73 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "port": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "limit": 1, + }, + "name": "min", }, - }, - "type": "object", + Object { + "args": Object { + "limit": 65535, + }, + "name": "max", + }, + ], + "type": "number", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, }, - "type": "object", - }, + ], + "type": "alternatives", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "secure": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "type": "boolean", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "pushToService", + null, ], "flags": Object { "error": [Function], @@ -2518,182 +1927,4063 @@ Object { }, "type": "any", }, - "subActionParams": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, + }, + ], + "type": "alternatives", + }, + "service": Object { + "flags": Object { + "default": "other", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "tenantId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { "error": [Function], - "presence": "optional", }, - "keys": Object { - "comments": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "comment": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "commentId": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - ], - "type": "array", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", + "name": "custom", }, - "incident": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .email 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "clientSecret": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "keys": Object { - "description": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "externalId": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "issueType": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "password": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "user": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .email 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "bcc": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "cc": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "kibanaFooterLink": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "path": Object { + "flags": Object { + "default": "/", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "text": Object { + "flags": Object { + "default": "Go to Elastic", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "messageHTML": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "subject": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "to": Object { + "flags": Object { + "default": Array [], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "stream": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 4`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "dashboardId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "messages": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "content": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "role": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + "model": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "n": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + "stop": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "temperature": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 6`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "messages": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "content": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "role": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + "model": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "n": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + "stop": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + ], + "type": "alternatives", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "temperature": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 7`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiProvider": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "Azure OpenAI", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiProvider": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "OpenAI", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "defaultModel": Object { + "flags": Object { + "default": "gpt-4", + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 8`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .gen-ai 9`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "executionTimeField": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "index": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "refresh": Object { + "flags": Object { + "default": false, + "error": [Function], + "presence": "optional", + }, + "type": "boolean", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 2`] = ` +Object { + "flags": Object { + "default": Object {}, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .index 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "documents": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "type": "any", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + ], + "type": "array", + }, + "indexOverride": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "projectKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiToken": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "email": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .jira 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "issueType": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "labels": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "parent": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "priority": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "summary": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issueTypes", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "fieldsByIssueType", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issues", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "title": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "issue", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "actions": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 10, + }, + "name": "max", + }, + ], + "type": "array", + }, + "alias": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "description": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "details": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + "entity": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "message": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "note": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "priority": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "P1", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "P2", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "P3", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "P4", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "P5", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "responders": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "type": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "team", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "user", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "escalation", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "schedule", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "type": Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "team", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "user", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "escalation", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "schedule", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "type": Object { + "allow": Array [ + "user", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "username": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 50, + }, + "name": "max", + }, + ], + "type": "array", + }, + "source": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "tags": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 20, + }, + "name": "max", + }, + ], + "type": "array", + }, + "user": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "visibleTo": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "type": Object { + "allow": Array [ + "team", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "type": Object { + "allow": Array [ + "team", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "type": Object { + "allow": Array [ + "user", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "type": Object { + "allow": Array [ + "user", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "username": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", + }, + ], + "rules": Array [ + Object { + "args": Object { + "limit": 50, + }, + "name": "max", + }, + ], + "type": "array", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "alias": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "note": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "source": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "user": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 4`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .opsgenie 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "routingKey": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .pagerduty 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "class": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "component": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "customDetails": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "key": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "value": Object { + "flags": Object { + "error": [Function], + }, + "type": "any", + }, + }, + "name": "entries", + }, + ], + "type": "record", + }, + "dedupKey": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "eventAction": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "trigger", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "resolve", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "acknowledge", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "group": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "links": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "href": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "text": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + "severity": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "allow": Array [ + "critical", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "error", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "warning", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + Object { + "schema": Object { + "allow": Array [ + "info", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "source": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "summary": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "timestamp": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiUrl": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "orgId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKeyId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "apiKeySecret": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .resilient 3`] = ` +Object { + "flags": Object { + "error": [Function], + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getFields", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "getIncident", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "externalId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "handshake", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "pushToService", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comments": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "items": Array [ + Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "comment": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "commentId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + ], + "type": "array", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "incident": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "description": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", }, "matches": Array [ Object { @@ -2727,7 +6017,7 @@ Object { ], "type": "alternatives", }, - "labels": Object { + "externalId": Object { "flags": Object { "default": null, "error": [Function], @@ -2739,30 +6029,15 @@ Object { "flags": Object { "error": [Function], }, - "items": Array [ + "rules": Array [ Object { - "flags": Object { - "error": [Function], - "presence": "optional", + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "name": "custom", }, ], - "type": "array", + "type": "string", }, }, Object { @@ -2780,7 +6055,7 @@ Object { ], "type": "alternatives", }, - "parent": Object { + "incidentTypes": Object { "flags": Object { "default": null, "error": [Function], @@ -2792,15 +6067,16 @@ Object { "flags": Object { "error": [Function], }, - "rules": Array [ + "items": Array [ Object { - "args": Object { - "method": [Function], + "flags": Object { + "error": [Function], + "presence": "optional", }, - "name": "custom", + "type": "number", }, ], - "type": "string", + "type": "array", }, }, Object { @@ -2818,7 +6094,21 @@ Object { ], "type": "alternatives", }, - "priority": Object { + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "severityCode": Object { "flags": Object { "default": null, "error": [Function], @@ -2830,15 +6120,7 @@ Object { "flags": Object { "error": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "type": "number", }, }, Object { @@ -2856,58 +6138,21710 @@ Object { ], "type": "alternatives", }, - "summary": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "incidentTypes", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + Object { + "schema": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "subAction": Object { + "allow": Array [ + "severity", + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + "subActionParams": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object {}, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + }, + ], + "type": "alternatives", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "osTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "query": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + "unknown": true, + }, + "keys": Object { + "parentTaskId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "K8SNodeLabels__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SNodeName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SType__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "accountIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentNamespace__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentPodName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "alertIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "appsVulnerabilityStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "appsVulnerabilityStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsRole__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSecurityGroups__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSubnetIds__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "azureResourceGroup__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudImage__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceSize__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudLocation__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudNetwork__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudProvider": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudTags__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "clusterName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__like": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "countsFor": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domainsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "encryptedApplications": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalIp__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filterId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredGroupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredSiteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "firewallEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gatewayIp": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gcpServiceAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "groupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "hasLocalConfiguration": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "infected": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isActive": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isDecommissioned": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isPendingUninstall": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUninstalled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUpToDate": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastLoggedInUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIdsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "migrationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationMode": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationModeSuspicious": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceGatewayMacAddress__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceInet__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfacePhysical__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkQuarantineEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osArch": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "query": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "siteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatContentHash": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatHidden": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatMitigationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatRebootRequired": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatResolved": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userActionsNeeded": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 4`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "K8SNodeLabels__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SNodeName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SType__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "accountIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentNamespace__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentPodName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "alertIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "appsVulnerabilityStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "appsVulnerabilityStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsRole__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSecurityGroups__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSubnetIds__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "azureResourceGroup__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudImage__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceSize__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudLocation__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudNetwork__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudProvider": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudTags__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "clusterName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__like": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "countsFor": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domainsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "encryptedApplications": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalIp__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filterId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredGroupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredSiteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "firewallEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gatewayIp": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gcpServiceAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "groupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "hasLocalConfiguration": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "infected": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isActive": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isDecommissioned": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isPendingUninstall": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUninstalled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUpToDate": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastLoggedInUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIdsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "migrationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationMode": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationModeSuspicious": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceGatewayMacAddress__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceInet__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfacePhysical__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkQuarantineEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osArch": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "query": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "siteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatContentHash": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatHidden": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatMitigationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatRebootRequired": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatResolved": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userActionsNeeded": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 5`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "K8SNodeLabels__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SNodeName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SType__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "accountIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentNamespace__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentPodName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "alertIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "appsVulnerabilityStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "appsVulnerabilityStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsRole__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSecurityGroups__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSubnetIds__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "azureResourceGroup__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudImage__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceSize__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudLocation__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudNetwork__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudProvider": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudTags__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "clusterName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__like": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "countsFor": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domainsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "encryptedApplications": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalIp__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filterId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredGroupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredSiteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "firewallEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gatewayIp": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gcpServiceAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "groupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "hasLocalConfiguration": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "infected": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isActive": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isDecommissioned": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isPendingUninstall": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUninstalled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUpToDate": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastLoggedInUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIdsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "migrationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationMode": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationModeSuspicious": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceGatewayMacAddress__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceInet__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfacePhysical__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkQuarantineEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osArch": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "query": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "remoteProfilingStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "scanStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "siteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatContentHash": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatHidden": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatMitigationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatRebootRequired": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "threatResolved": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "totalMemory__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userActionsNeeded": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 6`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "K8SNodeLabels__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SNodeName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SType__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "K8SVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "accountIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "activeThreats__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adComputerQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserMember__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "adUserQuery__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentNamespace__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentPodName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "agentVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "alertIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "appsVulnerabilityStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "appsVulnerabilityStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsRole__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSecurityGroups__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "awsSubnetIds__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "azureResourceGroup__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudImage__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudInstanceSize__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudLocation__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudNetwork__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudProvider": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cloudTags__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "clusterName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "computerName__like": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "consoleMigrationStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "coreCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "countsFor": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "cpuCount__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "createdAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "decommissionedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "domainsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "encryptedApplications": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalId__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "externalIp__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filterId": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredGroupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "filteredSiteIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "firewallEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gatewayIp": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "gcpServiceAccount__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "groupIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "hasLocalConfiguration": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "ids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "infected": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "installerTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isActive": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isDecommissioned": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isPendingUninstall": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUninstalled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "isUpToDate": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastActiveDate__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "lastLoggedInUserName__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIds": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "locationIdsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "machineTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "migrationStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationMode": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "mitigationModeSuspicious": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceGatewayMacAddress__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfaceInet__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkInterfacePhysical__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkQuarantineEnabled": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "networkStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "operationalStatesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osArch": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypes": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osTypesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "osVersion__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "processName": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "query": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatus": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatuses": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "type": "object", + "name": "custom", }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "rangerStatusesNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], }, - "type": "object", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, }, - "type": "object", - }, + ], + "type": "alternatives", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "rangerVersions": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "issueTypes", + null, ], "flags": Object { "error": [Function], @@ -2915,44 +27849,151 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "rangerVersionsNin": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, }, - "type": "object", + "type": "any", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + ], + "type": "alternatives", + }, + "registeredAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, - "type": "object", + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "registeredAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "registeredAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "fieldsByIssueType", + null, ], "flags": Object { "error": [Function], @@ -2960,59 +28001,37 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "registeredAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "id": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "custom", }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "issues", + null, ], "flags": Object { "error": [Function], @@ -3020,59 +28039,37 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "registeredAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "title": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "custom", }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "issue", + null, ], "flags": Object { "error": [Function], @@ -3080,181 +28077,163 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "remoteProfilingStates": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "id": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "custom", }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + ], + "type": "string", }, }, - "type": "object", - }, - }, - ], - "type": "alternatives", -} -`; - -exports[`Connector type config checks detect connector type changes for: .opsgenie 1`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiUrl": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .opsgenie 2`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiKey": Object { + "remoteProfilingStatesNin": Object { "flags": Object { + "default": null, "error": [Function], + "presence": "optional", }, - "rules": Array [ + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, Object { - "args": Object { - "method": [Function], + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .opsgenie 3`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "subAction": Object { + "scanStatus": Object { "flags": Object { + "default": null, "error": [Function], + "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "subActionParams": Object { + "scanStatuses": Object { "flags": Object { - "default": Object { - "special": "deep", - }, + "default": null, "error": [Function], "presence": "optional", - "unknown": true, }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .pagerduty 1`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiUrl": Object { + "scanStatusesNin": Object { "flags": Object { "default": null, "error": [Function], @@ -3292,172 +28271,223 @@ Object { ], "type": "alternatives", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .pagerduty 2`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "routingKey": Object { + "siteIds": Object { "flags": Object { + "default": null, "error": [Function], + "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .pagerduty 3`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", + "type": "alternatives", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "class": Object { + "threatContentHash": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "component": Object { + "threatCreatedAt__between": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "customDetails": Object { + "threatCreatedAt__gt": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "key": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", + "schema": Object { + "flags": Object { + "error": [Function], }, - "value": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - "type": "any", + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, }, + "type": "any", }, - "name": "entries", }, ], - "type": "record", + "type": "alternatives", }, - "dedupKey": Object { + "threatCreatedAt__gte": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "name": "custom", }, Object { - "args": Object { - "method": [Function], + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "eventAction": Object { + "threatCreatedAt__lt": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, "matches": Array [ Object { "schema": Object { - "allow": Array [ - "trigger", - ], "flags": Object { "error": [Function], - "only": true, }, - "type": "any", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, Object { "schema": Object { "allow": Array [ - "resolve", + null, ], "flags": Object { "error": [Function], @@ -3466,10 +28496,36 @@ Object { "type": "any", }, }, + ], + "type": "alternatives", + }, + "threatCreatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, Object { "schema": Object { "allow": Array [ - "acknowledge", + null, ], "flags": Object { "error": [Function], @@ -3481,100 +28537,109 @@ Object { ], "type": "alternatives", }, - "group": Object { + "threatHidden": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "links": Object { + "threatMitigationStatus": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "items": Array [ + "matches": Array [ Object { - "flags": Object { - "default": Object { - "special": "deep", + "schema": Object { + "flags": Object { + "error": [Function], }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "href": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - ], - "type": "string", - }, - "text": Object { - "flags": Object { - "error": [Function], + "name": "custom", }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, + ], + "type": "string", }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, }, + "type": "any", }, - "type": "object", }, ], - "type": "array", + "type": "alternatives", }, - "severity": Object { + "threatRebootRequired": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, "matches": Array [ Object { "schema": Object { - "allow": Array [ - "critical", - ], "flags": Object { "error": [Function], - "only": true, }, - "type": "any", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, Object { "schema": Object { "allow": Array [ - "error", + null, ], "flags": Object { "error": [Function], @@ -3583,22 +28648,36 @@ Object { "type": "any", }, }, + ], + "type": "alternatives", + }, + "threatResolved": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ Object { "schema": Object { - "allow": Array [ - "warning", - ], "flags": Object { "error": [Function], - "only": true, }, - "type": "any", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, }, Object { "schema": Object { "allow": Array [ - "info", + null, ], "flags": Object { "error": [Function], @@ -3610,193 +28689,109 @@ Object { ], "type": "alternatives", }, - "source": Object { - "flags": Object { - "default": [Function], - "error": [Function], - "presence": "optional", - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "summary": Object { + "totalMemory__between": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "name": "custom", }, Object { - "args": Object { - "method": [Function], + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "timestamp": Object { + "totalMemory__gt": Object { "flags": Object { - "default": [Function], + "default": null, "error": [Function], "presence": "optional", }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .resilient 1`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiUrl": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "orgId": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "name": "custom", }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .resilient 2`] = ` -Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "apiKeyId": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ Object { - "args": Object { - "method": [Function], + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, - "name": "custom", }, ], - "type": "string", + "type": "alternatives", }, - "apiKeySecret": Object { + "totalMemory__gte": Object { "flags": Object { + "default": null, "error": [Function], + "presence": "optional", }, - "rules": Array [ + "matches": Array [ Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", -} -`; - -exports[`Connector type config checks detect connector type changes for: .resilient 3`] = ` -Object { - "flags": Object { - "error": [Function], - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "getFields", + null, ], "flags": Object { "error": [Function], @@ -3804,44 +28799,37 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "totalMemory__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - }, - "type": "object", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "getIncident", + null, ], "flags": Object { "error": [Function], @@ -3849,59 +28837,75 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "totalMemory__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "externalId": Object { - "flags": Object { - "error": [Function], + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "name": "custom", }, - }, - "type": "object", + ], + "type": "string", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, }, - "type": "object", - }, + ], + "type": "alternatives", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "updatedAt__between": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "handshake", + null, ], "flags": Object { "error": [Function], @@ -3909,44 +28913,75 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "updatedAt__gt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - }, - "type": "object", + ], + "type": "string", }, }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", }, }, - "type": "object", - }, + ], + "type": "alternatives", }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "updatedAt__gte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "error": [Function], - "presence": "optional", }, - "keys": Object { - "subAction": Object { + Object { + "schema": Object { "allow": Array [ - "pushToService", + null, ], "flags": Object { "error": [Function], @@ -3954,381 +28989,532 @@ Object { }, "type": "any", }, - "subActionParams": Object { + }, + ], + "type": "alternatives", + }, + "updatedAt__lt": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { "flags": Object { - "default": Object { - "special": "deep", - }, "error": [Function], - "presence": "optional", }, - "keys": Object { - "comments": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "comment": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "commentId": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, - }, - "type": "object", - }, - ], - "type": "array", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "incident": Object { - "flags": Object { - "default": Object { - "special": "deep", - }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "description": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "externalId": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "incidentTypes": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "items": Array [ - Object { - "flags": Object { - "error": [Function], - "presence": "optional", - }, - "type": "number", - }, - ], - "type": "array", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, - "name": Object { - "flags": Object { - "error": [Function], - }, - "rules": Array [ - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, - ], - "type": "string", - }, - "severityCode": Object { - "flags": Object { - "default": null, - "error": [Function], - "presence": "optional", - }, - "matches": Array [ - Object { - "schema": Object { - "flags": Object { - "error": [Function], - }, - "type": "number", - }, - }, - Object { - "schema": Object { - "allow": Array [ - null, - ], - "flags": Object { - "error": [Function], - "only": true, - }, - "type": "any", - }, - }, - ], - "type": "alternatives", - }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, - }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "updatedAt__lte": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "type": "object", + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "userActionsNeeded": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuid__contains": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + "uuids": Object { + "flags": Object { + "default": null, + "error": [Function], + "presence": "optional", + }, + "matches": Array [ + Object { + "schema": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + Object { + "schema": Object { + "allow": Array [ + null, + ], + "flags": Object { + "error": [Function], + "only": true, + }, + "type": "any", + }, + }, + ], + "type": "alternatives", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .sentinelone 7`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "alertIds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "items": Array [ + Object { + "flags": Object { + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + ], + "type": "array", + }, + "computerName": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "script": Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "apiKey": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + ], + "type": "string", + }, + "inputParams": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, - "type": "object", - }, + ], + "type": "string", }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "outputDirectory": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "password": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "error": [Function], - "presence": "optional", - }, - "keys": Object { - "subAction": Object { - "allow": Array [ - "incidentTypes", - ], - "flags": Object { - "error": [Function], - "only": true, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - "type": "any", + ], + "type": "string", + }, + "passwordFromScope": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "subActionParams": Object { - "flags": Object { - "default": Object { - "special": "deep", + "keys": Object { + "scopeId": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "error": [Function], - "presence": "optional", + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "scopeLevel": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "type": "object", }, - }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, }, + "type": "object", }, - "type": "object", - }, - }, - Object { - "schema": Object { - "flags": Object { - "default": Object { - "special": "deep", + "requiresApproval": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "error": [Function], - "presence": "optional", + "type": "boolean", }, - "keys": Object { - "subAction": Object { - "allow": Array [ - "severity", - ], - "flags": Object { - "error": [Function], - "only": true, + "scriptId": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", }, - "type": "any", + ], + "type": "string", + }, + "scriptName": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, - "subActionParams": Object { - "flags": Object { - "default": Object { - "special": "deep", + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, - "error": [Function], - "presence": "optional", + "name": "custom", }, - "keys": Object {}, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + ], + "type": "string", + }, + "scriptRuntimeTimeoutSeconds": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "type": "number", + }, + "singularityxdrKeyword": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], }, + "name": "custom", }, - "type": "object", + ], + "type": "string", + }, + "singularityxdrUrl": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", }, - "preferences": Object { - "stripUnknown": Object { - "objects": false, + "taskDescription": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, }, - "type": "object", }, + "type": "object", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, }, - ], - "type": "alternatives", + }, + "type": "object", } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 1`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 8`] = ` Object { "flags": Object { "default": Object { @@ -4362,7 +29548,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 2`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 9`] = ` Object { "flags": Object { "default": Object { @@ -4396,7 +29582,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .sentinelone 3`] = ` +exports[`Connector type config checks detect connector type changes for: .sentinelone 10`] = ` Object { "flags": Object { "default": Object { @@ -10068,6 +35254,270 @@ Object { `; exports[`Connector type config checks detect connector type changes for: .tines 1`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "storyId": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 2`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "webhook": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "path": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "secret": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "storyId": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + "webhookUrl": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 3`] = ` +Object { + "flags": Object { + "default": Object { + "special": "deep", + }, + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "body": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "webhook": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "keys": Object { + "id": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + "name": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "path": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "secret": Object { + "flags": Object { + "error": [Function], + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + "storyId": Object { + "flags": Object { + "error": [Function], + }, + "type": "number", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", + }, + "webhookUrl": Object { + "flags": Object { + "default": [Function], + "error": [Function], + "presence": "optional", + }, + "rules": Array [ + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, + ], + "type": "string", + }, + }, + "preferences": Object { + "stripUnknown": Object { + "objects": false, + }, + }, + "type": "object", +} +`; + +exports[`Connector type config checks detect connector type changes for: .tines 4`] = ` Object { "flags": Object { "default": Object { @@ -10101,7 +35551,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .tines 2`] = ` +exports[`Connector type config checks detect connector type changes for: .tines 5`] = ` Object { "flags": Object { "default": Object { @@ -10149,7 +35599,7 @@ Object { } `; -exports[`Connector type config checks detect connector type changes for: .tines 3`] = ` +exports[`Connector type config checks detect connector type changes for: .tines 6`] = ` Object { "flags": Object { "default": Object { diff --git a/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts index 6a2382ea3088..32f878e87506 100644 --- a/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts +++ b/x-pack/plugins/actions/server/integration_tests/connector_types.test.ts @@ -9,6 +9,9 @@ import type { TestElasticsearchUtils, TestKibanaUtils } from '@kbn/core-test-hel import { ActionTypeRegistry } from '../action_type_registry'; import { setupTestServers } from './lib'; import { connectorTypes } from './mocks/connector_types'; +import { actionsConfigMock } from '../actions_config.mock'; +import { loggerMock } from '@kbn/logging-mocks'; +import { Services } from '../types'; jest.mock('../action_type_registry', () => { const actual = jest.requireActual('../action_type_registry'); @@ -50,11 +53,34 @@ describe('Connector type config checks', () => { for (const connectorTypeId of connectorTypes) { test(`detect connector type changes for: ${connectorTypeId}`, async () => { - const connectorType = actionTypeRegistry.get(connectorTypeId); + const { + getService, + validate: { config, params, secrets }, + } = actionTypeRegistry.get(connectorTypeId); - expect(connectorType?.validate.config.schema.getSchema!().describe()).toMatchSnapshot(); - expect(connectorType.validate.secrets.schema.getSchema!().describe()).toMatchSnapshot(); - expect(connectorType.validate.params.schema.getSchema!().describe()).toMatchSnapshot(); + // SubActionConnector + if (getService) { + const subActions = getService({ + config: {}, + configurationUtilities: actionsConfigMock.create(), + connector: { id: 'foo', type: 'bar' }, + logger: loggerMock.create(), + secrets: {}, + services: {} as Services, + }).getSubActions(); + + subActions.forEach((subAction) => { + // @ts-ignore + if (subAction.schema?.getSchema) { + // @ts-ignore + expect(subAction.schema.getSchema().describe()).toMatchSnapshot(); + } + }); + } + + expect(config.schema.getSchema!().describe()).toMatchSnapshot(); + expect(secrets.schema.getSchema!().describe()).toMatchSnapshot(); + expect(params.schema.getSchema!().describe()).toMatchSnapshot(); }); } }); diff --git a/x-pack/plugins/actions/server/sub_action_framework/register.test.ts b/x-pack/plugins/actions/server/sub_action_framework/register.test.ts index 59e71ffb69bf..200b9619eaef 100644 --- a/x-pack/plugins/actions/server/sub_action_framework/register.test.ts +++ b/x-pack/plugins/actions/server/sub_action_framework/register.test.ts @@ -60,6 +60,7 @@ describe('Registration', () => { supportedFeatureIds: connector.supportedFeatureIds, validate: expect.anything(), executor: expect.any(Function), + getService: expect.any(Function), renderParameterTemplates: expect.any(Function), }); }); @@ -99,6 +100,7 @@ describe('Registration', () => { supportedFeatureIds: connector.supportedFeatureIds, validate: expect.anything(), executor: expect.any(Function), + getService: expect.any(Function), renderParameterTemplates: expect.any(Function), isSystemActionType: true, }); diff --git a/x-pack/plugins/actions/server/sub_action_framework/register.ts b/x-pack/plugins/actions/server/sub_action_framework/register.ts index 0b8fe240c155..bfe2c5fffbbf 100644 --- a/x-pack/plugins/actions/server/sub_action_framework/register.ts +++ b/x-pack/plugins/actions/server/sub_action_framework/register.ts @@ -41,5 +41,6 @@ export const register = string[]; renderParameterTemplates?: RenderParameterTemplates; executor: ExecutorType; + getService?: (params: ServiceParams) => SubActionConnector; } export interface RawAction extends Record { diff --git a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts index ce4892215953..8718fcb2db59 100644 --- a/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts +++ b/x-pack/plugins/alerting/common/alert_schema/field_maps/mapping_from_field_map.test.ts @@ -211,6 +211,9 @@ describe('mappingFromFieldMap', () => { case_ids: { type: 'keyword', }, + consecutive_matches: { + type: 'long', + }, duration: { properties: { us: { diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts index 81848c3e6568..dcebb07009af 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.test.ts @@ -15,6 +15,7 @@ import { } from '../types'; import { ALERT_ACTION_GROUP, + ALERT_CONSECUTIVE_MATCHES, ALERT_DURATION, ALERT_END, ALERT_FLAPPING, @@ -154,6 +155,7 @@ const fetchedAlert1 = { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], @@ -184,6 +186,7 @@ const fetchedAlert2 = { [EVENT_ACTION]: 'active', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false], @@ -214,6 +217,7 @@ const getNewIndexedAlertDoc = (overrides = {}) => ({ [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 1, [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], @@ -260,6 +264,7 @@ const getRecoveredIndexedAlertDoc = (overrides = {}) => ({ [ALERT_END]: date, [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z', lte: date }, [ALERT_STATUS]: 'recovered', + [ALERT_CONSECUTIVE_MATCHES]: 0, ...overrides, }); @@ -670,6 +675,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 1, [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false], @@ -777,7 +783,7 @@ describe('Alerts Client', () => { }, }, // ongoing alert doc - getOngoingIndexedAlertDoc({ [ALERT_UUID]: 'abc' }), + getOngoingIndexedAlertDoc({ [ALERT_UUID]: 'abc', [ALERT_CONSECUTIVE_MATCHES]: 0 }), ], }); }); @@ -950,6 +956,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 1, [ALERT_DURATION]: 72000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false, false, false], @@ -997,6 +1004,7 @@ describe('Alerts Client', () => { [TIMESTAMP]: date, [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'recovered', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_DURATION]: 36000000000, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, true], diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts index 2da67f584e93..47c4e9e5f4f5 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.test.ts @@ -25,6 +25,7 @@ import { TIMESTAMP, VERSION, ALERT_TIME_RANGE, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { alertRule } from './test_fixtures'; @@ -46,6 +47,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', @@ -77,6 +79,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', @@ -112,6 +115,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true, false, false, false, true, true], [ALERT_INSTANCE_ID]: 'alert-A', @@ -152,6 +156,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', @@ -197,6 +202,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', @@ -247,6 +253,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', @@ -299,6 +306,7 @@ describe('buildNewAlert', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_INSTANCE_ID]: 'alert-A', diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts index 4af3e3f93817..911c0cc8c6c9 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_new_alert.ts @@ -14,6 +14,7 @@ import { ALERT_FLAPPING_HISTORY, ALERT_INSTANCE_ID, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, ALERT_RULE_TAGS, ALERT_START, ALERT_STATUS, @@ -86,6 +87,7 @@ export const buildNewAlert = < [ALERT_FLAPPING_HISTORY]: legacyAlert.getFlappingHistory(), [ALERT_INSTANCE_ID]: legacyAlert.getId(), [ALERT_MAINTENANCE_WINDOW_IDS]: legacyAlert.getMaintenanceWindowIds(), + [ALERT_CONSECUTIVE_MATCHES]: legacyAlert.getActiveCount(), [ALERT_STATUS]: 'active', [ALERT_UUID]: legacyAlert.getUuid(), [ALERT_WORKFLOW_STATUS]: get(cleanedPayload, ALERT_WORKFLOW_STATUS, 'open'), diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts index 2c4fc087a474..7e76a829d0d3 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.test.ts @@ -26,6 +26,7 @@ import { TIMESTAMP, VERSION, ALERT_TIME_RANGE, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { alertRule, existingFlattenedNewAlert, existingExpandedNewAlert } from './test_fixtures'; @@ -55,6 +56,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -114,6 +116,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -190,6 +193,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'error', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [false, false, true, true], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-xyz'], @@ -279,6 +283,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -375,6 +380,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -475,6 +481,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -555,6 +562,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -653,6 +661,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'active', [ALERT_ACTION_GROUP]: 'warning', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts index ec4eae47d6e8..8d1be2e75ecb 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_ongoing_alert.ts @@ -9,6 +9,7 @@ import deepmerge from 'deepmerge'; import type { Alert } from '@kbn/alerts-as-data-utils'; import { ALERT_ACTION_GROUP, + ALERT_CONSECUTIVE_MATCHES, ALERT_DURATION, ALERT_FLAPPING, ALERT_FLAPPING_HISTORY, @@ -93,6 +94,8 @@ export const buildOngoingAlert = < [ALERT_FLAPPING_HISTORY]: legacyAlert.getFlappingHistory(), // Set latest maintenance window IDs [ALERT_MAINTENANCE_WINDOW_IDS]: legacyAlert.getMaintenanceWindowIds(), + // Set latest match count + [ALERT_CONSECUTIVE_MATCHES]: legacyAlert.getActiveCount(), // Set the time range ...(legacyAlert.getState().start ? { diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts index c8a145487003..3b4f23ac7cb4 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.test.ts @@ -27,6 +27,7 @@ import { VERSION, ALERT_TIME_RANGE, ALERT_END, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { alertRule, @@ -63,6 +64,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'recovered', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], @@ -127,6 +129,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'NoLongerActive', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], @@ -221,6 +224,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'NoLongerActive', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], @@ -323,6 +327,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'NoLongerActive', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], @@ -423,6 +428,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'NoLongerActive', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-1', 'maint-321'], @@ -522,6 +528,7 @@ for (const flattened of [true, false]) { [TIMESTAMP]: '2023-03-29T12:27:28.159Z', [EVENT_ACTION]: 'close', [ALERT_ACTION_GROUP]: 'NoLongerActive', + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [], [ALERT_MAINTENANCE_WINDOW_IDS]: [], diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts index 74bebca1bb95..46f36c9715e1 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/build_recovered_alert.ts @@ -22,6 +22,7 @@ import { ALERT_END, ALERT_TIME_RANGE, ALERT_START, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { DeepPartial } from '@kbn/utility-types'; import { Alert as LegacyAlert } from '../../alert/alert'; @@ -92,6 +93,8 @@ export const buildRecoveredAlert = < [ALERT_FLAPPING_HISTORY]: legacyAlert.getFlappingHistory(), // Set latest maintenance window IDs [ALERT_MAINTENANCE_WINDOW_IDS]: legacyAlert.getMaintenanceWindowIds(), + // Set latest match count, should be 0 + [ALERT_CONSECUTIVE_MATCHES]: legacyAlert.getActiveCount(), // Set status to 'recovered' [ALERT_STATUS]: 'recovered', // Set latest duration as recovered alerts should have updated duration diff --git a/x-pack/plugins/alerting/server/alerts_client/lib/test_fixtures.ts b/x-pack/plugins/alerting/server/alerts_client/lib/test_fixtures.ts index 1a8e2be1e16a..096d8ab6a39a 100644 --- a/x-pack/plugins/alerting/server/alerts_client/lib/test_fixtures.ts +++ b/x-pack/plugins/alerting/server/alerts_client/lib/test_fixtures.ts @@ -22,6 +22,7 @@ import { ALERT_FLAPPING_HISTORY, ALERT_INSTANCE_ID, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, ALERT_STATUS, ALERT_UUID, ALERT_WORKFLOW_STATUS, @@ -80,6 +81,7 @@ export const existingFlattenedNewAlert = { [ALERT_FLAPPING_HISTORY]: [true], [ALERT_INSTANCE_ID]: 'alert-A', [ALERT_MAINTENANCE_WINDOW_IDS]: [], + [ALERT_CONSECUTIVE_MATCHES]: 1, [ALERT_STATUS]: 'active', [ALERT_START]: '2023-03-28T12:27:28.159Z', [ALERT_TIME_RANGE]: { gte: '2023-03-28T12:27:28.159Z' }, @@ -98,6 +100,7 @@ export const existingFlattenedActiveAlert = { [ALERT_DURATION]: '3600', [ALERT_FLAPPING_HISTORY]: [true, false], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-x'], + [ALERT_CONSECUTIVE_MATCHES]: 2, }; export const existingFlattenedRecoveredAlert = { @@ -110,6 +113,7 @@ export const existingFlattenedRecoveredAlert = { [ALERT_TIME_RANGE]: { gte: '2023-03-27T12:27:28.159Z', lte: '2023-03-30T12:27:28.159Z' }, [ALERT_FLAPPING_HISTORY]: [true, false, false, true], [ALERT_MAINTENANCE_WINDOW_IDS]: ['maint-x'], + [ALERT_CONSECUTIVE_MATCHES]: 0, [ALERT_STATUS]: 'recovered', }; diff --git a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap index 1953ec8176be..06f4835d20f7 100644 --- a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap +++ b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/alert_as_data_fields.test.ts.snap @@ -747,6 +747,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -1794,6 +1799,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -2841,6 +2851,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -3888,6 +3903,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -4935,6 +4955,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -5988,6 +6013,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -7035,6 +7065,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, @@ -8082,6 +8117,11 @@ Object { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.depth": Object { "array": false, "required": true, diff --git a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts index ec690bb8ba0f..a1af1dccb992 100644 --- a/x-pack/plugins/alerting/server/task_runner/execution_handler.ts +++ b/x-pack/plugins/alerting/server/task_runner/execution_handler.ts @@ -319,6 +319,7 @@ export class ExecutionHandler< actionParams: action.params, flapping: executableAlert.getFlapping(), ruleUrl: ruleUrl?.absoluteUrl, + consecutiveMatches: executableAlert.getActiveCount(), }; if (executableAlert.isAlertAsData()) { diff --git a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts index 4274c320126d..246215ba9a15 100644 --- a/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/task_runner_alerts_client.test.ts @@ -96,6 +96,7 @@ import { SPACE_IDS, TAGS, VERSION, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; jest.mock('uuid', () => ({ @@ -554,6 +555,7 @@ describe('Task Runner', () => { [EVENT_ACTION]: 'open', [EVENT_KIND]: 'signal', [ALERT_ACTION_GROUP]: 'default', + [ALERT_CONSECUTIVE_MATCHES]: 1, [ALERT_DURATION]: 0, [ALERT_FLAPPING]: false, [ALERT_FLAPPING_HISTORY]: [true], diff --git a/x-pack/plugins/alerting/server/task_runner/transform_action_params.test.ts b/x-pack/plugins/alerting/server/task_runner/transform_action_params.test.ts index ae60d5dd50f5..c343411d494b 100644 --- a/x-pack/plugins/alerting/server/task_runner/transform_action_params.test.ts +++ b/x-pack/plugins/alerting/server/task_runner/transform_action_params.test.ts @@ -789,6 +789,37 @@ describe('transformActionParams', () => { } `); }); + + test('consecutive matches is passed to templates', () => { + const actionParams = { + message: 'Value "{{alert.consecutiveMatches}}" exists', + }; + const result = transformActionParams({ + actionsPlugin, + actionTypeId, + actionParams, + state: {}, + context: {}, + alertId: '1', + alertType: 'rule-type-id', + actionId: 'action-id', + alertName: 'alert-name', + tags: ['tag-A', 'tag-B'], + spaceId: 'spaceId-A', + alertInstanceId: '2', + alertUuid: 'uuid-1', + alertActionGroup: 'action-group', + alertActionGroupName: 'Action Group', + alertParams: {}, + flapping: true, + consecutiveMatches: 4, + }); + expect(result).toMatchInlineSnapshot(` + Object { + "message": "Value \\"4\\" exists", + } + `); + }); }); describe('transformSummaryActionParams', () => { diff --git a/x-pack/plugins/alerting/server/task_runner/transform_action_params.ts b/x-pack/plugins/alerting/server/task_runner/transform_action_params.ts index 2e215889291f..65fa3dae5f89 100644 --- a/x-pack/plugins/alerting/server/task_runner/transform_action_params.ts +++ b/x-pack/plugins/alerting/server/task_runner/transform_action_params.ts @@ -37,6 +37,7 @@ export interface TransformActionParamsOptions { ruleUrl?: string; flapping: boolean; aadAlert?: AADAlert; + consecutiveMatches?: number; } interface SummarizedAlertsWithAll { @@ -79,6 +80,7 @@ export function transformActionParams({ ruleUrl, flapping, aadAlert, + consecutiveMatches, }: TransformActionParamsOptions): RuleActionParams { // when the list of variables we pass in here changes, // the UI will need to be updated as well; see: @@ -111,6 +113,7 @@ export function transformActionParams({ actionGroup: alertActionGroup, actionGroupName: alertActionGroupName, flapping, + consecutiveMatches, }, ...(aadAlert ? { ...aadAlert } : {}), }; @@ -161,6 +164,7 @@ export function transformSummaryActionParams({ actionGroup: 'default', actionGroupName: 'Default', flapping: false, + consecutiveMatches: 0, }, kibanaBaseUrl, date: new Date().toISOString(), diff --git a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/component/index.ts b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/component/index.ts index 6840bb6a5953..f3d4900aa6f1 100644 --- a/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/component/index.ts +++ b/x-pack/plugins/canvas/canvas_plugin_src/renderers/filters/advanced_filter/component/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { compose, withState } from 'recompose'; +import { compose, withState } from 'react-recompose'; import { AdvancedFilter as Component, Props as ComponentProps } from './advanced_filter'; export interface Props { diff --git a/x-pack/plugins/canvas/public/components/element_wrapper/index.js b/x-pack/plugins/canvas/public/components/element_wrapper/index.js index e4fa03d5ee7a..1dfa5b9b546c 100644 --- a/x-pack/plugins/canvas/public/components/element_wrapper/index.js +++ b/x-pack/plugins/canvas/public/components/element_wrapper/index.js @@ -7,7 +7,7 @@ import PropTypes from 'prop-types'; import { connectAdvanced } from 'react-redux'; -import { compose, withPropsOnChange, mapProps } from 'recompose'; +import { compose, withPropsOnChange, mapProps } from 'react-recompose'; import isEqual from 'react-fast-compare'; import { getResolvedArgs, getSelectedPage } from '../../state/selectors/workpad'; import { getState, getValue } from '../../lib/resolved_arg'; diff --git a/x-pack/plugins/canvas/public/components/enhance/error_boundary.tsx b/x-pack/plugins/canvas/public/components/enhance/error_boundary.tsx index 02e8b9560d52..a1220b30a29f 100644 --- a/x-pack/plugins/canvas/public/components/enhance/error_boundary.tsx +++ b/x-pack/plugins/canvas/public/components/enhance/error_boundary.tsx @@ -6,7 +6,7 @@ */ import React, { ErrorInfo, FC, ReactElement } from 'react'; -import { withState, withHandlers, lifecycle, mapProps, compose } from 'recompose'; +import { withState, withHandlers, lifecycle, mapProps, compose } from 'react-recompose'; import PropTypes from 'prop-types'; import { omit } from 'lodash'; diff --git a/x-pack/plugins/canvas/public/components/function_form_list/index.js b/x-pack/plugins/canvas/public/components/function_form_list/index.js index 31db3366ce3b..0ad6651e3f57 100644 --- a/x-pack/plugins/canvas/public/components/function_form_list/index.js +++ b/x-pack/plugins/canvas/public/components/function_form_list/index.js @@ -5,7 +5,7 @@ * 2.0. */ -import { compose, withProps } from 'recompose'; +import { compose, withProps } from 'react-recompose'; import { get } from 'lodash'; import { toExpression } from '@kbn/interpreter'; import { pluginServices } from '../../services'; diff --git a/x-pack/plugins/canvas/public/components/tag_list/index.tsx b/x-pack/plugins/canvas/public/components/tag_list/index.tsx index d201875bf339..9e51758dfd36 100644 --- a/x-pack/plugins/canvas/public/components/tag_list/index.tsx +++ b/x-pack/plugins/canvas/public/components/tag_list/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { compose, withProps } from 'recompose'; +import { compose, withProps } from 'react-recompose'; import { tagsRegistry } from '../../lib/tags_registry'; import { TagList as Component, Props as ComponentProps } from './tag_list'; import { TagSpec } from '../../lib/tag'; diff --git a/x-pack/plugins/canvas/public/components/tool_tip_shortcut/index.tsx b/x-pack/plugins/canvas/public/components/tool_tip_shortcut/index.tsx index 169b8fc1f59a..6bd487a2b779 100644 --- a/x-pack/plugins/canvas/public/components/tool_tip_shortcut/index.tsx +++ b/x-pack/plugins/canvas/public/components/tool_tip_shortcut/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { compose, mapProps } from 'recompose'; +import { compose, mapProps } from 'react-recompose'; import { ToolTipShortcut as Component, Props as ComponentProps } from './tool_tip_shortcut'; import { getClientPlatform } from '../../lib/get_client_platform'; import { keymap } from '../../lib/keymap'; diff --git a/x-pack/plugins/canvas/public/components/workpad_header/edit_menu/edit_menu.tsx b/x-pack/plugins/canvas/public/components/workpad_header/edit_menu/edit_menu.tsx index 42d24770462a..2314f9c3f77b 100644 --- a/x-pack/plugins/canvas/public/components/workpad_header/edit_menu/edit_menu.tsx +++ b/x-pack/plugins/canvas/public/components/workpad_header/edit_menu/edit_menu.tsx @@ -7,7 +7,7 @@ import React, { FC, useContext } from 'react'; import { connect } from 'react-redux'; -import { compose, withHandlers, withProps } from 'recompose'; +import { compose, withHandlers, withProps } from 'react-recompose'; import { Dispatch } from 'redux'; import { State, PositionedElement } from '../../../../types'; import { getClipboardData } from '../../../lib/clipboard'; diff --git a/x-pack/plugins/canvas/public/components/workpad_header/fullscreen_control/index.js b/x-pack/plugins/canvas/public/components/workpad_header/fullscreen_control/index.js index 14baf1db583a..e2946e4a5808 100644 --- a/x-pack/plugins/canvas/public/components/workpad_header/fullscreen_control/index.js +++ b/x-pack/plugins/canvas/public/components/workpad_header/fullscreen_control/index.js @@ -8,7 +8,7 @@ import React, { useContext, useCallback } from 'react'; import { connect, useDispatch } from 'react-redux'; import PropTypes from 'prop-types'; -import { withState, withProps, withHandlers, compose, getContext } from 'recompose'; +import { withState, withProps, withHandlers, compose, getContext } from 'react-recompose'; import { selectToplevelNodes } from '../../../state/actions/transient'; import { getSelectedPageIndex, getPages, getWorkpad } from '../../../state/selectors/workpad'; import { trackCanvasUiMetric, METRIC_TYPE } from '../../../lib/ui_metric'; diff --git a/x-pack/plugins/canvas/public/components/workpad_header/view_menu/view_menu.tsx b/x-pack/plugins/canvas/public/components/workpad_header/view_menu/view_menu.tsx index 7b9c5b767aba..e5ee802e4816 100644 --- a/x-pack/plugins/canvas/public/components/workpad_header/view_menu/view_menu.tsx +++ b/x-pack/plugins/canvas/public/components/workpad_header/view_menu/view_menu.tsx @@ -6,7 +6,7 @@ */ import React, { FC, useCallback, useContext } from 'react'; import { connect, useDispatch } from 'react-redux'; -import { compose, withHandlers } from 'recompose'; +import { compose, withHandlers } from 'react-recompose'; import { Dispatch } from 'redux'; import { zoomHandlerCreators } from '../../../lib/app_handler_creators'; import { State, CanvasWorkpadBoundingBox } from '../../../../types'; diff --git a/x-pack/plugins/canvas/public/components/workpad_page/index.js b/x-pack/plugins/canvas/public/components/workpad_page/index.js index 6839dc0a128e..7cf8bc082318 100644 --- a/x-pack/plugins/canvas/public/components/workpad_page/index.js +++ b/x-pack/plugins/canvas/public/components/workpad_page/index.js @@ -9,7 +9,7 @@ import React, { useContext } from 'react'; import isEqual from 'react-fast-compare'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; -import { branch, compose, shouldUpdate, withProps } from 'recompose'; +import { branch, compose, shouldUpdate, withProps } from 'react-recompose'; import { canUserWrite } from '../../state/selectors/app'; import { getNodes, getPageById, isWriteable } from '../../state/selectors/workpad'; import { not } from '../../lib/aeroelastic/functional'; diff --git a/x-pack/plugins/canvas/public/components/workpad_page/integration_utils.js b/x-pack/plugins/canvas/public/components/workpad_page/integration_utils.js index 804c9f50cd78..25e0280e58a0 100644 --- a/x-pack/plugins/canvas/public/components/workpad_page/integration_utils.js +++ b/x-pack/plugins/canvas/public/components/workpad_page/integration_utils.js @@ -5,7 +5,7 @@ * 2.0. */ -import { shallowEqual } from 'recompose'; +import { shallowEqual } from 'react-recompose'; import { getNodes, getSelectedPage } from '../../state/selectors/workpad'; import { addElement, removeElements, setMultiplePositions } from '../../state/actions/elements'; import { selectToplevelNodes } from '../../state/actions/transient'; diff --git a/x-pack/plugins/canvas/public/components/workpad_page/workpad_interactive_page/index.js b/x-pack/plugins/canvas/public/components/workpad_page/workpad_interactive_page/index.js index 25e64091f4ae..e304ca905a86 100644 --- a/x-pack/plugins/canvas/public/components/workpad_page/workpad_interactive_page/index.js +++ b/x-pack/plugins/canvas/public/components/workpad_page/workpad_interactive_page/index.js @@ -5,7 +5,7 @@ * 2.0. */ -import { compose, lifecycle, withHandlers, withProps, withState } from 'recompose'; +import { compose, lifecycle, withHandlers, withProps, withState } from 'react-recompose'; import { connect } from 'react-redux'; import { createStore } from '../../../lib/aeroelastic/store'; import { updater } from '../../../lib/aeroelastic/layout'; diff --git a/x-pack/plugins/canvas/public/components/workpad_page/workpad_static_page/index.js b/x-pack/plugins/canvas/public/components/workpad_page/workpad_static_page/index.js index 6fd3d1b0c172..bce43f50cfae 100644 --- a/x-pack/plugins/canvas/public/components/workpad_page/workpad_static_page/index.js +++ b/x-pack/plugins/canvas/public/components/workpad_page/workpad_static_page/index.js @@ -5,7 +5,7 @@ * 2.0. */ -import { withProps } from 'recompose'; +import { withProps } from 'react-recompose'; import { simplePositioning } from '../positioning_utils'; import { StaticWorkpadPage } from './static_workpad_page'; diff --git a/x-pack/plugins/canvas/public/components/workpad_shortcuts/index.tsx b/x-pack/plugins/canvas/public/components/workpad_shortcuts/index.tsx index 9b3dfb574f00..8b891b2c302b 100644 --- a/x-pack/plugins/canvas/public/components/workpad_shortcuts/index.tsx +++ b/x-pack/plugins/canvas/public/components/workpad_shortcuts/index.tsx @@ -6,7 +6,7 @@ */ import PropTypes from 'prop-types'; -import { withHandlers, compose } from 'recompose'; +import { withHandlers, compose } from 'react-recompose'; import { WorkpadShortcuts as Component, Props as WorkpadShortcutsProps } from './workpad_shortcuts'; import { groupHandlerCreators, diff --git a/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/index.ts b/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/index.ts index 0aaa9a2b5b92..e2fcef008139 100644 --- a/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/index.ts +++ b/x-pack/plugins/canvas/public/expression_types/arg_types/container_style/index.ts @@ -6,7 +6,7 @@ */ import { ComponentType } from 'react'; -import { withHandlers } from 'recompose'; +import { withHandlers } from 'react-recompose'; import immutable from 'object-path-immutable'; import { get } from 'lodash'; import { templateFromReactComponent } from '../../../lib/template_from_react_component'; diff --git a/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/index.ts b/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/index.ts index 0c6aacb8b76b..140919ed29c0 100644 --- a/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/index.ts +++ b/x-pack/plugins/canvas/public/expression_types/arg_types/series_style/index.ts @@ -6,7 +6,7 @@ */ import PropTypes from 'prop-types'; -import { lifecycle, compose } from 'recompose'; +import { lifecycle, compose } from 'react-recompose'; import { get } from 'lodash'; import { templateFromReactComponent } from '../../../lib/template_from_react_component'; import { SimpleTemplate } from './simple_template'; diff --git a/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap b/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap index 4b483b69445e..cb3c549ed06d 100644 --- a/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap +++ b/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` App renders properly 1`] = `"
markdown mock
markdown mock

Page level controls

My Canvas Workpad

There is a new region landmark with page level controls at the end of the document.

"`; +exports[` App renders properly 1`] = `"
markdown mock
markdown mock

Page level controls

My Canvas Workpad

There is a new region landmark with page level controls at the end of the document.

"`; diff --git a/x-pack/plugins/cases/common/ui/types.ts b/x-pack/plugins/cases/common/ui/types.ts index a6e747ac6e85..3854c14c79de 100644 --- a/x-pack/plugins/cases/common/ui/types.ts +++ b/x-pack/plugins/cases/common/ui/types.ts @@ -119,7 +119,7 @@ export interface ResolvedCase { export type CasesConfigurationUI = Pick< SnakeToCamelCase, - 'closureType' | 'connector' | 'mappings' | 'customFields' | 'id' | 'version' + 'closureType' | 'connector' | 'mappings' | 'customFields' | 'id' | 'version' | 'owner' >; export type CasesConfigurationUICustomField = CasesConfigurationUI['customFields'][number]; diff --git a/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx b/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx index 4d6eb887c86d..27f94319ecbc 100644 --- a/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/columns_popover.test.tsx @@ -14,8 +14,7 @@ import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import { ColumnsPopover } from './columns_popover'; -// FLAKY: https://github.com/elastic/kibana/issues/174682 -describe.skip('ColumnsPopover', () => { +describe('ColumnsPopover', () => { let appMockRenderer: AppMockRenderer; beforeEach(() => { diff --git a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx index 66e8eca5b078..3dac9d201ced 100644 --- a/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/status_filter.test.tsx @@ -19,8 +19,7 @@ const LABELS = { inProgress: i18n.STATUS_IN_PROGRESS, }; -// FLAKY: https://github.com/elastic/kibana/issues/177334 -describe.skip('StatusFilter', () => { +describe('StatusFilter', () => { const onChange = jest.fn(); const defaultProps = { selectedOptionKeys: [], diff --git a/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx b/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx index d84675d8e788..479b8e39d232 100644 --- a/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx +++ b/x-pack/plugins/cases/public/components/case_view/components/suggest_users_popover.test.tsx @@ -18,9 +18,7 @@ import type { AssigneeWithProfile } from '../../user_profiles/types'; jest.mock('../../../containers/user_profiles/api'); -// FLAKY: https://github.com/elastic/kibana/issues/171600 -// FLAKY: https://github.com/elastic/kibana/issues/171601 -describe.skip('SuggestUsersPopover', () => { +describe('SuggestUsersPopover', () => { let appMockRender: AppMockRenderer; let defaultProps: SuggestUsersPopoverProps; diff --git a/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx b/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx index d656bdf499eb..cdaae6f49c5c 100644 --- a/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx +++ b/x-pack/plugins/cases/public/components/category/category_form_field.test.tsx @@ -16,17 +16,7 @@ import { categories } from '../../containers/mock'; import { MAX_CATEGORY_LENGTH } from '../../../common/constants'; import { FormTestComponent } from '../../common/test_utils'; -// FLAKY: https://github.com/elastic/kibana/issues/177791 -// FLAKY: https://github.com/elastic/kibana/issues/177792 -// FLAKY: https://github.com/elastic/kibana/issues/177793 -// FLAKY: https://github.com/elastic/kibana/issues/177794 -// FLAKY: https://github.com/elastic/kibana/issues/177795 -// FLAKY: https://github.com/elastic/kibana/issues/177796 -// FLAKY: https://github.com/elastic/kibana/issues/171605 -// FLAKY: https://github.com/elastic/kibana/issues/171606 -// FLAKY: https://github.com/elastic/kibana/issues/171607 -// FLAKY: https://github.com/elastic/kibana/issues/171608 -describe.skip('Category', () => { +describe('Category', () => { let appMockRender: AppMockRenderer; const onSubmit = jest.fn(); diff --git a/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx b/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx index c44e5fbc2231..e0161e437e70 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/__mock__/index.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { mockedTestProvidersOwner } from '../../../common/mock'; import type { ActionTypeConnector } from '../../../../common/types/domain'; import { ConnectorTypes } from '../../../../common/types/domain'; import type { ActionConnector } from '../../../containers/configure/types'; @@ -17,20 +18,30 @@ export const actionTypes: ActionTypeConnector[] = actionTypesMock; export const searchURL = '?timerange=(global:(linkTo:!(),timerange:(from:1585487656371,fromStr:now-24h,kind:relative,to:1585574056371,toStr:now)),timeline:(linkTo:!(),timerange:(from:1585227005527,kind:absolute,to:1585313405527)))'; -export const useCaseConfigureResponse = { - data: { - closureType: 'close-by-user', - connector: { - fields: null, - id: 'none', - name: 'none', - type: ConnectorTypes.none, - }, - customFields: [], - mappings: [], - version: '', - id: '', +const mockConfigurationData = { + closureType: 'close-by-user', + connector: { + fields: null, + id: 'none', + name: 'none', + type: ConnectorTypes.none, }, + customFields: [], + mappings: [], + version: '', + id: '', + owner: mockedTestProvidersOwner[0], +}; + +export const useCaseConfigureResponse = { + data: mockConfigurationData, + isLoading: false, + isFetching: false, + refetch: jest.fn(), +}; + +export const useGetAllCaseConfigurationsResponse = { + data: [mockConfigurationData], isLoading: false, isFetching: false, refetch: jest.fn(), diff --git a/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx b/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx index 6430c1b1ff2f..4d7183d9985f 100644 --- a/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx +++ b/x-pack/plugins/cases/public/components/connectors/resilient/use_get_incident_types.test.tsx @@ -19,8 +19,7 @@ jest.mock('./api'); const useKibanaMock = useKibana as jest.Mocked; -// FLAKY: https://github.com/elastic/kibana/issues/178119 -describe.skip('useGetIncidentTypes', () => { +describe('useGetIncidentTypes', () => { const { http } = useKibanaMock().services; let appMockRender: AppMockRenderer; diff --git a/x-pack/plugins/cases/public/components/create/custom_fields.test.tsx b/x-pack/plugins/cases/public/components/create/custom_fields.test.tsx index 864ba68ff690..8ab517c497cd 100644 --- a/x-pack/plugins/cases/public/components/create/custom_fields.test.tsx +++ b/x-pack/plugins/cases/public/components/create/custom_fields.test.tsx @@ -15,6 +15,12 @@ import { FormTestComponent } from '../../common/test_utils'; import { customFieldsConfigurationMock } from '../../containers/mock'; import { CustomFields } from './custom_fields'; import * as i18n from './translations'; +import { useGetAllCaseConfigurations } from '../../containers/configure/use_get_all_case_configurations'; +import { useGetAllCaseConfigurationsResponse } from '../configure_cases/__mock__'; + +jest.mock('../../containers/configure/use_get_all_case_configurations'); + +const useGetAllCaseConfigurationsMock = useGetAllCaseConfigurations as jest.Mock; describe('CustomFields', () => { let appMockRender: AppMockRenderer; @@ -23,12 +29,21 @@ describe('CustomFields', () => { beforeEach(() => { jest.clearAllMocks(); appMockRender = createAppMockRenderer(); + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + customFields: customFieldsConfigurationMock, + }, + ], + })); }); it('renders correctly', async () => { appMockRender.render( - + ); @@ -43,9 +58,19 @@ describe('CustomFields', () => { }); it('should not show the custom fields if the configuration is empty', async () => { + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + customFields: [], + }, + ], + })); + appMockRender.render( - + ); @@ -54,11 +79,21 @@ describe('CustomFields', () => { }); it('should sort the custom fields correctly', async () => { - const reversedConfiguration = [...customFieldsConfigurationMock].reverse(); + const reversedCustomFieldsConfiguration = [...customFieldsConfigurationMock].reverse(); + + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + customFields: reversedCustomFieldsConfiguration, + }, + ], + })); appMockRender.render( - + ); @@ -79,7 +114,7 @@ describe('CustomFields', () => { appMockRender.render( - + ); diff --git a/x-pack/plugins/cases/public/components/create/custom_fields.tsx b/x-pack/plugins/cases/public/components/create/custom_fields.tsx index cfc80c125a7b..28cebde65db2 100644 --- a/x-pack/plugins/cases/public/components/create/custom_fields.tsx +++ b/x-pack/plugins/cases/public/components/create/custom_fields.tsx @@ -9,16 +9,34 @@ import React, { useMemo } from 'react'; import { sortBy } from 'lodash'; import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; +import { useFormData } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib'; import type { CasesConfigurationUI } from '../../../common/ui'; import { builderMap as customFieldsBuilderMap } from '../custom_fields/builder'; import * as i18n from './translations'; +import { useCasesContext } from '../cases_context/use_cases_context'; +import { useGetAllCaseConfigurations } from '../../containers/configure/use_get_all_case_configurations'; +import { getConfigurationByOwner } from '../../containers/configure/utils'; interface Props { isLoading: boolean; - customFieldsConfiguration: CasesConfigurationUI['customFields']; } -const CustomFieldsComponent: React.FC = ({ isLoading, customFieldsConfiguration }) => { +const CustomFieldsComponent: React.FC = ({ isLoading }) => { + const { owner } = useCasesContext(); + const [{ selectedOwner }] = useFormData<{ selectedOwner: string }>({ watch: ['selectedOwner'] }); + const { data: configurations, isLoading: isLoadingCaseConfiguration } = + useGetAllCaseConfigurations(); + + const configurationOwner: string | undefined = selectedOwner ? selectedOwner : owner[0]; + const customFieldsConfiguration = useMemo( + () => + getConfigurationByOwner({ + configurations, + owner: configurationOwner, + }).customFields ?? [], + [configurations, configurationOwner] + ); + const sortedCustomFields = useMemo( () => sortCustomFieldsByLabel(customFieldsConfiguration), [customFieldsConfiguration] @@ -33,7 +51,7 @@ const CustomFieldsComponent: React.FC = ({ isLoading, customFieldsConfigu return ( diff --git a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx index 90129b373cf7..ae41ae9ac264 100644 --- a/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx +++ b/x-pack/plugins/cases/public/components/create/flyout/create_case_flyout.test.tsx @@ -39,11 +39,7 @@ const defaultProps = { owner: 'securitySolution', }; -// FLAKY: https://github.com/elastic/kibana/issues/174525 -// FLAKY: https://github.com/elastic/kibana/issues/174526 -// FLAKY: https://github.com/elastic/kibana/issues/174527 -// FLAKY: https://github.com/elastic/kibana/issues/174528 -describe.skip('CreateCaseFlyout', () => { +describe('CreateCaseFlyout', () => { let appMockRenderer: AppMockRenderer; beforeEach(() => { diff --git a/x-pack/plugins/cases/public/components/create/form.test.tsx b/x-pack/plugins/cases/public/components/create/form.test.tsx index 05e778862480..65e5a378f53a 100644 --- a/x-pack/plugins/cases/public/components/create/form.test.tsx +++ b/x-pack/plugins/cases/public/components/create/form.test.tsx @@ -18,8 +18,8 @@ import type { FormProps } from './schema'; import { schema } from './schema'; import type { CreateCaseFormProps } from './form'; import { CreateCaseForm } from './form'; -import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; -import { useCaseConfigureResponse } from '../configure_cases/__mock__'; +import { useGetAllCaseConfigurations } from '../../containers/configure/use_get_all_case_configurations'; +import { useGetAllCaseConfigurationsResponse } from '../configure_cases/__mock__'; import { TestProviders } from '../../common/mock'; import { useGetSupportedActionConnectors } from '../../containers/configure/use_get_supported_action_connectors'; import { useGetTags } from '../../containers/use_get_tags'; @@ -27,13 +27,13 @@ import { useAvailableCasesOwners } from '../app/use_available_owners'; jest.mock('../../containers/use_get_tags'); jest.mock('../../containers/configure/use_get_supported_action_connectors'); -jest.mock('../../containers/configure/use_get_case_configuration'); +jest.mock('../../containers/configure/use_get_all_case_configurations'); jest.mock('../markdown_editor/plugins/lens/use_lens_draft_comment'); jest.mock('../app/use_available_owners'); const useGetTagsMock = useGetTags as jest.Mock; const useGetConnectorsMock = useGetSupportedActionConnectors as jest.Mock; -const useGetCaseConfigurationMock = useGetCaseConfiguration as jest.Mock; +const useGetAllCaseConfigurationsMock = useGetAllCaseConfigurations as jest.Mock; const useAvailableOwnersMock = useAvailableCasesOwners as jest.Mock; const initialCaseValue: FormProps = { @@ -81,7 +81,7 @@ describe('CreateCaseForm', () => { useAvailableOwnersMock.mockReturnValue(['securitySolution', 'observability']); useGetTagsMock.mockReturnValue({ data: ['test'] }); useGetConnectorsMock.mockReturnValue({ isLoading: false, data: connectorsMock }); - useGetCaseConfigurationMock.mockImplementation(() => useCaseConfigureResponse); + useGetAllCaseConfigurationsMock.mockImplementation(() => useGetAllCaseConfigurationsResponse); }); afterEach(() => { @@ -219,12 +219,14 @@ describe('CreateCaseForm', () => { }); it('should render custom fields when available', () => { - useGetCaseConfigurationMock.mockImplementation(() => ({ - ...useCaseConfigureResponse, - data: { - ...useCaseConfigureResponse.data, - customFields: customFieldsConfigurationMock, - }, + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + customFields: customFieldsConfigurationMock, + }, + ], })); const result = render( diff --git a/x-pack/plugins/cases/public/components/create/form.tsx b/x-pack/plugins/cases/public/components/create/form.tsx index fe98b7f0cf67..984bfb669eb5 100644 --- a/x-pack/plugins/cases/public/components/create/form.tsx +++ b/x-pack/plugins/cases/public/components/create/form.tsx @@ -19,7 +19,6 @@ import { useFormContext } from '@kbn/es-ui-shared-plugin/static/forms/hook_form_ import type { ActionConnector } from '../../../common/types/domain'; import type { CasePostRequest } from '../../../common/types/api'; -import type { CasesConfigurationUI } from '../../../common/ui'; import { Title } from './title'; import { Description, fieldName as descriptionFieldName } from './description'; import { Tags } from './tags'; @@ -66,11 +65,8 @@ const MySpinner = styled(EuiLoadingSpinner)` export interface CreateCaseFormFieldsProps { connectors: ActionConnector[]; - customFieldsConfiguration: CasesConfigurationUI['customFields']; - isLoadingCaseConfiguration: boolean; isLoadingConnectors: boolean; withSteps: boolean; - owner: string[]; draftStorageKey: string; } export interface CreateCaseFormProps extends Pick, 'withSteps'> { @@ -87,15 +83,8 @@ export interface CreateCaseFormProps extends Pick = React.memo( - ({ - connectors, - isLoadingConnectors, - withSteps, - owner, - draftStorageKey, - customFieldsConfiguration, - isLoadingCaseConfiguration, - }) => { + ({ connectors, isLoadingConnectors, withSteps, draftStorageKey }) => { + const { owner } = useCasesContext(); const { isSubmitting } = useFormContext(); const { isSyncAlertsEnabled, caseAssignmentAuthorized } = useCasesFeatures(); const availableOwners = useAvailableCasesOwners(); @@ -133,10 +122,7 @@ export const CreateCaseFormFields: React.FC = React.m - + @@ -148,8 +134,6 @@ export const CreateCaseFormFields: React.FC = React.m canShowCaseSolutionSelection, availableOwners, draftStorageKey, - customFieldsConfiguration, - isLoadingCaseConfiguration, ] ); @@ -251,11 +235,8 @@ export const CreateCaseForm: React.FC = React.memo( > diff --git a/x-pack/plugins/cases/public/components/create/form_context.test.tsx b/x-pack/plugins/cases/public/components/create/form_context.test.tsx index 9b23b46b18e3..4c8991f0cb59 100644 --- a/x-pack/plugins/cases/public/components/create/form_context.test.tsx +++ b/x-pack/plugins/cases/public/components/create/form_context.test.tsx @@ -15,13 +15,19 @@ import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; import { usePostCase } from '../../containers/use_post_case'; import { useCreateAttachments } from '../../containers/use_create_attachments'; + import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; +import { useGetAllCaseConfigurations } from '../../containers/configure/use_get_all_case_configurations'; + import { useGetIncidentTypes } from '../connectors/resilient/use_get_incident_types'; import { useGetSeverity } from '../connectors/resilient/use_get_severity'; import { useGetIssueTypes } from '../connectors/jira/use_get_issue_types'; import { useGetChoices } from '../connectors/servicenow/use_get_choices'; import { useGetFieldsByIssueType } from '../connectors/jira/use_get_fields_by_issue_type'; -import { useCaseConfigureResponse } from '../configure_cases/__mock__'; +import { + useCaseConfigureResponse, + useGetAllCaseConfigurationsResponse, +} from '../configure_cases/__mock__'; import { sampleConnectorData, sampleData, @@ -53,6 +59,7 @@ import { ConnectorTypes, CustomFieldTypes, } from '../../../common/types/domain'; +import { useAvailableCasesOwners } from '../app/use_available_owners'; jest.mock('../../containers/use_post_case'); jest.mock('../../containers/use_create_attachments'); @@ -60,6 +67,7 @@ jest.mock('../../containers/use_post_push_to_service'); jest.mock('../../containers/use_get_tags'); jest.mock('../../containers/configure/use_get_supported_action_connectors'); jest.mock('../../containers/configure/use_get_case_configuration'); +jest.mock('../../containers/configure/use_get_all_case_configurations'); jest.mock('../connectors/resilient/use_get_incident_types'); jest.mock('../connectors/resilient/use_get_severity'); jest.mock('../connectors/jira/use_get_issue_types'); @@ -70,9 +78,11 @@ jest.mock('../../common/lib/kibana'); jest.mock('../../containers/user_profiles/api'); jest.mock('../../common/use_license'); jest.mock('../../containers/use_get_categories'); +jest.mock('../app/use_available_owners'); const useGetConnectorsMock = useGetSupportedActionConnectors as jest.Mock; const useGetCaseConfigurationMock = useGetCaseConfiguration as jest.Mock; +const useGetAllCaseConfigurationsMock = useGetAllCaseConfigurations as jest.Mock; const usePostCaseMock = usePostCase as jest.Mock; const useCreateAttachmentsMock = useCreateAttachments as jest.Mock; const usePostPushToServiceMock = usePostPushToService as jest.Mock; @@ -86,6 +96,7 @@ const pushCaseToExternalService = jest.fn(); const useKibanaMock = useKibana as jest.Mocked; const useLicenseMock = useLicense as jest.Mock; const useGetCategoriesMock = useGetCategories as jest.Mock; +const useAvailableOwnersMock = useAvailableCasesOwners as jest.Mock; const sampleId = 'case-id'; @@ -97,11 +108,8 @@ const defaultPostCase = { const defaultCreateCaseForm: CreateCaseFormFieldsProps = { isLoadingConnectors: false, - isLoadingCaseConfiguration: false, connectors: [], - customFieldsConfiguration: [], withSteps: true, - owner: ['securitySolution'], draftStorageKey: 'cases.kibana.createCase.description.markdownEditor', }; @@ -149,8 +157,7 @@ const waitForFormToRender = async (renderer: Screen) => { }); }; -// Failing: See https://github.com/elastic/kibana/issues/146394 -describe.skip('Create case', () => { +describe('Create case', () => { const refetch = jest.fn(); const onFormSubmitSuccess = jest.fn(); const afterCaseCreated = jest.fn(); @@ -199,12 +206,14 @@ describe.skip('Create case', () => { usePostPushToServiceMock.mockImplementation(() => defaultPostPushToService); useGetConnectorsMock.mockReturnValue(sampleConnectorData); useGetCaseConfigurationMock.mockImplementation(() => useCaseConfigureResponse); + useGetAllCaseConfigurationsMock.mockImplementation(() => useGetAllCaseConfigurationsResponse); useGetIncidentTypesMock.mockReturnValue(useGetIncidentTypesResponse); useGetSeverityMock.mockReturnValue(useGetSeverityResponse); useGetIssueTypesMock.mockReturnValue(useGetIssueTypesResponse); useGetFieldsByIssueTypeMock.mockReturnValue(useGetFieldsByIssueTypeResponse); useGetChoicesMock.mockReturnValue(useGetChoicesResponse); useGetCategoriesMock.mockReturnValue({ isLoading: false, data: categories }); + useAvailableOwnersMock.mockReturnValue(['securitySolution', 'observability', 'cases']); (useGetTags as jest.Mock).mockImplementation(() => ({ data: sampleTags, @@ -437,20 +446,22 @@ describe.skip('Create case', () => { }); it('should submit form with custom fields', async () => { - useGetCaseConfigurationMock.mockImplementation(() => ({ - ...useCaseConfigureResponse, - data: { - ...useCaseConfigureResponse.data, - customFields: [ - ...customFieldsConfigurationMock, - { - key: 'my_custom_field_key', - type: CustomFieldTypes.TEXT, - label: 'my custom field label', - required: false, - }, - ], - }, + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + customFields: [ + ...customFieldsConfigurationMock, + { + key: 'my_custom_field_key', + type: CustomFieldTypes.TEXT, + label: 'my custom field label', + required: false, + }, + ], + }, + ], })); appMockRender.render( @@ -466,18 +477,20 @@ describe.skip('Create case', () => { const textField = customFieldsConfigurationMock[0]; const toggleField = customFieldsConfigurationMock[1]; - expect(screen.getByTestId('create-case-custom-fields')).toBeInTheDocument(); + expect(await screen.findByTestId('create-case-custom-fields')).toBeInTheDocument(); - userEvent.paste( - screen.getByTestId(`${textField.key}-${textField.type}-create-custom-field`), - 'My text test value 1' + const textCustomField = await screen.findByTestId( + `${textField.key}-${textField.type}-create-custom-field` ); + userEvent.clear(textCustomField); + userEvent.paste(textCustomField, 'My text test value 1'); + userEvent.click( - screen.getByTestId(`${toggleField.key}-${toggleField.type}-create-custom-field`) + await screen.findByTestId(`${toggleField.key}-${toggleField.type}-create-custom-field`) ); - userEvent.click(screen.getByTestId('create-case-submit')); + userEvent.click(await screen.findByTestId('create-case-submit')); await waitFor(() => expect(postCase).toHaveBeenCalled()); @@ -485,7 +498,10 @@ describe.skip('Create case', () => { request: { ...sampleDataWithoutTags, customFields: [ - ...customFieldsMock, + customFieldsMock[0], + { ...customFieldsMock[1], value: false }, // toggled the default + customFieldsMock[2], + { ...customFieldsMock[3], value: false }, { key: 'my_custom_field_key', type: CustomFieldTypes.TEXT, @@ -496,6 +512,120 @@ describe.skip('Create case', () => { }); }); + it('should change custom fields based on the selected owner', async () => { + appMockRender = createAppMockRenderer({ owner: [] }); + + const securityCustomField = { + key: 'security_custom_field', + type: CustomFieldTypes.TEXT, + label: 'security custom field', + required: false, + }; + const o11yCustomField = { + key: 'o11y_field_key', + type: CustomFieldTypes.TEXT, + label: 'observability custom field', + required: false, + }; + const stackCustomField = { + key: 'stack_field_key', + type: CustomFieldTypes.TEXT, + label: 'stack custom field', + required: false, + }; + + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data[0], + owner: 'securitySolution', + customFields: [securityCustomField], + }, + { + ...useGetAllCaseConfigurationsResponse.data[0], + owner: 'observability', + customFields: [o11yCustomField], + }, + { + ...useGetAllCaseConfigurationsResponse.data[0], + owner: 'cases', + customFields: [stackCustomField], + }, + ], + })); + + appMockRender.render( + + + + + ); + + await waitForFormToRender(screen); + await fillFormReactTestingLib({ renderer: screen }); + + const createCaseCustomFields = await screen.findByTestId('create-case-custom-fields'); + + // the default selectedOwner is securitySolution + // only the security custom field should be displayed + expect( + await within(createCaseCustomFields).findByTestId( + `${securityCustomField.key}-${securityCustomField.type}-create-custom-field` + ) + ).toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${o11yCustomField.key}-${o11yCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${stackCustomField.key}-${stackCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + + const caseOwnerSelector = await screen.findByTestId('caseOwnerSelector'); + + userEvent.click(await within(caseOwnerSelector).findByLabelText('Observability')); + + // only the o11y custom field should be displayed + expect( + await within(createCaseCustomFields).findByTestId( + `${o11yCustomField.key}-${o11yCustomField.type}-create-custom-field` + ) + ).toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${securityCustomField.key}-${securityCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${stackCustomField.key}-${stackCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + + userEvent.click(await within(caseOwnerSelector).findByLabelText('Stack')); + + // only the stack custom field should be displayed + expect( + await within(createCaseCustomFields).findByTestId( + `${stackCustomField.key}-${stackCustomField.type}-create-custom-field` + ) + ).toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${securityCustomField.key}-${securityCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + expect( + await within(createCaseCustomFields).queryByTestId( + `${o11yCustomField.key}-${o11yCustomField.type}-create-custom-field` + ) + ).not.toBeInTheDocument(); + }); + it('should select the default connector set in the configuration', async () => { useGetCaseConfigurationMock.mockImplementation(() => ({ ...useCaseConfigureResponse, @@ -510,6 +640,21 @@ describe.skip('Create case', () => { }, })); + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data, + connector: { + id: 'servicenow-1', + name: 'SN', + type: ConnectorTypes.serviceNowITSM, + fields: null, + }, + }, + ], + })); + useGetConnectorsMock.mockReturnValue({ ...sampleConnectorData, data: connectorsMock, @@ -562,6 +707,21 @@ describe.skip('Create case', () => { }, })); + useGetAllCaseConfigurationsMock.mockImplementation(() => ({ + ...useGetAllCaseConfigurationsResponse, + data: [ + { + ...useGetAllCaseConfigurationsResponse.data, + connector: { + id: 'not-exist', + name: 'SN', + type: ConnectorTypes.serviceNowITSM, + fields: null, + }, + }, + ], + })); + useGetConnectorsMock.mockReturnValue({ ...sampleConnectorData, data: connectorsMock, diff --git a/x-pack/plugins/cases/public/components/create/form_context.tsx b/x-pack/plugins/cases/public/components/create/form_context.tsx index b48bcce96bec..04a327868418 100644 --- a/x-pack/plugins/cases/public/components/create/form_context.tsx +++ b/x-pack/plugins/cases/public/components/create/form_context.tsx @@ -15,7 +15,7 @@ import { getNoneConnector, normalizeActionConnector } from '../configure_cases/u import { usePostCase } from '../../containers/use_post_case'; import { usePostPushToService } from '../../containers/use_post_push_to_service'; -import type { CaseUI, CaseUICustomField } from '../../containers/types'; +import type { CasesConfigurationUI, CaseUI, CaseUICustomField } from '../../containers/types'; import type { CasePostRequest } from '../../../common/types/api'; import type { UseCreateAttachments } from '../../containers/use_create_attachments'; import { useCreateAttachments } from '../../containers/use_create_attachments'; @@ -31,7 +31,7 @@ import { useAvailableCasesOwners } from '../app/use_available_owners'; import type { CaseAttachmentsWithoutOwner } from '../../types'; import { useGetSupportedActionConnectors } from '../../containers/configure/use_get_supported_action_connectors'; import { useCreateCaseWithAttachmentsTransaction } from '../../common/apm/use_cases_transactions'; -import { useGetCaseConfiguration } from '../../containers/configure/use_get_case_configuration'; +import { useGetAllCaseConfigurations } from '../../containers/configure/use_get_all_case_configurations'; import { useApplication } from '../../common/lib/kibana/use_application'; const initialCaseValue: FormProps = { @@ -66,10 +66,7 @@ export const FormContext: React.FC = ({ }) => { const { data: connectors = [], isLoading: isLoadingConnectors } = useGetSupportedActionConnectors(); - const { - data: { customFields: customFieldsConfiguration }, - isLoading: isLoadingCaseConfiguration, - } = useGetCaseConfiguration(); + const { data: allConfigurations } = useGetAllCaseConfigurations(); const { owner } = useCasesContext(); const { appId } = useApplication(); const { isSyncAlertsEnabled } = useCasesFeatures(); @@ -98,15 +95,20 @@ export const FormContext: React.FC = ({ }; const transformCustomFieldsData = useCallback( - (customFields: Record) => { + ( + customFields: Record, + selectedCustomFieldsConfiguration: CasesConfigurationUI['customFields'] + ) => { const transformedCustomFields: CaseUI['customFields'] = []; - if (!customFields || !customFieldsConfiguration.length) { + if (!customFields || !selectedCustomFieldsConfiguration.length) { return []; } for (const [key, value] of Object.entries(customFields)) { - const configCustomField = customFieldsConfiguration.find((item) => item.key === key); + const configCustomField = selectedCustomFieldsConfiguration.find( + (item) => item.key === key + ); if (configCustomField) { transformedCustomFields.push({ key: configCustomField.key, @@ -118,7 +120,7 @@ export const FormContext: React.FC = ({ return transformedCustomFields; }, - [customFieldsConfiguration] + [] ); const submitCase = useCallback( @@ -142,7 +144,19 @@ export const FormContext: React.FC = ({ ? normalizeActionConnector(caseConnector, fields) : getNoneConnector(); - const transformedCustomFields = transformCustomFieldsData(customFields); + const configurationOwner: string | undefined = selectedOwner ? selectedOwner : owner[0]; + const selectedConfiguration = allConfigurations.find( + (element: CasesConfigurationUI) => element.owner === configurationOwner + ); + + const customFieldsConfiguration = selectedConfiguration + ? selectedConfiguration.customFields + : []; + + const transformedCustomFields = transformCustomFieldsData( + customFields, + customFieldsConfiguration ?? [] + ); const trimmedData = trimUserFormData(userFormData); @@ -184,17 +198,18 @@ export const FormContext: React.FC = ({ [ isSyncAlertsEnabled, connectors, + owner, + availableOwners, startTransaction, appId, attachments, + transformCustomFieldsData, + allConfigurations, postCase, - owner, - availableOwners, afterCaseCreated, onSuccess, createAttachments, pushCaseToExternalService, - transformCustomFieldsData, ] ); @@ -214,18 +229,10 @@ export const FormContext: React.FC = ({ React.cloneElement(child, { connectors, isLoadingConnectors, - customFieldsConfiguration, - isLoadingCaseConfiguration, }) ) : null, - [ - children, - connectors, - isLoadingConnectors, - customFieldsConfiguration, - isLoadingCaseConfiguration, - ] + [children, connectors, isLoadingConnectors] ); return (
= ({ {!customFields.length ? ( - + {i18n.NO_CUSTOM_FIELDS} diff --git a/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx b/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx index 84f9547436bd..1af31cf13dd5 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/toggle/edit.test.tsx @@ -14,8 +14,7 @@ import { customFieldsMock, customFieldsConfigurationMock } from '../../../contai import userEvent from '@testing-library/user-event'; import type { CaseCustomFieldToggle } from '../../../../common/types/domain'; -// FLAKY: https://github.com/elastic/kibana/issues/175112 -describe.skip('Edit ', () => { +describe('Edit ', () => { const onSubmit = jest.fn(); beforeEach(() => { diff --git a/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx b/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx index d53931d78962..fee6fdc8d155 100644 --- a/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx +++ b/x-pack/plugins/cases/public/components/edit_connector/push_button.test.tsx @@ -25,9 +25,7 @@ const defaultProps = { pushToService, }; -// FLAKY: https://github.com/elastic/kibana/issues/176671 -// FLAKY: https://github.com/elastic/kibana/issues/176672 -describe.skip('PushButton ', () => { +describe('PushButton ', () => { let appMockRender: AppMockRenderer; beforeEach(() => { diff --git a/x-pack/plugins/cases/public/components/files/file_type.test.tsx b/x-pack/plugins/cases/public/components/files/file_type.test.tsx index d9c58fd6cab2..6a96870f14cf 100644 --- a/x-pack/plugins/cases/public/components/files/file_type.test.tsx +++ b/x-pack/plugins/cases/public/components/files/file_type.test.tsx @@ -17,8 +17,7 @@ import { basicCase, basicFileMock } from '../../containers/mock'; import { getFileType } from './file_type'; import { FILE_ATTACHMENT_TYPE } from '../../../common/constants'; -// Failing: See https://github.com/elastic/kibana/issues/175841 -describe.skip('getFileType', () => { +describe('getFileType', () => { const fileType = getFileType(); it('invalid props return blank FileAttachmentViewObject', () => { diff --git a/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx b/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx index e50f0df9d0f4..5478f5b91882 100644 --- a/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx +++ b/x-pack/plugins/cases/public/components/recent_cases/filters/index.tsx @@ -67,6 +67,7 @@ export const RecentCasesFilters = React.memo<{ onChange={onChange} options={options} value={filterBy} + aria-label={i18n.RECENT_CASES} /> ); }); diff --git a/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx b/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx index b0985bbc097c..fa7e0213166e 100644 --- a/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx +++ b/x-pack/plugins/cases/public/components/use_create_case_modal/index.test.tsx @@ -19,7 +19,8 @@ jest.mock('../../common/lib/kibana'); const useKibanaMock = useKibana as jest.Mocked; const onCaseCreated = jest.fn(); -describe('useCreateCaseModal', () => { +// FLAKY: https://github.com/elastic/kibana/issues/174205 +describe.skip('useCreateCaseModal', () => { let navigateToApp: jest.Mock; beforeEach(() => { diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx index 64dfa08944ea..ac2d1d245b56 100644 --- a/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/alert_property_actions.test.tsx @@ -17,8 +17,7 @@ import { } from '../../../common/mock'; import { AlertPropertyActions } from './alert_property_actions'; -// FLAKY: https://github.com/elastic/kibana/issues/174667 -describe.skip('AlertPropertyActions', () => { +describe('AlertPropertyActions', () => { let appMock: AppMockRenderer; const props = { diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx index 680139573a13..a1f407a1c98c 100644 --- a/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/registered_attachments_property_actions.test.tsx @@ -18,7 +18,7 @@ import { import { RegisteredAttachmentsPropertyActions } from './registered_attachments_property_actions'; import { AttachmentActionType } from '../../../client/attachment_framework/types'; -// FLAKY: https://github.com/elastic/kibana/issues/174384 +// Failing: See https://github.com/elastic/kibana/issues/174384 describe.skip('RegisteredAttachmentsPropertyActions', () => { let appMock: AppMockRenderer; diff --git a/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx b/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx index c24d26fa3b28..8fc3b0cb8adc 100644 --- a/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx +++ b/x-pack/plugins/cases/public/components/user_actions/property_actions/user_comment_property_actions.test.tsx @@ -17,8 +17,7 @@ import { import { UserCommentPropertyActions } from './user_comment_property_actions'; import { waitFor } from '@testing-library/react'; -// FLAKY: https://github.com/elastic/kibana/issues/175310 -describe.skip('UserCommentPropertyActions', () => { +describe('UserCommentPropertyActions', () => { let appMock: AppMockRenderer; const props = { diff --git a/x-pack/plugins/cases/public/containers/configure/api.test.ts b/x-pack/plugins/cases/public/containers/configure/api.test.ts index 435feee55c89..8a7659c38a27 100644 --- a/x-pack/plugins/cases/public/containers/configure/api.test.ts +++ b/x-pack/plugins/cases/public/containers/configure/api.test.ts @@ -18,7 +18,6 @@ import { casesConfigurationsMock, } from './mock'; import { ConnectorTypes } from '../../../common/types/domain'; -import { SECURITY_SOLUTION_OWNER } from '../../../common/constants'; import { KibanaServices } from '../../common/lib/kibana'; import { actionTypesMock, connectorsMock } from '../../common/mock/connectors'; @@ -57,29 +56,24 @@ describe('Case Configuration API', () => { }); test('check url, method, signal', async () => { - await getCaseConfigure({ signal: abortCtrl.signal, owner: [SECURITY_SOLUTION_OWNER] }); + await getCaseConfigure({ signal: abortCtrl.signal }); expect(fetchMock).toHaveBeenCalledWith('/api/cases/configure', { method: 'GET', signal: abortCtrl.signal, - query: { - owner: [SECURITY_SOLUTION_OWNER], - }, }); }); test('happy path', async () => { const resp = await getCaseConfigure({ signal: abortCtrl.signal, - owner: [SECURITY_SOLUTION_OWNER], }); - expect(resp).toEqual(casesConfigurationsMock); + expect(resp).toEqual([casesConfigurationsMock]); }); test('return null on empty response', async () => { fetchMock.mockResolvedValue({}); const resp = await getCaseConfigure({ signal: abortCtrl.signal, - owner: [SECURITY_SOLUTION_OWNER], }); expect(resp).toBe(null); }); diff --git a/x-pack/plugins/cases/public/containers/configure/api.ts b/x-pack/plugins/cases/public/containers/configure/api.ts index 975cec77a3a1..ae72d839d3ac 100644 --- a/x-pack/plugins/cases/public/containers/configure/api.ts +++ b/x-pack/plugins/cases/public/containers/configure/api.ts @@ -41,23 +41,23 @@ export const getSupportedActionConnectors = async ({ export const getCaseConfigure = async ({ signal, - owner, -}: ApiProps & { owner: string[] }): Promise => { +}: ApiProps): Promise => { const response = await KibanaServices.get().http.fetch(CASE_CONFIGURE_URL, { method: 'GET', signal, - query: { ...(owner.length > 0 ? { owner } : {}) }, }); if (!isEmpty(response)) { const decodedConfigs = decodeCaseConfigurationsResponse(response); if (Array.isArray(decodedConfigs) && decodedConfigs.length > 0) { - const configuration = convertToCamelCase< - GetConfigureResponse[number], - SnakeToCamelCase - >(decodedConfigs[0]); - - return convertConfigureResponseToCasesConfigure(configuration); + return decodedConfigs.map((decodedConfig) => { + const configuration = convertToCamelCase< + GetConfigureResponse[number], + SnakeToCamelCase + >(decodedConfig); + + return convertConfigureResponseToCasesConfigure(configuration); + }); } } @@ -115,7 +115,7 @@ export const fetchActionTypes = async ({ signal }: ApiProps): Promise ): CasesConfigurationUI => { - const { id, version, mappings, customFields, closureType, connector } = configuration; + const { id, version, mappings, customFields, closureType, connector, owner } = configuration; - return { id, version, mappings, customFields, closureType, connector }; + return { id, version, mappings, customFields, closureType, connector, owner }; }; diff --git a/x-pack/plugins/cases/public/containers/configure/mock.ts b/x-pack/plugins/cases/public/containers/configure/mock.ts index 79e423e42db8..a5946ca31964 100644 --- a/x-pack/plugins/cases/public/containers/configure/mock.ts +++ b/x-pack/plugins/cases/public/containers/configure/mock.ts @@ -74,4 +74,5 @@ export const casesConfigurationsMock: CasesConfigurationUI = { mappings: [], version: 'WzHJ12', customFields: customFieldsConfigurationMock, + owner: 'securitySolution', }; diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts new file mode 100644 index 000000000000..fdd46d640e5f --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.test.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react-hooks'; +import { useGetAllCaseConfigurations } from './use_get_all_case_configurations'; +import * as api from './api'; +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; + +jest.mock('./api'); + +describe('Use get all case configurations hook', () => { + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('returns all available configurations', async () => { + const spy = jest.spyOn(api, 'getCaseConfigure'); + spy.mockResolvedValue([ + // @ts-expect-error: no need to define all properties + { id: 'my-configuration-1', owner: '1' }, + // @ts-expect-error: no need to define all properties + { id: 'my-configuration-2', owner: '2' }, + // @ts-expect-error: no need to define all properties + { id: 'my-configuration-3', owner: '3' }, + ]); + + const { result, waitForNextUpdate } = renderHook(() => useGetAllCaseConfigurations(), { + wrapper: appMockRender.AppWrapper, + }); + + await waitForNextUpdate(); + + /** + * Ensures that the initial data is returned≠ + * before fetching + */ + // @ts-expect-error: data is defined + expect(result.all[0].data).toEqual([ + { + closureType: 'close-by-user', + connector: { fields: null, id: 'none', name: 'none', type: '.none' }, + customFields: [], + id: '', + mappings: [], + version: '', + owner: '', + }, + ]); + + /** + * The response after fetching + */ + // @ts-expect-error: data is defined + expect(result.all[1].data).toEqual([ + { id: 'my-configuration-1', owner: '1' }, + { id: 'my-configuration-2', owner: '2' }, + { id: 'my-configuration-3', owner: '3' }, + ]); + }); + + it('returns the initial configuration if none is available', async () => { + const spy = jest.spyOn(api, 'getCaseConfigure'); + spy.mockResolvedValue([]); + + const { result, waitForNextUpdate } = renderHook(() => useGetAllCaseConfigurations(), { + wrapper: appMockRender.AppWrapper, + }); + + await waitForNextUpdate(); + + /** + * Ensures that the initial data is returned≠ + * before fetching + */ + // @ts-expect-error: data is defined + expect(result.all[0].data).toEqual([ + { + closureType: 'close-by-user', + connector: { fields: null, id: 'none', name: 'none', type: '.none' }, + customFields: [], + id: '', + mappings: [], + version: '', + owner: '', + }, + ]); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.tsx b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.tsx new file mode 100644 index 000000000000..700c1df858cd --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/use_get_all_case_configurations.tsx @@ -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 type { CasesConfigurationUI } from '../types'; +import { initialConfiguration } from './utils'; +import { useGetCaseConfigurationsQuery } from './use_get_case_configurations_query'; + +const transformConfiguration = (data: CasesConfigurationUI[] | null): CasesConfigurationUI[] => { + if (data) { + return data; + } + + return [initialConfiguration]; +}; + +export const useGetAllCaseConfigurations = () => + useGetCaseConfigurationsQuery({ select: transformConfiguration }); + +export type UseGetAllCaseConfigurations = ReturnType; diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.test.tsx b/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.test.tsx index d625e247cb57..e504bd22e9cc 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.test.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.test.tsx @@ -8,13 +8,11 @@ import { renderHook } from '@testing-library/react-hooks'; import { useGetCaseConfiguration } from './use_get_case_configuration'; import * as api from './api'; -import { waitFor } from '@testing-library/react'; -import { useToasts } from '../../common/lib/kibana'; import type { AppMockRenderer } from '../../common/mock'; -import { createAppMockRenderer } from '../../common/mock'; +import { mockedTestProvidersOwner, createAppMockRenderer } from '../../common/mock'; +import { initialConfiguration } from './utils'; jest.mock('./api'); -jest.mock('../../common/lib/kibana'); describe('Use get case configuration hook', () => { let appMockRender: AppMockRenderer; @@ -24,44 +22,59 @@ describe('Use get case configuration hook', () => { jest.clearAllMocks(); }); - it('calls the api when invoked with the correct parameters', async () => { + it('returns a configuration matching the owner', async () => { const spy = jest.spyOn(api, 'getCaseConfigure'); + const targetConfiguration = { + ...initialConfiguration, + id: 'my-new-configuration-3', + owner: mockedTestProvidersOwner[0], // used in the AppMockRenderer + }; + spy.mockResolvedValue([ + { ...initialConfiguration, id: 'my-new-configuration-1', owner: 'foo' }, + { ...initialConfiguration, id: 'my-new-configuration-2', owner: 'bar' }, + targetConfiguration, + ]); - const { waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { + const { result, waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { wrapper: appMockRender.AppWrapper, }); + await waitForNextUpdate(); - expect(spy).toHaveBeenCalledWith({ - owner: ['securitySolution'], - signal: expect.any(AbortSignal), - }); + /** + * The response after fetching + */ + expect(result.current.data).toEqual(targetConfiguration); }); - it('shows a toast error when the api return an error', async () => { - const addError = jest.fn(); - (useToasts as jest.Mock).mockReturnValue({ addError }); - - const spy = jest.spyOn(api, 'getCaseConfigure').mockRejectedValue(new Error('error')); + it('returns the initial configuration if none matches the owner', async () => { + const spy = jest.spyOn(api, 'getCaseConfigure'); + const targetConfiguration = { + ...initialConfiguration, + id: 'my-new-configuration-1', + owner: 'foo', + }; + spy.mockResolvedValue([ + targetConfiguration, + { ...initialConfiguration, id: 'my-new-configuration-2', owner: 'bar' }, + ]); - const { waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { + const { result, waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { wrapper: appMockRender.AppWrapper, }); - await waitForNextUpdate(); - await waitFor(() => { - expect(spy).toHaveBeenCalledWith({ - owner: ['securitySolution'], - signal: expect.any(AbortSignal), - }); + await waitForNextUpdate(); - expect(addError).toHaveBeenCalled(); - }); + /** + * The response after fetching + */ + expect(result.current.data).toEqual(initialConfiguration); }); - it('returns the default if the response is null', async () => { + it('returns the initial configuration if none exists', async () => { const spy = jest.spyOn(api, 'getCaseConfigure'); - spy.mockResolvedValue(null); + + spy.mockResolvedValue([]); const { result, waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { wrapper: appMockRender.AppWrapper, @@ -69,20 +82,17 @@ describe('Use get case configuration hook', () => { await waitForNextUpdate(); - expect(result.current.data).toEqual({ - closureType: 'close-by-user', - connector: { fields: null, id: 'none', name: 'none', type: '.none' }, - customFields: [], - id: '', - mappings: [], - version: '', - }); + /** + * The response after fetching + */ + expect(result.current.data).toEqual(initialConfiguration); }); - it('sets the initial data correctly', async () => { + it('returns the initial configuration if the owner is undefined', async () => { + appMockRender = createAppMockRenderer({ owner: [] }); const spy = jest.spyOn(api, 'getCaseConfigure'); - // @ts-expect-error: no need to define all properties - spy.mockResolvedValue({ id: 'my-new-configuration' }); + + spy.mockResolvedValue([]); const { result, waitForNextUpdate } = renderHook(() => useGetCaseConfiguration(), { wrapper: appMockRender.AppWrapper, @@ -90,24 +100,9 @@ describe('Use get case configuration hook', () => { await waitForNextUpdate(); - /** - * Ensures that the initial data are returned - * before fetching - */ - // @ts-expect-error: data are defined - expect(result.all[0].data).toEqual({ - closureType: 'close-by-user', - connector: { fields: null, id: 'none', name: 'none', type: '.none' }, - customFields: [], - id: '', - mappings: [], - version: '', - }); - /** * The response after fetching */ - // @ts-expect-error: data are defined - expect(result.all[1].data).toEqual({ id: 'my-new-configuration' }); + expect(result.current.data).toEqual(initialConfiguration); }); }); diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.tsx b/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.tsx index 3a7656ca051e..500005f291a8 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_get_case_configuration.tsx @@ -4,54 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { useQuery } from '@tanstack/react-query'; -import { ConnectorTypes } from '../../../common'; -import * as i18n from './translations'; -import { getCaseConfigure } from './api'; -import type { ServerError } from '../../types'; -import { casesQueriesKeys } from '../constants'; -import type { CasesConfigurationUI } from '../types'; -import { useCasesToast } from '../../common/use_cases_toast'; import { useCasesContext } from '../../components/cases_context/use_cases_context'; - -const initialConfiguration: CasesConfigurationUI = { - closureType: 'close-by-user', - connector: { - fields: null, - id: 'none', - name: 'none', - type: ConnectorTypes.none, - }, - customFields: [], - mappings: [], - version: '', - id: '', -}; - -const transformConfiguration = (data: CasesConfigurationUI | null): CasesConfigurationUI => { - if (data) { - return data; - } - - return initialConfiguration; -}; +import type { CasesConfigurationUI } from '../types'; +import { useGetCaseConfigurationsQuery } from './use_get_case_configurations_query'; +import { getConfigurationByOwner } from './utils'; export const useGetCaseConfiguration = () => { const { owner } = useCasesContext(); - const { showErrorToast } = useCasesToast(); - return useQuery( - casesQueriesKeys.configuration({ owner }), - ({ signal }) => getCaseConfigure({ owner, signal }), - { - select: transformConfiguration, - onError: (error: ServerError) => { - showErrorToast(error, { title: i18n.ERROR_TITLE }); - }, - initialData: initialConfiguration, - } - ); + return useGetCaseConfigurationsQuery({ + select: (data: CasesConfigurationUI[] | null) => + getConfigurationByOwner({ configurations: data, owner: owner[0] }), + }); }; export type UseGetCaseConfiguration = ReturnType; diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.test.ts b/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.test.ts new file mode 100644 index 000000000000..adc06ad840d9 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.test.ts @@ -0,0 +1,82 @@ +/* + * Copyright 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 { renderHook } from '@testing-library/react-hooks'; +import { useGetCaseConfigurationsQuery } from './use_get_case_configurations_query'; +import * as api from './api'; +import { waitFor } from '@testing-library/react'; +import { useToasts } from '../../common/lib/kibana'; +import type { AppMockRenderer } from '../../common/mock'; +import { createAppMockRenderer } from '../../common/mock'; +import { initialConfiguration } from './utils'; + +jest.mock('./api'); +jest.mock('../../common/lib/kibana'); + +describe('Use get case configurations query hook', () => { + let appMockRender: AppMockRenderer; + + beforeEach(() => { + appMockRender = createAppMockRenderer(); + jest.clearAllMocks(); + }); + + it('calls the api when invoked with the correct parameters', async () => { + const spy = jest.spyOn(api, 'getCaseConfigure'); + + renderHook( + () => useGetCaseConfigurationsQuery({ select: (data) => data || initialConfiguration }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + await waitFor(() => { + expect(spy).toHaveBeenCalledWith({ + signal: expect.any(AbortSignal), + }); + }); + }); + + it('shows a toast error when the api return an error', async () => { + const addError = jest.fn(); + (useToasts as jest.Mock).mockReturnValue({ addError }); + + const spy = jest.spyOn(api, 'getCaseConfigure').mockRejectedValue(new Error('error')); + + renderHook( + () => useGetCaseConfigurationsQuery({ select: (data) => data || initialConfiguration }), + { + wrapper: appMockRender.AppWrapper, + } + ); + + await waitFor(() => { + expect(spy).toHaveBeenCalledWith({ + signal: expect.any(AbortSignal), + }); + + expect(addError).toHaveBeenCalled(); + }); + }); + + it('calls select correctly', async () => { + const select = jest.fn(); + const spy = jest.spyOn(api, 'getCaseConfigure'); + const data = [{ ...initialConfiguration, id: 'my-new-configuration' }]; + + spy.mockResolvedValue(data); + + renderHook(() => useGetCaseConfigurationsQuery({ select }), { + wrapper: appMockRender.AppWrapper, + }); + + await waitFor(() => { + expect(select).toHaveBeenCalledWith(data); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.tsx b/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.tsx new file mode 100644 index 000000000000..54caf69d1ab0 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/use_get_case_configurations_query.tsx @@ -0,0 +1,37 @@ +/* + * Copyright 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 { useQuery } from '@tanstack/react-query'; +import * as i18n from './translations'; +import { getCaseConfigure } from './api'; +import type { ServerError } from '../../types'; +import { casesQueriesKeys } from '../constants'; +import type { CasesConfigurationUI } from '../types'; +import { useCasesToast } from '../../common/use_cases_toast'; +import { initialConfiguration } from './utils'; + +export const useGetCaseConfigurationsQuery = ({ + select, +}: { + select: (data: CasesConfigurationUI[] | null) => T; +}) => { + const { showErrorToast } = useCasesToast(); + + return useQuery( + casesQueriesKeys.configuration({}), + ({ signal }) => getCaseConfigure({ signal }), + { + select, + onError: (error: ServerError) => { + showErrorToast(error, { title: i18n.ERROR_TITLE }); + }, + initialData: [initialConfiguration], + } + ); +}; + +export type UseGetAllCaseConfigurations = ReturnType; diff --git a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx index a5eed1e41a00..509b0e72cd1f 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.test.tsx @@ -12,7 +12,7 @@ import * as api from './api'; import { useToasts } from '../../common/lib/kibana'; import type { AppMockRenderer } from '../../common/mock'; import { createAppMockRenderer } from '../../common/mock'; -import { ConnectorTypes, SECURITY_SOLUTION_OWNER } from '../../../common'; +import { ConnectorTypes } from '../../../common'; import { casesQueriesKeys } from '../constants'; jest.mock('./api'); @@ -130,9 +130,7 @@ describe('useCreateAttachments', () => { await waitForNextUpdate(); - expect(queryClientSpy).toHaveBeenCalledWith( - casesQueriesKeys.configuration({ owner: [SECURITY_SOLUTION_OWNER] }) - ); + expect(queryClientSpy).toHaveBeenCalledWith(casesQueriesKeys.configuration({})); }); it('shows the success toaster', async () => { diff --git a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx index 65f2c63800cd..95162d23aa39 100644 --- a/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx +++ b/x-pack/plugins/cases/public/containers/configure/use_persist_configuration.tsx @@ -47,7 +47,7 @@ export const usePersistConfiguration = () => { { mutationKey: casesMutationsKeys.persistCaseConfiguration, onSuccess: () => { - queryClient.invalidateQueries(casesQueriesKeys.configuration({ owner })); + queryClient.invalidateQueries(casesQueriesKeys.configuration({})); showSuccessToast(i18n.SUCCESS_CONFIGURE); }, onError: (error: ServerError) => { diff --git a/x-pack/plugins/cases/public/containers/configure/utils.test.ts b/x-pack/plugins/cases/public/containers/configure/utils.test.ts new file mode 100644 index 000000000000..c5ed1c260cc3 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/utils.test.ts @@ -0,0 +1,50 @@ +/* + * Copyright 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 { CasesConfigurationUI } from '../types'; +import { getConfigurationByOwner, initialConfiguration } from './utils'; + +describe('Utils', () => { + describe('getConfigurationByOwner', () => { + it('returns the initial configuration if there are no configurations', () => { + expect(getConfigurationByOwner({ configurations: [], owner: 'foobar' })).toBe( + initialConfiguration + ); + }); + + it('returns the initial configuration if the owner is not found', () => { + expect( + getConfigurationByOwner({ + configurations: [{ owner: 'foo' }, { owner: 'bar' }] as CasesConfigurationUI[], + owner: 'foobar', + }) + ).toBe(initialConfiguration); + }); + + it('returns the expected configuration when searching by owner', () => { + expect( + getConfigurationByOwner({ + configurations: [{ owner: 'foobar' }, { owner: 'bar' }] as CasesConfigurationUI[], + owner: 'foobar', + }) + ).toMatchInlineSnapshot(` + Object { + "owner": "foobar", + } + `); + }); + + it('returns the initial configuration if the owner is undefined', () => { + expect( + getConfigurationByOwner({ + configurations: [{ owner: 'foobar' }, { owner: 'bar' }] as CasesConfigurationUI[], + owner: undefined, + }) + ).toBe(initialConfiguration); + }); + }); +}); diff --git a/x-pack/plugins/cases/public/containers/configure/utils.ts b/x-pack/plugins/cases/public/containers/configure/utils.ts new file mode 100644 index 000000000000..164b9c0f9494 --- /dev/null +++ b/x-pack/plugins/cases/public/containers/configure/utils.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { CasesConfigurationUI } from '../types'; +import { ConnectorTypes } from '../../../common'; + +export const initialConfiguration: CasesConfigurationUI = { + closureType: 'close-by-user', + connector: { + fields: null, + id: 'none', + name: 'none', + type: ConnectorTypes.none, + }, + customFields: [], + mappings: [], + version: '', + id: '', + owner: '', +}; + +export const getConfigurationByOwner = ({ + configurations, + owner, +}: { + configurations: CasesConfigurationUI[] | null; + owner: string | undefined; +}): CasesConfigurationUI => { + if (!configurations || !configurations.length || !owner) { + return initialConfiguration; + } + + // fallback to configuration 0 which was what happened before + return configurations.find((element) => element.owner === owner) ?? initialConfiguration; +}; diff --git a/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md b/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md index c18a57ff85ab..f0851690203c 100644 --- a/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md +++ b/x-pack/plugins/cloud_security_posture/common/dev_docs/__auto_generated_csp_requirements_test_coverage.md @@ -7,7 +7,7 @@ You can also check out the dedicated app view, which enables easier search and f ## Directory: x-pack/plugins/cloud_security_posture -**Total Tests:** 425 | **Skipped:** 5 (1.18%) | **Todo:** 0 (0.00%) +**Total Tests:** 424 | **Skipped:** 5 (1.18%) | **Todo:** 0 (0.00%) ![](https://img.shields.io/badge/UT-brightgreen) ![](https://img.shields.io/badge/HAS-SKIP-yellow) @@ -276,15 +276,14 @@ You can also check out the dedicated app view, which enables easier search and f | [Prefer Cloud dashboard if both integration have findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [Show CSPM installation prompt if CSPM is not installed and KSPM is installed ,NO AGENT](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [Show KSPM installation prompt if KSPM is not installed and CSPM is installed , NO AGENT](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | -| [should not select default tab is user has already selected one themselves](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [getDefaultTab](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | describe | | | | [returns CSPM tab if only CSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [returns CSPM tab if both CSPM and KSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [returns KSPM tab if only KSPM has findings](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [when no findings preffers CSPM tab unless not-installed or unprivileged](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | -| [returns CSPM tab is plugin status and kspm status is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | -| [returns KSPM tab is plugin status and csp status is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | -| [returns CSPM tab when only plugins status data is provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | +| [should returns undefined when plugin status and cspm stats is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | +| [should return undefined is plugin status and csp status is not provided ](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | +| [should return undefined when plugins status or cspm stats data is not provided](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/compliance_dashboard.test.tsx) | it | | | | [](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | describe | | | | [Sorting](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | describe | | | | [sorts by ascending order of compliance scores](x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/benchmarks_section.test.tsx) | it | | | @@ -443,11 +442,61 @@ You can also check out the dedicated app view, which enables easier search and f | [should drop unknown properties when running the up migration](x-pack/plugins/cloud_security_posture/server/tasks/task_state.test.ts) | it | | | +## Directory: x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture + +**Total Tests:** 37 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%) + +![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/SERVERLESS-pink) ![](https://img.shields.io/badge/API-INTEGRATION-purple) + +
+Test Details + +| Test Label | Type | Skipped | Todo | +|------------|------|---------|------| +| [GET /internal/cloud_security_posture/benchmark](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | describe | | | +| [Should return non-empty array filled with Rules if user has CSP integrations](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | | +| [Should return array size 2 when we set per page to be only 2 (total element is still 3)](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | | +| [Should return array size 2 when we set per page to be only 2 (total element is still 3)](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | | +| [Should return empty array when we set page to be above the last page number](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts) | it | | | +| [GET /internal/cloud_security_posture/benchmark](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts) | describe | | | +| [Should return all benchmarks if user has CSP integrations](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts) | it | | | +| [GET internal/cloud_security_posture/rules/_find](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | describe | | | +| [Should return 500 error code when not provide package policy id or benchmark id](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 500 error code when provide both package policy id and benchmark id](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 404 status code when the package policy ID does not exist](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 200 status code and filter rules by benchmarkId](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 200 status code, and only requested fields in the response](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 200 status code, items sorted by metadata.section field](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [Should return 200 status code and paginate rules with a limit of PerPage](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts) | it | | | +| [cloud_security_posture](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/index.ts) | describe | | | +| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | describe | | | +| [STATUS = INDEXED TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | describe | | | +| [Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | | +| [Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | | +| [Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts) | it | | | +| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | describe | | | +| [STATUS = INDEXING TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | describe | | | +| [Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | | +| [Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | | +| [Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts) | it | | | +| [GET /internal/cloud_security_posture/status](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | describe | | | +| [STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | describe | | | +| [Should return not-deployed when installed kspm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | | +| [Should return not-deployed when installed cspm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | | +| [Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts) | it | | | +| [Verify cloud_security_posture telemetry payloads](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | describe | | | +| [includes only KSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | | +| [includes only CSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | | +| [includes CSPM and KSPM findings](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | | +| [](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | | +| [includes KSPM findings without posture_type and CSPM findings as well](x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts) | it | | | +
+ ## Directory: x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture -**Total Tests:** 4 | **Skipped:** 2 (50.00%) | **Todo:** 0 (0.00%) +**Total Tests:** 4 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%) -![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/HAS-SKIP-yellow) +![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/SERVERLESS-pink)
Test Details @@ -455,8 +504,8 @@ You can also check out the dedicated app view, which enables easier search and f | Test Label | Type | Skipped | Todo | |------------|------|---------|------| | [Cloud Posture Dashboard Page](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | | | -| [Kubernetes Dashboard](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | | -| [displays accurate summary compliance score](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | +| [Kubernetes Dashboard](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | describe | | | +| [displays accurate summary compliance score](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts) | it | | | | [cloud_security_posture](x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts) | describe | | |
@@ -537,9 +586,9 @@ You can also check out the dedicated app view, which enables easier search and f ## Directory: x-pack/test/cloud_security_posture_api -**Total Tests:** 35 | **Skipped:** 8 (22.86%) | **Todo:** 0 (0.00%) +**Total Tests:** 35 | **Skipped:** 0 (0.00%) | **Todo:** 0 (0.00%) -![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/API-INTEGRATION-purple) ![](https://img.shields.io/badge/HAS-SKIP-yellow) +![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/API-INTEGRATION-purple)
Test Details @@ -550,14 +599,14 @@ You can also check out the dedicated app view, which enables easier search and f | [Get Benchmark API](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | describe | | | | [Verify cspm benchmark score is updated when muting rules](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | it | | | | [Verify kspm benchmark score is updated when muting rules](x-pack/test/cloud_security_posture_api/routes/benchmarks.ts) | it | | | -| [Verify update csp rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | | -| [mute benchmark rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [unmute rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [verify new rules are added and existing rules are set.](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [mute detection rule successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [Expect to mute two benchmark rules and one detection rule](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [Expect to save rules states when requesting to update empty object](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [set wrong action input](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | +| [Verify update csp rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | describe | | | +| [mute benchmark rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [unmute rules successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [verify new rules are added and existing rules are set.](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [mute detection rule successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [Expect to mute two benchmark rules and one detection rule](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [Expect to save rules states when requesting to update empty object](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | +| [set wrong action input](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_bulk_update.ts) | it | | | | [Tests get rules states API](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | describe | | | | [get rules states successfully](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | it | | | | [get empty object when rules states not exists](x-pack/test/cloud_security_posture_api/routes/csp_benchmark_rules_get_states.ts) | it | | | @@ -585,7 +634,7 @@ You can also check out the dedicated app view, which enables easier search and f ## Directory: x-pack/test/cloud_security_posture_functional -**Total Tests:** 137 | **Skipped:** 10 (7.30%) | **Todo:** 2 (1.46%) +**Total Tests:** 137 | **Skipped:** 6 (4.38%) | **Todo:** 2 (1.46%) ![](https://img.shields.io/badge/FTR-blue) ![](https://img.shields.io/badge/HAS-TODO-green) ![](https://img.shields.io/badge/HAS-SKIP-yellow) @@ -653,10 +702,10 @@ You can also check out the dedicated app view, which enables easier search and f | [Findings page with old data](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | describe | | | | [returns no Findings KSPM](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | it | | | | [returns no Findings CSPM](x-pack/test/cloud_security_posture_functional/pages/findings_old_data.ts) | it | | | -| [Findings Page onboarding](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | | -| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | -| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | +| [Findings Page onboarding](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | describe | | | +| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | | +| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | | +| [clicking on the ](x-pack/test/cloud_security_posture_functional/pages/findings_onboarding.ts) | it | | | | [Findings Page - DataTable](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | describe | | | | [SearchBar](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | describe | ![](https://img.shields.io/badge/skipped-yellow) | | | [add filter](x-pack/test/cloud_security_posture_functional/pages/findings.ts) | it | ![](https://img.shields.io/badge/skipped-yellow) | | diff --git a/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json b/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json index c69ed1b2c5e2..7ed63d28af43 100644 --- a/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json +++ b/x-pack/plugins/cloud_security_posture/common/scripts/__auto_generated_csp_test_log.json @@ -5606,15 +5606,14 @@ " it('Prefer Cloud dashboard if both integration have findings')", " it('Show CSPM installation prompt if CSPM is not installed and KSPM is installed ,NO AGENT')", " it('Show KSPM installation prompt if KSPM is not installed and CSPM is installed , NO AGENT')", - " it('should not select default tab is user has already selected one themselves')", "describe('getDefaultTab')", " it('returns CSPM tab if only CSPM has findings')", " it('returns CSPM tab if both CSPM and KSPM has findings')", " it('returns KSPM tab if only KSPM has findings')", " it('when no findings preffers CSPM tab unless not-installed or unprivileged')", - " it('returns CSPM tab is plugin status and kspm status is not provided')", - " it('returns KSPM tab is plugin status and csp status is not provided')", - " it('returns CSPM tab when only plugins status data is provided')" + " it('should returns undefined when plugin status and cspm stats is not provided')", + " it('should return undefined is plugin status and csp status is not provided ')", + " it('should return undefined when plugins status or cspm stats data is not provided')" ], "testSuits": [ { @@ -5777,16 +5776,6 @@ "isSkipped": false, "isTodo": false }, - { - "id": "should-not-select-default-tab-is-user-has-already-selected-one-themselves", - "rawLine": " it('should not select default tab is user has already selected one themselves', () => {", - "line": " it('should not select default tab is user has already selected one themselves')", - "label": "should not select default tab is user has already selected one themselves", - "indent": 2, - "type": "it", - "isSkipped": false, - "isTodo": false - }, { "id": "getdefaulttab", "rawLine": "describe('getDefaultTab', () => {", @@ -5838,30 +5827,30 @@ "isTodo": false }, { - "id": "returns-cspm-tab-is-plugin-status-and-kspm-status-is-not-provided", - "rawLine": " it('returns CSPM tab is plugin status and kspm status is not provided', () => {", - "line": " it('returns CSPM tab is plugin status and kspm status is not provided')", - "label": "returns CSPM tab is plugin status and kspm status is not provided", + "id": "should-returns-undefined-when-plugin-status-and-cspm-stats-is-not-provided", + "rawLine": " it('should returns undefined when plugin status and cspm stats is not provided', () => {", + "line": " it('should returns undefined when plugin status and cspm stats is not provided')", + "label": "should returns undefined when plugin status and cspm stats is not provided", "indent": 2, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "returns-kspm-tab-is-plugin-status-and-csp-status-is-not-provided", - "rawLine": " it('returns KSPM tab is plugin status and csp status is not provided', () => {", - "line": " it('returns KSPM tab is plugin status and csp status is not provided')", - "label": "returns KSPM tab is plugin status and csp status is not provided", + "id": "should-return-undefined-is-plugin-status-and-csp-status-is-not-provided-", + "rawLine": " it('should return undefined is plugin status and csp status is not provided ', () => {", + "line": " it('should return undefined is plugin status and csp status is not provided ')", + "label": "should return undefined is plugin status and csp status is not provided ", "indent": 2, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "returns-cspm-tab-when-only-plugins-status-data-is-provided", - "rawLine": " it('returns CSPM tab when only plugins status data is provided', () => {", - "line": " it('returns CSPM tab when only plugins status data is provided')", - "label": "returns CSPM tab when only plugins status data is provided", + "id": "should-return-undefined-when-plugins-status-or-cspm-stats-data-is-not-provided", + "rawLine": " it('should return undefined when plugins status or cspm stats data is not provided', () => {", + "line": " it('should return undefined when plugins status or cspm stats data is not provided')", + "label": "should return undefined when plugins status or cspm stats data is not provided", "indent": 2, "type": "it", "isSkipped": false, @@ -6028,16 +6017,6 @@ "type": "it", "isSkipped": false, "isTodo": false - }, - { - "id": "should-not-select-default-tab-is-user-has-already-selected-one-themselves", - "rawLine": " it('should not select default tab is user has already selected one themselves', () => {", - "line": " it('should not select default tab is user has already selected one themselves')", - "label": "should not select default tab is user has already selected one themselves", - "indent": 2, - "type": "it", - "isSkipped": false, - "isTodo": false } ] }, @@ -6092,30 +6071,30 @@ "isTodo": false }, { - "id": "returns-cspm-tab-is-plugin-status-and-kspm-status-is-not-provided", - "rawLine": " it('returns CSPM tab is plugin status and kspm status is not provided', () => {", - "line": " it('returns CSPM tab is plugin status and kspm status is not provided')", - "label": "returns CSPM tab is plugin status and kspm status is not provided", + "id": "should-returns-undefined-when-plugin-status-and-cspm-stats-is-not-provided", + "rawLine": " it('should returns undefined when plugin status and cspm stats is not provided', () => {", + "line": " it('should returns undefined when plugin status and cspm stats is not provided')", + "label": "should returns undefined when plugin status and cspm stats is not provided", "indent": 2, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "returns-kspm-tab-is-plugin-status-and-csp-status-is-not-provided", - "rawLine": " it('returns KSPM tab is plugin status and csp status is not provided', () => {", - "line": " it('returns KSPM tab is plugin status and csp status is not provided')", - "label": "returns KSPM tab is plugin status and csp status is not provided", + "id": "should-return-undefined-is-plugin-status-and-csp-status-is-not-provided-", + "rawLine": " it('should return undefined is plugin status and csp status is not provided ', () => {", + "line": " it('should return undefined is plugin status and csp status is not provided ')", + "label": "should return undefined is plugin status and csp status is not provided ", "indent": 2, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "returns-cspm-tab-when-only-plugins-status-data-is-provided", - "rawLine": " it('returns CSPM tab when only plugins status data is provided', () => {", - "line": " it('returns CSPM tab when only plugins status data is provided')", - "label": "returns CSPM tab when only plugins status data is provided", + "id": "should-return-undefined-when-plugins-status-or-cspm-stats-data-is-not-provided", + "rawLine": " it('should return undefined when plugins status or cspm stats data is not provided', () => {", + "line": " it('should return undefined when plugins status or cspm stats data is not provided')", + "label": "should return undefined when plugins status or cspm stats data is not provided", "indent": 2, "type": "it", "isSkipped": false, @@ -9837,128 +9816,12 @@ ] }, { - "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts", - "fileName": "compliance_dashboard.ts", - "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture", - "tags": [ - "FTR", - "HAS SKIP" - ], - "lines": [ - " describe('Cloud Posture Dashboard Page')", - " describe.skip('Kubernetes Dashboard')", - " it('displays accurate summary compliance score')" - ], - "testSuits": [ - { - "id": "cloud-posture-dashboard-page", - "rawLine": " describe('Cloud Posture Dashboard Page', function () {", - "line": " describe('Cloud Posture Dashboard Page')", - "label": "Cloud Posture Dashboard Page", - "indent": 2, - "type": "describe", - "isSkipped": false, - "isTodo": false - }, - { - "id": "kubernetes-dashboard", - "rawLine": " describe.skip('Kubernetes Dashboard', () => {", - "line": " describe.skip('Kubernetes Dashboard')", - "label": "Kubernetes Dashboard", - "indent": 4, - "type": "describe", - "isSkipped": true, - "isTodo": false - }, - { - "id": "displays-accurate-summary-compliance-score", - "rawLine": " it('displays accurate summary compliance score', async () => {", - "line": " it('displays accurate summary compliance score')", - "label": "displays accurate summary compliance score", - "indent": 6, - "type": "it", - "isSkipped": false, - "isTodo": false - } - ], - "tree": [ - { - "id": "cloud-posture-dashboard-page", - "rawLine": " describe('Cloud Posture Dashboard Page', function () {", - "line": " describe('Cloud Posture Dashboard Page')", - "label": "Cloud Posture Dashboard Page", - "indent": 2, - "type": "describe", - "isSkipped": false, - "isTodo": false, - "children": [ - { - "id": "kubernetes-dashboard", - "rawLine": " describe.skip('Kubernetes Dashboard', () => {", - "line": " describe.skip('Kubernetes Dashboard')", - "label": "Kubernetes Dashboard", - "indent": 4, - "type": "describe", - "isSkipped": true, - "isTodo": false, - "children": [ - { - "id": "displays-accurate-summary-compliance-score", - "rawLine": " it('displays accurate summary compliance score', async () => {", - "line": " it('displays accurate summary compliance score')", - "label": "displays accurate summary compliance score", - "indent": 6, - "type": "it", - "isSkipped": true, - "isTodo": false - } - ] - } - ] - } - ] - }, - { - "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts", - "fileName": "index.ts", - "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture", - "tags": [ - "FTR" - ], - "lines": [ - " describe('cloud_security_posture')" - ], - "testSuits": [ - { - "id": "cloud_security_posture", - "rawLine": " describe('cloud_security_posture', function () {", - "line": " describe('cloud_security_posture')", - "label": "cloud_security_posture", - "indent": 2, - "type": "describe", - "isSkipped": false, - "isTodo": false - } - ], - "tree": [ - { - "id": "cloud_security_posture", - "rawLine": " describe('cloud_security_posture', function () {", - "line": " describe('cloud_security_posture')", - "label": "cloud_security_posture", - "indent": 2, - "type": "describe", - "isSkipped": false, - "isTodo": false - } - ] - }, - { - "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v1.ts", + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v1.ts", "fileName": "v1.ts", - "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", "tags": [ "FTR", + "SERVERLESS", "API INTEGRATION" ], "lines": [ @@ -9971,7 +9834,7 @@ "testSuits": [ { "id": "get-/internal/cloud_security_posture/benchmark", - "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {", "line": " describe('GET /internal/cloud_security_posture/benchmark')", "label": "GET /internal/cloud_security_posture/benchmark", "indent": 2, @@ -10023,7 +9886,7 @@ "tree": [ { "id": "get-/internal/cloud_security_posture/benchmark", - "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {", "line": " describe('GET /internal/cloud_security_posture/benchmark')", "label": "GET /internal/cloud_security_posture/benchmark", "indent": 2, @@ -10076,11 +9939,12 @@ ] }, { - "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v2.ts", + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/benchmark/v2.ts", "fileName": "v2.ts", - "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", "tags": [ "FTR", + "SERVERLESS", "API INTEGRATION" ], "lines": [ @@ -10090,7 +9954,7 @@ "testSuits": [ { "id": "get-/internal/cloud_security_posture/benchmark", - "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {", "line": " describe('GET /internal/cloud_security_posture/benchmark')", "label": "GET /internal/cloud_security_posture/benchmark", "indent": 2, @@ -10112,7 +9976,7 @@ "tree": [ { "id": "get-/internal/cloud_security_posture/benchmark", - "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', function () {", "line": " describe('GET /internal/cloud_security_posture/benchmark')", "label": "GET /internal/cloud_security_posture/benchmark", "indent": 2, @@ -10135,11 +9999,12 @@ ] }, { - "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/find_csp_benchmark_rule.ts", + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/find_csp_benchmark_rule.ts", "fileName": "find_csp_benchmark_rule.ts", - "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", "tags": [ "FTR", + "SERVERLESS", "API INTEGRATION" ], "lines": [ @@ -10155,7 +10020,7 @@ "testSuits": [ { "id": "get-internal/cloud_security_posture/rules/_find", - "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', function () {", "line": " describe('GET internal/cloud_security_posture/rules/_find')", "label": "GET internal/cloud_security_posture/rules/_find", "indent": 2, @@ -10237,7 +10102,7 @@ "tree": [ { "id": "get-internal/cloud_security_posture/rules/_find", - "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', function () {", "line": " describe('GET internal/cloud_security_posture/rules/_find')", "label": "GET internal/cloud_security_posture/rules/_find", "indent": 2, @@ -10320,11 +10185,12 @@ ] }, { - "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/index.ts", + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/index.ts", "fileName": "index.ts", - "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", "tags": [ "FTR", + "SERVERLESS", "API INTEGRATION" ], "lines": [ @@ -10356,100 +10222,68 @@ ] }, { - "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/rules/v1.ts", - "fileName": "v1.ts", - "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexed.ts", + "fileName": "status_indexed.ts", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", "tags": [ "FTR", + "SERVERLESS", "API INTEGRATION" ], "lines": [ - " describe('GET internal/cloud_security_posture/rules/_find')", - " it(`Should return 500 error code when not provide package policy id or benchmark id`)", - " it(`Should return 500 error code when provide both package policy id and benchmark id`)", - " it(`Should return 404 status code when the package policy ID does not exist`)", - " it(`Should return 200 status code and filter rules by benchmarkId`)", - " it(`Should return 200 status code, and only requested fields in the response`)", - " it(`Should return 200 status code, items sorted by metadata.section field`)", - " it(`Should return 200 status code and paginate rules with a limit of PerPage`)" + " describe('GET /internal/cloud_security_posture/status')", + " describe('STATUS = INDEXED TEST')", + " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)", + " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)", + " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)" ], "testSuits": [ { - "id": "get-internal/cloud_security_posture/rules/_find", - "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", - "line": " describe('GET internal/cloud_security_posture/rules/_find')", - "label": "GET internal/cloud_security_posture/rules/_find", + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", "indent": 2, "type": "describe", "isSkipped": false, "isTodo": false }, { - "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", - "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", - "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", - "label": "Should return 500 error code when not provide package policy id or benchmark id", - "indent": 4, - "type": "it", - "isSkipped": false, - "isTodo": false - }, - { - "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", - "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", - "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", - "label": "Should return 500 error code when provide both package policy id and benchmark id", - "indent": 4, - "type": "it", - "isSkipped": false, - "isTodo": false - }, - { - "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist", - "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {", - "line": " it(`Should return 404 status code when the package policy ID does not exist`)", - "label": "Should return 404 status code when the package policy ID does not exist", - "indent": 4, - "type": "it", - "isSkipped": false, - "isTodo": false - }, - { - "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid", - "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {", - "line": " it(`Should return 200 status code and filter rules by benchmarkId`)", - "label": "Should return 200 status code and filter rules by benchmarkId", + "id": "status-=-indexed-test", + "rawLine": " describe('STATUS = INDEXED TEST', () => {", + "line": " describe('STATUS = INDEXED TEST')", + "label": "STATUS = INDEXED TEST", "indent": 4, - "type": "it", + "type": "describe", "isSkipped": false, "isTodo": false }, { - "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response", - "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {", - "line": " it(`Should return 200 status code, and only requested fields in the response`)", - "label": "Should return 200 status code, and only requested fields in the response", - "indent": 4, + "id": "return-kspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-kspm-documents", + "rawLine": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`, async () => {", + "line": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)", + "label": "Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents", + "indent": 6, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field", - "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {", - "line": " it(`Should return 200 status code, items sorted by metadata.section field`)", - "label": "Should return 200 status code, items sorted by metadata.section field", - "indent": 4, + "id": "return-cspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-cspm-documents", + "rawLine": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`, async () => {", + "line": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)", + "label": "Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents", + "indent": 6, "type": "it", "isSkipped": false, "isTodo": false }, { - "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage", - "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {", - "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)", - "label": "Should return 200 status code and paginate rules with a limit of PerPage", - "indent": 4, + "id": "return-vuln-status-indexed-when-logs-cloud_security_posture.vulnerabilities_latest-default-contains-new-documents", + "rawLine": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`, async () => {", + "line": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)", + "label": "Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents", + "indent": 6, "type": "it", "isSkipped": false, "isTodo": false @@ -10457,30 +10291,1101 @@ ], "tree": [ { - "id": "get-internal/cloud_security_posture/rules/_find", - "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", - "line": " describe('GET internal/cloud_security_posture/rules/_find')", - "label": "GET internal/cloud_security_posture/rules/_find", + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", "indent": 2, "type": "describe", "isSkipped": false, "isTodo": false, "children": [ { - "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", - "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", - "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", - "label": "Should return 500 error code when not provide package policy id or benchmark id", + "id": "status-=-indexed-test", + "rawLine": " describe('STATUS = INDEXED TEST', () => {", + "line": " describe('STATUS = INDEXED TEST')", + "label": "STATUS = INDEXED TEST", "indent": 4, - "type": "it", + "type": "describe", "isSkipped": false, - "isTodo": false - }, - { - "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", - "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", - "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", - "label": "Should return 500 error code when provide both package policy id and benchmark id", + "isTodo": false, + "children": [ + { + "id": "return-kspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-kspm-documents", + "rawLine": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`, async () => {", + "line": " it(`Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents`)", + "label": "Return kspm status indexed when logs-cloud_security_posture.findings_latest-default contains new kspm documents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-cspm-status-indexed-when-logs-cloud_security_posture.findings_latest-default-contains-new-cspm-documents", + "rawLine": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`, async () => {", + "line": " it(`Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents`)", + "label": "Return cspm status indexed when logs-cloud_security_posture.findings_latest-default contains new cspm documents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-vuln-status-indexed-when-logs-cloud_security_posture.vulnerabilities_latest-default-contains-new-documents", + "rawLine": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`, async () => {", + "line": " it(`Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents`)", + "label": "Return vuln status indexed when logs-cloud_security_posture.vulnerabilities_latest-default contains new documents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + } + ] + }, + { + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_indexing.ts", + "fileName": "status_indexing.ts", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", + "tags": [ + "FTR", + "SERVERLESS", + "API INTEGRATION" + ], + "lines": [ + " describe('GET /internal/cloud_security_posture/status')", + " describe('STATUS = INDEXING TEST')", + " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)", + " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)", + " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)" + ], + "testSuits": [ + { + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "status-=-indexing-test", + "rawLine": " describe('STATUS = INDEXING TEST', () => {", + "line": " describe('STATUS = INDEXING TEST')", + "label": "STATUS = INDEXING TEST", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-kspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn", + "rawLine": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`, async () => {", + "line": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)", + "label": "Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-cspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn", + "rawLine": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `, async () => {", + "line": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)", + "label": "Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-vuln-status-indexing-when-logs-cloud_security_posture.vulnerabilities_latest-default-doesn", + "rawLine": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`, async () => {", + "line": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)", + "label": "Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "status-=-indexing-test", + "rawLine": " describe('STATUS = INDEXING TEST', () => {", + "line": " describe('STATUS = INDEXING TEST')", + "label": "STATUS = INDEXING TEST", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "return-kspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn", + "rawLine": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`, async () => {", + "line": " it(`Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new kspm documents, but has newly connected agents`)", + "label": "Return kspm status indexing when logs-cloud_security_posture.findings_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-cspm-status-indexing-when-logs-cloud_security_posture.findings_latest-default-doesn", + "rawLine": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `, async () => {", + "line": " it(`Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn't contain new cspm documents, but has newly connected agents `)", + "label": "Return cspm status indexing when logs-cloud_security_posture.findings_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "return-vuln-status-indexing-when-logs-cloud_security_posture.vulnerabilities_latest-default-doesn", + "rawLine": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`, async () => {", + "line": " it(`Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn't contain vuln new documents, but has newly connected agents`)", + "label": "Return vuln status indexing when logs-cloud_security_posture.vulnerabilities_latest-default doesn", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + } + ] + }, + { + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/status/status_not_deployed_not_installed.ts", + "fileName": "status_not_deployed_not_installed.ts", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", + "tags": [ + "FTR", + "SERVERLESS", + "API INTEGRATION" + ], + "lines": [ + " describe('GET /internal/cloud_security_posture/status')", + " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')", + " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)", + " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)", + " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)" + ], + "testSuits": [ + { + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "status-=-not-deployed-and-status-=-not-installed-test", + "rawLine": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST', () => {", + "line": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')", + "label": "STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-not-deployed-when-installed-kspm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed kspm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-not-deployed-when-installed-cspm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed cspm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-not-deployed-when-installed-cnvm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-/internal/cloud_security_posture/status", + "rawLine": " describe('GET /internal/cloud_security_posture/status', function () {", + "line": " describe('GET /internal/cloud_security_posture/status')", + "label": "GET /internal/cloud_security_posture/status", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "status-=-not-deployed-and-status-=-not-installed-test", + "rawLine": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST', () => {", + "line": " describe('STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST')", + "label": "STATUS = NOT-DEPLOYED and STATUS = NOT-INSTALLED TEST", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "should-return-not-deployed-when-installed-kspm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed kspm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed kspm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-not-deployed-when-installed-cspm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed cspm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed cspm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-not-deployed-when-installed-cnvm,-no-findings-on-either-indices-and-no-healthy-agents", + "rawLine": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`, async () => {", + "line": " it(`Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents`)", + "label": "Should return not-deployed when installed cnvm, no findings on either indices and no healthy agents", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + } + ] + }, + { + "filePath": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture/telemetry.ts", + "fileName": "telemetry.ts", + "directory": "x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture", + "tags": [ + "FTR", + "SERVERLESS", + "API INTEGRATION" + ], + "lines": [ + " describe('Verify cloud_security_posture telemetry payloads')", + " it('includes only KSPM findings')", + " it('includes only CSPM findings')", + " it('includes CSPM and KSPM findings')", + " it(`'includes only KSPM findings without posture_type'`)", + " it('includes KSPM findings without posture_type and CSPM findings as well')" + ], + "testSuits": [ + { + "id": "verify-cloud_security_posture-telemetry-payloads", + "rawLine": " describe('Verify cloud_security_posture telemetry payloads', function () {", + "line": " describe('Verify cloud_security_posture telemetry payloads')", + "label": "Verify cloud_security_posture telemetry payloads", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-only-kspm-findings", + "rawLine": " it('includes only KSPM findings', async () => {", + "line": " it('includes only KSPM findings')", + "label": "includes only KSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-only-cspm-findings", + "rawLine": " it('includes only CSPM findings', async () => {", + "line": " it('includes only CSPM findings')", + "label": "includes only CSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-cspm-and-kspm-findings", + "rawLine": " it('includes CSPM and KSPM findings', async () => {", + "line": " it('includes CSPM and KSPM findings')", + "label": "includes CSPM and KSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "", + "rawLine": " it(`'includes only KSPM findings without posture_type'`, async () => {", + "line": " it(`'includes only KSPM findings without posture_type'`)", + "label": "", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-kspm-findings-without-posture_type-and-cspm-findings-as-well", + "rawLine": " it('includes KSPM findings without posture_type and CSPM findings as well', async () => {", + "line": " it('includes KSPM findings without posture_type and CSPM findings as well')", + "label": "includes KSPM findings without posture_type and CSPM findings as well", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "verify-cloud_security_posture-telemetry-payloads", + "rawLine": " describe('Verify cloud_security_posture telemetry payloads', function () {", + "line": " describe('Verify cloud_security_posture telemetry payloads')", + "label": "Verify cloud_security_posture telemetry payloads", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "includes-only-kspm-findings", + "rawLine": " it('includes only KSPM findings', async () => {", + "line": " it('includes only KSPM findings')", + "label": "includes only KSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-only-cspm-findings", + "rawLine": " it('includes only CSPM findings', async () => {", + "line": " it('includes only CSPM findings')", + "label": "includes only CSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-cspm-and-kspm-findings", + "rawLine": " it('includes CSPM and KSPM findings', async () => {", + "line": " it('includes CSPM and KSPM findings')", + "label": "includes CSPM and KSPM findings", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "", + "rawLine": " it(`'includes only KSPM findings without posture_type'`, async () => {", + "line": " it(`'includes only KSPM findings without posture_type'`)", + "label": "", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "includes-kspm-findings-without-posture_type-and-cspm-findings-as-well", + "rawLine": " it('includes KSPM findings without posture_type and CSPM findings as well', async () => {", + "line": " it('includes KSPM findings without posture_type and CSPM findings as well')", + "label": "includes KSPM findings without posture_type and CSPM findings as well", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + }, + { + "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/compliance_dashboard.ts", + "fileName": "compliance_dashboard.ts", + "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture", + "tags": [ + "FTR", + "SERVERLESS" + ], + "lines": [ + " describe('Cloud Posture Dashboard Page')", + " describe('Kubernetes Dashboard')", + " it('displays accurate summary compliance score')" + ], + "testSuits": [ + { + "id": "cloud-posture-dashboard-page", + "rawLine": " describe('Cloud Posture Dashboard Page', function () {", + "line": " describe('Cloud Posture Dashboard Page')", + "label": "Cloud Posture Dashboard Page", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "kubernetes-dashboard", + "rawLine": " describe('Kubernetes Dashboard', () => {", + "line": " describe('Kubernetes Dashboard')", + "label": "Kubernetes Dashboard", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "displays-accurate-summary-compliance-score", + "rawLine": " it('displays accurate summary compliance score', async () => {", + "line": " it('displays accurate summary compliance score')", + "label": "displays accurate summary compliance score", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "cloud-posture-dashboard-page", + "rawLine": " describe('Cloud Posture Dashboard Page', function () {", + "line": " describe('Cloud Posture Dashboard Page')", + "label": "Cloud Posture Dashboard Page", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "kubernetes-dashboard", + "rawLine": " describe('Kubernetes Dashboard', () => {", + "line": " describe('Kubernetes Dashboard')", + "label": "Kubernetes Dashboard", + "indent": 4, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "displays-accurate-summary-compliance-score", + "rawLine": " it('displays accurate summary compliance score', async () => {", + "line": " it('displays accurate summary compliance score')", + "label": "displays accurate summary compliance score", + "indent": 6, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + } + ] + }, + { + "filePath": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture/index.ts", + "fileName": "index.ts", + "directory": "x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture", + "tags": [ + "FTR", + "SERVERLESS" + ], + "lines": [ + " describe('cloud_security_posture')" + ], + "testSuits": [ + { + "id": "cloud_security_posture", + "rawLine": " describe('cloud_security_posture', function () {", + "line": " describe('cloud_security_posture')", + "label": "cloud_security_posture", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "cloud_security_posture", + "rawLine": " describe('cloud_security_posture', function () {", + "line": " describe('cloud_security_posture')", + "label": "cloud_security_posture", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + } + ] + }, + { + "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v1.ts", + "fileName": "v1.ts", + "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "tags": [ + "FTR", + "API INTEGRATION" + ], + "lines": [ + " describe('GET /internal/cloud_security_posture/benchmark')", + " it(`Should return non-empty array filled with Rules if user has CSP integrations`)", + " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + " it(`Should return empty array when we set page to be above the last page number`)" + ], + "testSuits": [ + { + "id": "get-/internal/cloud_security_posture/benchmark", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "line": " describe('GET /internal/cloud_security_posture/benchmark')", + "label": "GET /internal/cloud_security_posture/benchmark", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-non-empty-array-filled-with-rules-if-user-has-csp-integrations", + "rawLine": " it(`Should return non-empty array filled with Rules if user has CSP integrations`, async () => {", + "line": " it(`Should return non-empty array filled with Rules if user has CSP integrations`)", + "label": "Should return non-empty array filled with Rules if user has CSP integrations", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)", + "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {", + "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)", + "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {", + "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-empty-array-when-we-set-page-to-be-above-the-last-page-number", + "rawLine": " it(`Should return empty array when we set page to be above the last page number`, async () => {", + "line": " it(`Should return empty array when we set page to be above the last page number`)", + "label": "Should return empty array when we set page to be above the last page number", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-/internal/cloud_security_posture/benchmark", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "line": " describe('GET /internal/cloud_security_posture/benchmark')", + "label": "GET /internal/cloud_security_posture/benchmark", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "should-return-non-empty-array-filled-with-rules-if-user-has-csp-integrations", + "rawLine": " it(`Should return non-empty array filled with Rules if user has CSP integrations`, async () => {", + "line": " it(`Should return non-empty array filled with Rules if user has CSP integrations`)", + "label": "Should return non-empty array filled with Rules if user has CSP integrations", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)", + "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {", + "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-array-size-2-when-we-set-per-page-to-be-only-2-(total-element-is-still-3)", + "rawLine": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`, async () => {", + "line": " it(`Should return array size 2 when we set per page to be only 2 (total element is still 3)`)", + "label": "Should return array size 2 when we set per page to be only 2 (total element is still 3)", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-empty-array-when-we-set-page-to-be-above-the-last-page-number", + "rawLine": " it(`Should return empty array when we set page to be above the last page number`, async () => {", + "line": " it(`Should return empty array when we set page to be above the last page number`)", + "label": "Should return empty array when we set page to be above the last page number", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + }, + { + "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/benchmark/v2.ts", + "fileName": "v2.ts", + "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "tags": [ + "FTR", + "API INTEGRATION" + ], + "lines": [ + " describe('GET /internal/cloud_security_posture/benchmark')", + " it(`Should return all benchmarks if user has CSP integrations`)" + ], + "testSuits": [ + { + "id": "get-/internal/cloud_security_posture/benchmark", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "line": " describe('GET /internal/cloud_security_posture/benchmark')", + "label": "GET /internal/cloud_security_posture/benchmark", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-all-benchmarks-if-user-has-csp-integrations", + "rawLine": " it(`Should return all benchmarks if user has CSP integrations`, async () => {", + "line": " it(`Should return all benchmarks if user has CSP integrations`)", + "label": "Should return all benchmarks if user has CSP integrations", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-/internal/cloud_security_posture/benchmark", + "rawLine": " describe('GET /internal/cloud_security_posture/benchmark', () => {", + "line": " describe('GET /internal/cloud_security_posture/benchmark')", + "label": "GET /internal/cloud_security_posture/benchmark", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "should-return-all-benchmarks-if-user-has-csp-integrations", + "rawLine": " it(`Should return all benchmarks if user has CSP integrations`, async () => {", + "line": " it(`Should return all benchmarks if user has CSP integrations`)", + "label": "Should return all benchmarks if user has CSP integrations", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + }, + { + "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/find_csp_benchmark_rule.ts", + "fileName": "find_csp_benchmark_rule.ts", + "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "tags": [ + "FTR", + "API INTEGRATION" + ], + "lines": [ + " describe('GET internal/cloud_security_posture/rules/_find')", + " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + " it(`Should return 404 status code when the package policy ID does not exist`)", + " it(`Should return 200 status code and filter rules by benchmarkId`)", + " it(`Should return 200 status code, and only requested fields in the response`)", + " it(`Should return 200 status code, items sorted by metadata.section field`)", + " it(`Should return 200 status code and paginate rules with a limit of PerPage`)" + ], + "testSuits": [ + { + "id": "get-internal/cloud_security_posture/rules/_find", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "line": " describe('GET internal/cloud_security_posture/rules/_find')", + "label": "GET internal/cloud_security_posture/rules/_find", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", + "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", + "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + "label": "Should return 500 error code when not provide package policy id or benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", + "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", + "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + "label": "Should return 500 error code when provide both package policy id and benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist", + "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {", + "line": " it(`Should return 404 status code when the package policy ID does not exist`)", + "label": "Should return 404 status code when the package policy ID does not exist", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid", + "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {", + "line": " it(`Should return 200 status code and filter rules by benchmarkId`)", + "label": "Should return 200 status code and filter rules by benchmarkId", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response", + "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {", + "line": " it(`Should return 200 status code, and only requested fields in the response`)", + "label": "Should return 200 status code, and only requested fields in the response", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field", + "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {", + "line": " it(`Should return 200 status code, items sorted by metadata.section field`)", + "label": "Should return 200 status code, items sorted by metadata.section field", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage", + "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {", + "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)", + "label": "Should return 200 status code and paginate rules with a limit of PerPage", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-internal/cloud_security_posture/rules/_find", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "line": " describe('GET internal/cloud_security_posture/rules/_find')", + "label": "GET internal/cloud_security_posture/rules/_find", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", + "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", + "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + "label": "Should return 500 error code when not provide package policy id or benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", + "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", + "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + "label": "Should return 500 error code when provide both package policy id and benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist", + "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {", + "line": " it(`Should return 404 status code when the package policy ID does not exist`)", + "label": "Should return 404 status code when the package policy ID does not exist", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid", + "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {", + "line": " it(`Should return 200 status code and filter rules by benchmarkId`)", + "label": "Should return 200 status code and filter rules by benchmarkId", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response", + "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {", + "line": " it(`Should return 200 status code, and only requested fields in the response`)", + "label": "Should return 200 status code, and only requested fields in the response", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field", + "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {", + "line": " it(`Should return 200 status code, items sorted by metadata.section field`)", + "label": "Should return 200 status code, items sorted by metadata.section field", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage", + "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {", + "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)", + "label": "Should return 200 status code and paginate rules with a limit of PerPage", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ] + } + ] + }, + { + "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/index.ts", + "fileName": "index.ts", + "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "tags": [ + "FTR", + "API INTEGRATION" + ], + "lines": [ + " describe('cloud_security_posture')" + ], + "testSuits": [ + { + "id": "cloud_security_posture", + "rawLine": " describe('cloud_security_posture', function () {", + "line": " describe('cloud_security_posture')", + "label": "cloud_security_posture", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "cloud_security_posture", + "rawLine": " describe('cloud_security_posture', function () {", + "line": " describe('cloud_security_posture')", + "label": "cloud_security_posture", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + } + ] + }, + { + "filePath": "x-pack/test/api_integration/apis/cloud_security_posture/rules/v1.ts", + "fileName": "v1.ts", + "directory": "x-pack/test/api_integration/apis/cloud_security_posture", + "tags": [ + "FTR", + "API INTEGRATION" + ], + "lines": [ + " describe('GET internal/cloud_security_posture/rules/_find')", + " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + " it(`Should return 404 status code when the package policy ID does not exist`)", + " it(`Should return 200 status code and filter rules by benchmarkId`)", + " it(`Should return 200 status code, and only requested fields in the response`)", + " it(`Should return 200 status code, items sorted by metadata.section field`)", + " it(`Should return 200 status code and paginate rules with a limit of PerPage`)" + ], + "testSuits": [ + { + "id": "get-internal/cloud_security_posture/rules/_find", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "line": " describe('GET internal/cloud_security_posture/rules/_find')", + "label": "GET internal/cloud_security_posture/rules/_find", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", + "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", + "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + "label": "Should return 500 error code when not provide package policy id or benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", + "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", + "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + "label": "Should return 500 error code when provide both package policy id and benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-404-status-code-when-the-package-policy-id-does-not-exist", + "rawLine": " it(`Should return 404 status code when the package policy ID does not exist`, async () => {", + "line": " it(`Should return 404 status code when the package policy ID does not exist`)", + "label": "Should return 404 status code when the package policy ID does not exist", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-filter-rules-by-benchmarkid", + "rawLine": " it(`Should return 200 status code and filter rules by benchmarkId`, async () => {", + "line": " it(`Should return 200 status code and filter rules by benchmarkId`)", + "label": "Should return 200 status code and filter rules by benchmarkId", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-and-only-requested-fields-in-the-response", + "rawLine": " it(`Should return 200 status code, and only requested fields in the response`, async () => {", + "line": " it(`Should return 200 status code, and only requested fields in the response`)", + "label": "Should return 200 status code, and only requested fields in the response", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code,-items-sorted-by-metadata.section-field", + "rawLine": " it(`Should return 200 status code, items sorted by metadata.section field`, async () => {", + "line": " it(`Should return 200 status code, items sorted by metadata.section field`)", + "label": "Should return 200 status code, items sorted by metadata.section field", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-200-status-code-and-paginate-rules-with-a-limit-of-perpage", + "rawLine": " it(`Should return 200 status code and paginate rules with a limit of PerPage`, async () => {", + "line": " it(`Should return 200 status code and paginate rules with a limit of PerPage`)", + "label": "Should return 200 status code and paginate rules with a limit of PerPage", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + } + ], + "tree": [ + { + "id": "get-internal/cloud_security_posture/rules/_find", + "rawLine": " describe('GET internal/cloud_security_posture/rules/_find', () => {", + "line": " describe('GET internal/cloud_security_posture/rules/_find')", + "label": "GET internal/cloud_security_posture/rules/_find", + "indent": 2, + "type": "describe", + "isSkipped": false, + "isTodo": false, + "children": [ + { + "id": "should-return-500-error-code-when-not-provide-package-policy-id-or-benchmark-id", + "rawLine": " it(`Should return 500 error code when not provide package policy id or benchmark id`, async () => {", + "line": " it(`Should return 500 error code when not provide package policy id or benchmark id`)", + "label": "Should return 500 error code when not provide package policy id or benchmark id", + "indent": 4, + "type": "it", + "isSkipped": false, + "isTodo": false + }, + { + "id": "should-return-500-error-code-when-provide-both-package-policy-id-and-benchmark-id", + "rawLine": " it(`Should return 500 error code when provide both package policy id and benchmark id`, async () => {", + "line": " it(`Should return 500 error code when provide both package policy id and benchmark id`)", + "label": "Should return 500 error code when provide both package policy id and benchmark id", "indent": 4, "type": "it", "isSkipped": false, @@ -11580,11 +12485,10 @@ "directory": "x-pack/test/cloud_security_posture_api", "tags": [ "FTR", - "API INTEGRATION", - "HAS SKIP" + "API INTEGRATION" ], "lines": [ - " describe.skip('Verify update csp rules states API')", + " describe('Verify update csp rules states API')", " it('mute benchmark rules successfully')", " it('unmute rules successfully')", " it('verify new rules are added and existing rules are set.')", @@ -11596,12 +12500,12 @@ "testSuits": [ { "id": "verify-update-csp-rules-states-api", - "rawLine": " describe.skip('Verify update csp rules states API', async () => {", - "line": " describe.skip('Verify update csp rules states API')", + "rawLine": " describe('Verify update csp rules states API', async () => {", + "line": " describe('Verify update csp rules states API')", "label": "Verify update csp rules states API", "indent": 2, "type": "describe", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11678,12 +12582,12 @@ "tree": [ { "id": "verify-update-csp-rules-states-api", - "rawLine": " describe.skip('Verify update csp rules states API', async () => {", - "line": " describe.skip('Verify update csp rules states API')", + "rawLine": " describe('Verify update csp rules states API', async () => {", + "line": " describe('Verify update csp rules states API')", "label": "Verify update csp rules states API", "indent": 2, "type": "describe", - "isSkipped": true, + "isSkipped": false, "isTodo": false, "children": [ { @@ -11693,7 +12597,7 @@ "label": "mute benchmark rules successfully", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11703,7 +12607,7 @@ "label": "unmute rules successfully", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11713,7 +12617,7 @@ "label": "verify new rules are added and existing rules are set.", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11723,7 +12627,7 @@ "label": "mute detection rule successfully", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11733,7 +12637,7 @@ "label": "Expect to mute two benchmark rules and one detection rule", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11743,7 +12647,7 @@ "label": "Expect to save rules states when requesting to update empty object", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -11753,7 +12657,7 @@ "label": "set wrong action input", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false } ] @@ -13670,11 +14574,10 @@ "fileName": "findings_onboarding.ts", "directory": "x-pack/test/cloud_security_posture_functional", "tags": [ - "FTR", - "HAS SKIP" + "FTR" ], "lines": [ - " describe.skip('Findings Page onboarding')", + " describe('Findings Page onboarding')", " it('clicking on the `No integrations installed` prompt action button - `install CNVM`: navigates to the CNVM integration installation page')", " it('clicking on the `No integrations installed` prompt action button - `install cloud posture intergation`: navigates to the CSPM integration installation page')", " it('clicking on the `No integrations installed` prompt action button - `install kubernetes posture intergation`: navigates to the KSPM integration installation page')" @@ -13682,12 +14585,12 @@ "testSuits": [ { "id": "findings-page-onboarding", - "rawLine": " describe.skip('Findings Page onboarding', function () {", - "line": " describe.skip('Findings Page onboarding')", + "rawLine": " describe('Findings Page onboarding', function () {", + "line": " describe('Findings Page onboarding')", "label": "Findings Page onboarding", "indent": 2, "type": "describe", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -13724,12 +14627,12 @@ "tree": [ { "id": "findings-page-onboarding", - "rawLine": " describe.skip('Findings Page onboarding', function () {", - "line": " describe.skip('Findings Page onboarding')", + "rawLine": " describe('Findings Page onboarding', function () {", + "line": " describe('Findings Page onboarding')", "label": "Findings Page onboarding", "indent": 2, "type": "describe", - "isSkipped": true, + "isSkipped": false, "isTodo": false, "children": [ { @@ -13739,7 +14642,7 @@ "label": "clicking on the ", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -13749,7 +14652,7 @@ "label": "clicking on the ", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false }, { @@ -13759,7 +14662,7 @@ "label": "clicking on the ", "indent": 4, "type": "it", - "isSkipped": true, + "isSkipped": false, "isTodo": false } ] diff --git a/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js b/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js index d86598850a16..a70378380cca 100644 --- a/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js +++ b/x-pack/plugins/cloud_security_posture/common/scripts/get_tests.js @@ -21,6 +21,8 @@ const readline = require('readline'); // Directories to iterate over const FTR_SERVERLESS = 'x-pack/test_serverless/functional/test_suites/security/ftr/cloud_security_posture'; +const FTR_SERVERLESS_API_INTEGRATION = + 'x-pack/test_serverless/api_integration/test_suites/security/cloud_security_posture'; const FTR_API_INTEGRATION = 'x-pack/test/api_integration/apis/cloud_security_posture'; const FTR_CSP_API = 'x-pack/test/cloud_security_posture_api'; const FTR_CSP_FUNCTIONAL = 'x-pack/test/cloud_security_posture_functional'; @@ -28,6 +30,7 @@ const UNIT_TEST_CSP = 'x-pack/plugins/cloud_security_posture'; const directoryPaths = [ FTR_SERVERLESS, + FTR_SERVERLESS_API_INTEGRATION, FTR_API_INTEGRATION, FTR_CSP_API, FTR_CSP_FUNCTIONAL, @@ -75,6 +78,7 @@ const getTags = (filePath, testSuits) => { if ( filePath.startsWith(FTR_SERVERLESS) || + filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION) || filePath.startsWith(FTR_API_INTEGRATION) || filePath.startsWith(FTR_CSP_API) || filePath.startsWith(FTR_CSP_FUNCTIONAL) @@ -82,7 +86,15 @@ const getTags = (filePath, testSuits) => { tags.push('FTR'); } - if (filePath.startsWith(FTR_API_INTEGRATION) || filePath.startsWith(FTR_CSP_API)) { + if (filePath.startsWith(FTR_SERVERLESS) || filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION)) { + tags.push('SERVERLESS'); + } + + if ( + filePath.startsWith(FTR_API_INTEGRATION) || + filePath.startsWith(FTR_CSP_API) || + filePath.startsWith(FTR_SERVERLESS_API_INTEGRATION) + ) { tags.push('API INTEGRATION'); } @@ -278,6 +290,7 @@ const groupTestsByDirectory = (testLogs) => { const tagShieldsColors = { FTR: 'blue', UT: 'brightgreen', + SERVERLESS: 'pink', 'HAS SKIP': 'yellow', 'HAS TODO': 'green', 'API INTEGRATION': 'purple', @@ -358,9 +371,10 @@ process.on('exit', () => { console.log('🌟 Cloud Security Posture tests were processed successfully! ✨'); console.log(`ℳ MD file: file://${path.resolve(MD_FILE_PATH)}`); console.log(`📄 Logs file: file://${path.resolve(CSP_TEST_LOGS_FILE_PATH)}`); - console.log('📊 Copy Logs file content to the dedicated app\'s "data.json" for visualization.'); - console.log('⬛️ Dedicated app sandbox: https://codesandbox.io/p/sandbox/zen-smoke-vxgs2c'); console.log('🚀 Dedicated app: https://vxgs2c.csb.app/'); + console.log( + '⬆️ The app will be automatically updated with the latest logs file from elastic/kibana/main' + ); } else { console.error(`Logs generation has failed`); } diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts index cd45c28f90d8..1b856fd343d2 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_grouping/use_cloud_security_grouping.ts @@ -36,6 +36,7 @@ export const useCloudSecurityGrouping = ({ groupingLevel, groupingLocalStorageKey, maxGroupingLevels = DEFAULT_MAX_GROUPING_LEVELS, + groupsUnit, }: { dataView: DataView; groupingTitle: string; @@ -47,6 +48,7 @@ export const useCloudSecurityGrouping = ({ groupingLevel?: number; groupingLocalStorageKey: string; maxGroupingLevels?: number; + groupsUnit?: (n: number, parentSelectedGroup: string, hasNullGroup: boolean) => string; }) => { const getPersistedDefaultQuery = usePersistedQuery(getDefaultQuery); const { urlQuery, setUrlQuery } = useUrlQuery(getPersistedDefaultQuery); @@ -63,6 +65,7 @@ export const useCloudSecurityGrouping = ({ unit, groupPanelRenderer, groupStatsRenderer, + groupsUnit, }, defaultGroupingOptions, fields: dataView.fields, diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx similarity index 95% rename from x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx rename to x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx index 4039d458548b..49c33f343e09 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credential_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credential_form.tsx @@ -25,22 +25,24 @@ import type { NewPackagePolicy } from '@kbn/fleet-plugin/public'; import { NewPackagePolicyInput, PackageInfo } from '@kbn/fleet-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import { GcpCredentialsType } from '../../../common/types_old'; + +import { GcpCredentialsType } from '../../../../common/types_old'; import { CLOUDBEAT_GCP, SETUP_ACCESS_CLOUD_SHELL, SETUP_ACCESS_MANUAL, -} from '../../../common/constants'; -import { CspRadioOption, RadioGroup } from './csp_boxed_radio_group'; +} from '../../../../common/constants'; +import { CspRadioOption, RadioGroup } from '../csp_boxed_radio_group'; import { getCspmCloudShellDefaultValue, getPosturePolicy, NewPackagePolicyPostureInput, -} from './utils'; -import { MIN_VERSION_GCP_CIS } from '../../common/constants'; -import { cspIntegrationDocsNavigation } from '../../common/navigation/constants'; -import { ReadDocumentation } from './aws_credentials_form/aws_credentials_form'; -import { GCP_ORGANIZATION_ACCOUNT } from './policy_template_form'; +} from '../utils'; +import { MIN_VERSION_GCP_CIS } from '../../../common/constants'; +import { cspIntegrationDocsNavigation } from '../../../common/navigation/constants'; +import { ReadDocumentation } from '../aws_credentials_form/aws_credentials_form'; +import { GCP_ORGANIZATION_ACCOUNT } from '../policy_template_form'; +import { GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ } from '../../test_subjects'; export const CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS = { GOOGLE_CLOUD_SHELL_SETUP: 'google_cloud_shell_setup_test_id', @@ -51,7 +53,7 @@ export const CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS = { CREDENTIALS_JSON: 'credentials_json_test_id', }; type SetupFormatGCP = 'google_cloud_shell' | 'manual'; -const GCPSetupInfoContent = () => ( +export const GCPSetupInfoContent = () => ( <> @@ -238,7 +240,7 @@ const getSetupFormatOptions = (): CspRadioOption[] => [ defaultMessage: 'Google Cloud Shell', }), disabled: false, - testId: 'gcpGoogleCloudShellOptionTestId', + testId: GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.CLOUD_SHELL, }, { id: SETUP_ACCESS_MANUAL, @@ -246,11 +248,11 @@ const getSetupFormatOptions = (): CspRadioOption[] => [ defaultMessage: 'Manual', }), disabled: false, - testId: 'gcpManualOptionTestId', + testId: GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.MANUAL, }, ]; -interface GcpFormProps { +export interface GcpFormProps { newPolicy: NewPackagePolicy; input: Extract; updatePolicy(updatedPolicy: NewPackagePolicy): void; @@ -486,7 +488,7 @@ export const GcpCredentialsForm = ({ ); }; -const GcpInputVarFields = ({ +export const GcpInputVarFields = ({ fields, onChange, isOrganization, @@ -511,7 +513,10 @@ const GcpInputVarFields = ({ const credentialFieldValue = credentialOptionsList[0].value; const credentialJSONValue = credentialOptionsList[1].value; - const credentialsTypeValue = credentialsTypeFields?.value || credentialOptionsList[0].value; + const credentialsTypeValue = + credentialsTypeFields?.value || + (credentialFilesFields && credentialFieldValue) || + (credentialJSONFields && credentialJSONValue); return (
diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx new file mode 100644 index 000000000000..8a289ca755e2 --- /dev/null +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/gcp_credentials_form/gcp_credentials_form_agentless.tsx @@ -0,0 +1,62 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiSpacer } from '@elastic/eui'; + +import { + GcpFormProps, + GCPSetupInfoContent, + GcpInputVarFields, + gcpField, + getInputVarsFields, +} from './gcp_credential_form'; +import { getPosturePolicy } from '../utils'; +import { ReadDocumentation } from '../aws_credentials_form/aws_credentials_form'; +import { cspIntegrationDocsNavigation } from '../../../common/navigation/constants'; + +export const GcpCredentialsFormAgentless = ({ + input, + newPolicy, + updatePolicy, + disabled, +}: GcpFormProps) => { + const accountType = input.streams?.[0]?.vars?.['gcp.account_type']?.value; + const isOrganization = accountType === 'organization-account'; + const organizationFields = ['gcp.organization_id', 'gcp.credentials.json']; + const singleAccountFields = ['gcp.project_id', 'gcp.credentials.json']; + + /* + For Agentless only JSON credentials type is supported. + Also in case of organisation setup, project_id is not required in contrast to Agent-based. + */ + const fields = getInputVarsFields(input, gcpField.fields).filter((field) => { + if (isOrganization) { + return organizationFields.includes(field.id); + } else { + return singleAccountFields.includes(field.id); + } + }); + + return ( + <> + + + + updatePolicy(getPosturePolicy(newPolicy, input.type, { [key]: { value } })) + } + isOrganization={isOrganization} + /> + + + + + ); +}; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts index f893545024d7..b960ac3c48e2 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/mocks.ts @@ -5,7 +5,7 @@ * 2.0. */ import type { NewPackagePolicy } from '@kbn/fleet-plugin/public'; -import type { PackageInfo } from '@kbn/fleet-plugin/common'; +import type { PackageInfo, PackagePolicyConfigRecord } from '@kbn/fleet-plugin/common'; import { createNewPackagePolicyMock, createAgentPolicyMock } from '@kbn/fleet-plugin/common/mocks'; import { CLOUDBEAT_GCP, @@ -17,11 +17,15 @@ import { } from '../../../common/constants'; import type { PostureInput } from '../../../common/types_old'; -export const getMockPolicyAWS = () => getPolicyMock(CLOUDBEAT_AWS, 'cspm', 'aws'); -export const getMockPolicyGCP = () => getPolicyMock(CLOUDBEAT_GCP, 'cspm', 'gcp'); -export const getMockPolicyAzure = () => getPolicyMock(CLOUDBEAT_AZURE, 'cspm', 'azure'); +export const getMockPolicyAWS = (vars?: PackagePolicyConfigRecord) => + getPolicyMock(CLOUDBEAT_AWS, 'cspm', 'aws', vars); +export const getMockPolicyGCP = (vars?: PackagePolicyConfigRecord) => + getPolicyMock(CLOUDBEAT_GCP, 'cspm', 'gcp', vars); +export const getMockPolicyAzure = (vars?: PackagePolicyConfigRecord) => + getPolicyMock(CLOUDBEAT_AZURE, 'cspm', 'azure', vars); export const getMockPolicyK8s = () => getPolicyMock(CLOUDBEAT_VANILLA, 'kspm', 'self_managed'); -export const getMockPolicyEKS = () => getPolicyMock(CLOUDBEAT_EKS, 'kspm', 'eks'); +export const getMockPolicyEKS = (vars?: PackagePolicyConfigRecord) => + getPolicyMock(CLOUDBEAT_EKS, 'kspm', 'eks', vars); export const getMockPolicyVulnMgmtAWS = () => getPolicyMock(CLOUDBEAT_VULN_MGMT_AWS, 'vuln_mgmt', 'aws'); export const getMockAgentlessAgentPolicy = () => { @@ -131,7 +135,8 @@ export const getMockPackageInfoCspmAzure = (packageVersion = '1.6.0') => { const getPolicyMock = ( type: PostureInput, posture: string, - deployment: string + deployment: string, + vars: object = {} ): NewPackagePolicy => { const mockPackagePolicy = createNewPackagePolicyMock(); @@ -204,26 +209,48 @@ const getPolicyMock = ( type: CLOUDBEAT_EKS, policy_template: 'kspm', enabled: type === CLOUDBEAT_EKS, - streams: [{ enabled: type === CLOUDBEAT_EKS, data_stream: dataStream, vars: eksVarsMock }], + streams: [ + { + enabled: type === CLOUDBEAT_EKS, + data_stream: dataStream, + vars: { ...eksVarsMock, ...vars }, + }, + ], }, { type: CLOUDBEAT_AWS, policy_template: 'cspm', enabled: type === CLOUDBEAT_AWS, - streams: [{ enabled: type === CLOUDBEAT_AWS, data_stream: dataStream, vars: awsVarsMock }], + streams: [ + { + enabled: type === CLOUDBEAT_AWS, + data_stream: dataStream, + vars: { ...awsVarsMock, ...vars }, + }, + ], }, { type: CLOUDBEAT_GCP, policy_template: 'cspm', enabled: type === CLOUDBEAT_GCP, - streams: [{ enabled: type === CLOUDBEAT_GCP, data_stream: dataStream, vars: gcpVarsMock }], + streams: [ + { + enabled: type === CLOUDBEAT_GCP, + data_stream: dataStream, + vars: { ...gcpVarsMock, ...vars }, + }, + ], }, { type: CLOUDBEAT_AZURE, policy_template: 'cspm', enabled: false, streams: [ - { enabled: type === CLOUDBEAT_AZURE, data_stream: dataStream, vars: azureVarsMock }, + { + enabled: type === CLOUDBEAT_AZURE, + data_stream: dataStream, + vars: { ...azureVarsMock, ...vars }, + }, ], }, { diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx index c7413bdac83b..3c8b767d1bde 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.test.tsx @@ -45,11 +45,13 @@ import { useParams } from 'react-router-dom'; import { createReactQueryResponse } from '../../test/fixtures/react_query'; import { useCspSetupStatusApi } from '../../common/api/use_setup_status_api'; import { usePackagePolicyList } from '../../common/api/use_package_policy_list'; -import { CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS } from './gcp_credential_form'; +import { CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS } from './gcp_credentials_form/gcp_credential_form'; import { waitForEuiPopoverOpen } from '@elastic/eui/lib/test/rtl'; import { AWS_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ, AWS_CREDENTIALS_TYPE_SELECTOR_TEST_SUBJ, + CIS_GCP_OPTION_TEST_SUBJ, + GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ, SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ, SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ, } from '../test_subjects'; @@ -1489,24 +1491,107 @@ describe('', () => { }); }); - it('should not render setup technology selector for KSPM', () => { + it('should render setup technology selector for GCP for organisation account type', async () => { const agentlessPolicy = getMockAgentlessAgentPolicy(); - const newPackagePolicy = getMockPolicyEKS(); + const newPackagePolicy = getMockPolicyGCP(); - const { queryByTestId } = render( - + const { getByTestId, queryByTestId, getByRole } = render( + ); + // navigate to GCP + const gcpSelectorButton = getByTestId(CIS_GCP_OPTION_TEST_SUBJ); + userEvent.click(gcpSelectorButton); + const setupTechnologySelectorAccordion = queryByTestId( SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ ); + const setupTechnologySelector = getByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ); + const orgIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.ORGANIZATION_ID); + const projectIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID); + const credentialsJsonField = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_JSON + ); + const credentialsTypSelector = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_TYPE + ); + const credentialsFileField = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_FILE + ); - expect(setupTechnologySelectorAccordion).not.toBeInTheDocument(); + // default state for GCP with the Org selected + expect(setupTechnologySelectorAccordion).toBeInTheDocument(); + expect(setupTechnologySelector).toBeInTheDocument(); + expect(setupTechnologySelector).toHaveTextContent(/agentless/i); + expect(orgIdField).toBeInTheDocument(); + expect(credentialsJsonField).toBeInTheDocument(); + expect(projectIdField).not.toBeInTheDocument(); + expect(credentialsTypSelector).not.toBeInTheDocument(); + expect(credentialsFileField).not.toBeInTheDocument(); + + // select agent-based and check for cloudformation option + userEvent.click(setupTechnologySelector); + const agentBasedOption = getByRole('option', { name: /agent-based/i }); + await waitForEuiPopoverOpen(); + userEvent.click(agentBasedOption); + await waitFor(() => { + expect(getByTestId(GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.CLOUD_SHELL)).toBeInTheDocument(); + expect(getByTestId(GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ.MANUAL)).toBeInTheDocument(); + }); }); - it('should not render setup technology selector for CNVM', () => { + it('should render setup technology selector for GCP for single-account', async () => { const agentlessPolicy = getMockAgentlessAgentPolicy(); - const newPackagePolicy = getMockPolicyVulnMgmtAWS(); + const newPackagePolicy = getMockPolicyGCP({ + 'gcp.account_type': { value: GCP_SINGLE_ACCOUNT, type: 'text' }, + }); + + const { getByTestId, queryByTestId } = render( + + ); + + // navigate to GCP + const gcpSelectorButton = getByTestId(CIS_GCP_OPTION_TEST_SUBJ); + userEvent.click(gcpSelectorButton); + + const setupTechnologySelectorAccordion = queryByTestId( + SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ + ); + const setupTechnologySelector = queryByTestId(SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ); + const orgIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.ORGANIZATION_ID); + const projectIdField = queryByTestId(CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.PROJECT_ID); + const credentialsJsonField = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_JSON + ); + const credentialsTypSelector = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_TYPE + ); + const credentialsFileField = queryByTestId( + CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS.CREDENTIALS_FILE + ); + + // default state for GCP with the Org selected + expect(setupTechnologySelectorAccordion).toBeInTheDocument(); + expect(setupTechnologySelector).toBeInTheDocument(); + expect(setupTechnologySelector).toHaveTextContent(/agentless/i); + expect(orgIdField).not.toBeInTheDocument(); + expect(credentialsJsonField).toBeInTheDocument(); + expect(projectIdField).toBeInTheDocument(); + expect(credentialsTypSelector).not.toBeInTheDocument(); + expect(credentialsFileField).not.toBeInTheDocument(); + }); + + it('should not render setup technology selector for KSPM', () => { + const agentlessPolicy = getMockAgentlessAgentPolicy(); + const newPackagePolicy = getMockPolicyEKS(); const { queryByTestId } = render( @@ -1519,16 +1604,12 @@ describe('', () => { expect(setupTechnologySelectorAccordion).not.toBeInTheDocument(); }); - it('should not render setup technology selector for CSPM GCP', () => { + it('should not render setup technology selector for CNVM', () => { const agentlessPolicy = getMockAgentlessAgentPolicy(); - const newPackagePolicy = getMockPolicyGCP(); + const newPackagePolicy = getMockPolicyVulnMgmtAWS(); const { queryByTestId } = render( - + ); const setupTechnologySelectorAccordion = queryByTestId( diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx index 303df35545db..37c0e147c79b 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_form.tsx @@ -58,7 +58,7 @@ import { PolicyTemplateVarsForm, } from './policy_template_selectors'; import { usePackagePolicyList } from '../../common/api/use_package_policy_list'; -import { gcpField, getInputVarsFields } from './gcp_credential_form'; +import { gcpField, getInputVarsFields } from './gcp_credentials_form/gcp_credential_form'; import { SetupTechnologySelector } from './setup_technology_selector/setup_technology_selector'; import { useSetupTechnology } from './setup_technology_selector/use_setup_technology'; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx index 7a045e7f82c0..a7a96ba4c917 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/policy_template_selectors.tsx @@ -23,7 +23,8 @@ import { AzureCredentialsForm } from './azure_credentials_form/azure_credentials import { AwsCredentialsForm } from './aws_credentials_form/aws_credentials_form'; import { AwsCredentialsFormAgentless } from './aws_credentials_form/aws_credentials_form_agentless'; import { EksCredentialsForm } from './eks_credentials_form'; -import { GcpCredentialsForm } from './gcp_credential_form'; +import { GcpCredentialsForm } from './gcp_credentials_form/gcp_credential_form'; +import { GcpCredentialsFormAgentless } from './gcp_credentials_form/gcp_credentials_form_agentless'; interface PolicyTemplateSelectorProps { selectedTemplate: CloudSecurityPolicyTemplate; @@ -84,16 +85,22 @@ export const PolicyTemplateVarsForm = ({ setupTechnology, ...props }: PolicyTemplateVarsFormProps) => { + const isAgentless = setupTechnology === SetupTechnology.AGENTLESS; + switch (input.type) { + case 'cloudbeat/cis_eks': + return ; case 'cloudbeat/cis_aws': - if (setupTechnology === SetupTechnology.AGENTLESS) { + if (isAgentless) { return ; } return ; - case 'cloudbeat/cis_eks': - return ; case 'cloudbeat/cis_gcp': + if (isAgentless) { + return ; + } + return ; case 'cloudbeat/cis_azure': return ; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts index 744a87a009f9..0e32964fae40 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.test.ts @@ -10,7 +10,7 @@ import { renderHook, act } from '@testing-library/react-hooks'; import { SetupTechnology } from '@kbn/fleet-plugin/public'; import { AgentPolicy, NewPackagePolicyInput } from '@kbn/fleet-plugin/common'; -import { CLOUDBEAT_AWS } from '../../../../common/constants'; +import { CLOUDBEAT_AWS, CLOUDBEAT_AZURE, CLOUDBEAT_GCP } from '../../../../common/constants'; import { useSetupTechnology } from './use_setup_technology'; describe('useSetupTechnology', () => { @@ -27,7 +27,7 @@ describe('useSetupTechnology', () => { expect(result.current.setupTechnology).toBe(SetupTechnology.AGENT_BASED); }); - it('sets to AGENTLESS when agentless is available', () => { + it('sets to AGENTLESS when agentless is available and AWS cloud', () => { const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy; const input = { type: CLOUDBEAT_AWS } as NewPackagePolicyInput; const { result } = renderHook(() => @@ -37,6 +37,26 @@ describe('useSetupTechnology', () => { expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS); }); + it('sets to AGENTLESS when agentless is available and GCP cloud', () => { + const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy; + const input = { type: CLOUDBEAT_GCP } as NewPackagePolicyInput; + const { result } = renderHook(() => + useSetupTechnology({ input, agentlessPolicy, isEditPage }) + ); + expect(result.current.isAgentlessAvailable).toBeTruthy(); + expect(result.current.setupTechnology).toBe(SetupTechnology.AGENTLESS); + }); + + it('sets to AGENT_BASED when agentless is available and Azure cloud', () => { + const agentlessPolicy = { id: 'agentlessPolicyId' } as AgentPolicy; + const input = { type: CLOUDBEAT_AZURE } as NewPackagePolicyInput; + const { result } = renderHook(() => + useSetupTechnology({ input, agentlessPolicy, isEditPage }) + ); + expect(result.current.isAgentlessAvailable).toBeFalsy(); + expect(result.current.setupTechnology).toBe(SetupTechnology.AGENT_BASED); + }); + it('sets to AGENT_BASED when agentPolicyId differs from agentlessPolicyId', () => { const input = { type: CLOUDBEAT_AWS } as NewPackagePolicyInput; const agentPolicy = { id: 'agentPolicyId' } as AgentPolicy; diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts index 4201ffde1b2a..bcca6cd2ed41 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/setup_technology_selector/use_setup_technology.ts @@ -8,7 +8,7 @@ import { useEffect, useState } from 'react'; import { AgentPolicy, NewPackagePolicyInput } from '@kbn/fleet-plugin/common'; import { SetupTechnology } from '@kbn/fleet-plugin/public'; -import { CLOUDBEAT_AWS } from '../../../../common/constants'; +import { CLOUDBEAT_AWS, CLOUDBEAT_GCP } from '../../../../common/constants'; export const useSetupTechnology = ({ input, @@ -24,7 +24,9 @@ export const useSetupTechnology = ({ isEditPage: boolean; }) => { const isCspmAws = input.type === CLOUDBEAT_AWS; - const isAgentlessAvailable = Boolean(isCspmAws && agentlessPolicy); + const isCspmGcp = input.type === CLOUDBEAT_GCP; + const isAgentlessSupportedForCloudProvider = isCspmAws || isCspmGcp; + const isAgentlessAvailable = Boolean(isAgentlessSupportedForCloudProvider && agentlessPolicy); const agentPolicyId = agentPolicy?.id; const agentlessPolicyId = agentlessPolicy?.id; const [setupTechnology, setSetupTechnology] = useState(() => { diff --git a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts index 250b5d01c82c..e5c01bfb933e 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/test_subjects.ts @@ -54,6 +54,11 @@ export const AWS_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ = { CLOUDFORMATION: 'aws-cloudformation-setup-option', MANUAL: 'aws-manual-setup-option', }; +export const GCP_CREDENTIALS_TYPE_OPTIONS_TEST_SUBJ = { + CLOUD_SHELL: 'gcpGoogleCloudShellOptionTestId', + MANUAL: 'gcpManualOptionTestId', +}; +export const CIS_GCP_OPTION_TEST_SUBJ = 'cisGcpTestId'; export const SETUP_TECHNOLOGY_SELECTOR_ACCORDION_TEST_SUBJ = 'setup-technology-selector-accordion'; export const SETUP_TECHNOLOGY_SELECTOR_TEST_SUBJ = 'setup-technology-selector'; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts index 1292da860135..5ae8f4eb02ac 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/constants.ts @@ -17,6 +17,42 @@ export const FINDINGS_UNIT = (totalCount: number) => defaultMessage: `{totalCount, plural, =1 {finding} other {findings}}`, }); +export const MISCONFIGURATIONS_GROUPS_UNIT = ( + totalCount: number, + selectedGroup: string, + hasNullGroup: boolean +) => { + const groupCount = hasNullGroup ? totalCount - 1 : totalCount; + + switch (selectedGroup) { + case FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME: + return i18n.translate('xpack.csp.findings.groupUnit.resource', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {resource} other {resources}}`, + }); + case FINDINGS_GROUPING_OPTIONS.RULE_NAME: + return i18n.translate('xpack.csp.findings.groupUnit.rule', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {rule} other {rules}}`, + }); + case FINDINGS_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: + return i18n.translate('xpack.csp.findings.groupUnit.cloudAccount', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {cloud account} other {cloud accounts}}`, + }); + case FINDINGS_GROUPING_OPTIONS.ORCHESTRATOR_CLUSTER_NAME: + return i18n.translate('xpack.csp.findings.groupUnit.kubernetes', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {kubernetes cluster} other {kubernetes clusters}}`, + }); + default: + return i18n.translate('xpack.csp.findings.groupUnit', { + values: { groupCount: totalCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {group} other {groups}}`, + }); + } +}; + export const NULL_GROUPING_UNIT = i18n.translate('xpack.csp.findings.grouping.nullGroupUnit', { defaultMessage: 'findings', }); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx index 81df07731c5d..17b8f0ab0f54 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings_grouping.tsx @@ -27,7 +27,13 @@ import { FindingsRootGroupingAggregation, useGroupedFindings, } from './use_grouped_findings'; -import { FINDINGS_UNIT, groupingTitle, defaultGroupingOptions, getDefaultQuery } from './constants'; +import { + FINDINGS_UNIT, + groupingTitle, + defaultGroupingOptions, + getDefaultQuery, + MISCONFIGURATIONS_GROUPS_UNIT, +} from './constants'; import { useCloudSecurityGrouping } from '../../../components/cloud_security_grouping'; import { getFilters } from '../utils/get_filters'; import { useGetCspBenchmarkRulesStatesApi } from './use_get_benchmark_rules_state_api'; @@ -161,6 +167,7 @@ export const useLatestFindingsGrouping = ({ groupStatsRenderer, groupingLocalStorageKey: LOCAL_STORAGE_FINDINGS_GROUPING_KEY, groupingLevel, + groupsUnit: MISCONFIGURATIONS_GROUPS_UNIT, }); const additionalFilters = buildEsQuery(dataView, [], groupFilters); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx index b83844416c07..76aa293c0ff4 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx @@ -33,7 +33,7 @@ import { VULNERABILITY_FIELDS, } from '../constants'; import { useCloudSecurityGrouping } from '../../../components/cloud_security_grouping'; -import { VULNERABILITIES_UNIT, groupingTitle } from '../translations'; +import { VULNERABILITIES_UNIT, groupingTitle, VULNERABILITIES_GROUPS_UNIT } from '../translations'; const getTermAggregation = (key: keyof VulnerabilitiesGroupingAggregation, field: string) => ({ [key]: { @@ -147,6 +147,7 @@ export const useLatestVulnerabilitiesGrouping = ({ groupStatsRenderer, groupingLocalStorageKey: LOCAL_STORAGE_VULNERABILITIES_GROUPING_KEY, groupingLevel, + groupsUnit: VULNERABILITIES_GROUPS_UNIT, }); const additionalFilters = buildEsQuery(dataView, [], groupFilters); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts index f7d88f396f5c..148ac551337d 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts @@ -6,6 +6,7 @@ */ import { i18n } from '@kbn/i18n'; +import { GROUPING_OPTIONS } from './constants'; export const FILTER_IN = i18n.translate('xpack.csp.vulnerabilities.table.filterIn', { defaultMessage: 'Filter in', @@ -29,6 +30,37 @@ export const VULNERABILITIES_UNIT = (totalCount: number) => defaultMessage: `{totalCount, plural, =1 {vulnerability} other {vulnerabilities}}`, }); +export const VULNERABILITIES_GROUPS_UNIT = ( + totalCount: number, + selectedGroup: string, + hasNullGroup: boolean +) => { + const groupCount = hasNullGroup ? totalCount - 1 : totalCount; + + switch (selectedGroup) { + case GROUPING_OPTIONS.RESOURCE_NAME: + return i18n.translate('xpack.csp.vulnerabilities.groupUnit.resource', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {resource} other {resources}}`, + }); + case GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: + return i18n.translate('xpack.csp.vulnerabilities.groupUnit.cloudAccount', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {cloud account} other {cloud accounts}}`, + }); + case GROUPING_OPTIONS.CVE: + return i18n.translate('xpack.csp.vulnerabilities.groupUnit.cve', { + values: { groupCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {CVE} other {CVEs}}`, + }); + default: + return i18n.translate('xpack.csp.vulnerabilities.groupUnit', { + values: { groupCount: totalCount }, + defaultMessage: `{groupCount} {groupCount, plural, =1 {group} other {groups}}`, + }); + } +}; + export const NULL_GROUPING_UNIT = i18n.translate( 'xpack.csp.vulnerabilities.grouping.nullGroupUnit', { diff --git a/x-pack/plugins/data_visualizer/common/types/field_stats.ts b/x-pack/plugins/data_visualizer/common/types/field_stats.ts index ea6956479bfe..bf707775bedf 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_stats.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_stats.ts @@ -93,8 +93,8 @@ export interface StringFieldStats { fieldName: string; isTopValuesSampled: boolean; topValues: Bucket[]; - topValuesSampleSize: number; - topValuesSamplerShardSize: number; + topValuesSampleSize?: number; + topValuesSamplerShardSize?: number; } export interface DateFieldStats { diff --git a/x-pack/plugins/data_visualizer/public/application/_index.scss b/x-pack/plugins/data_visualizer/public/application/_index.scss index 9d38869d6d61..ecc7a2fce1fa 100644 --- a/x-pack/plugins/data_visualizer/public/application/_index.scss +++ b/x-pack/plugins/data_visualizer/public/application/_index.scss @@ -1,2 +1 @@ @import 'common/components/index'; -@import 'file_data_visualizer/index'; diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx index d1ee934f6f56..ae9731f28038 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/top_values/top_values.tsx @@ -55,10 +55,16 @@ export const TopValues: FC = ({ stats, fieldFormat, barColor, compressed, } = useDataVisualizerKibana(); if (stats === undefined || !stats.topValues) return null; - const { topValues, fieldName, sampleCount } = stats; + const { topValues: originalTopValues, fieldName, sampleCount } = stats; - if (topValues?.length === 0) return null; + if (originalTopValues?.length === 0) return null; const totalDocuments = stats.totalDocuments ?? sampleCount ?? 0; + + const topValues = originalTopValues.map((bucket) => ({ + ...bucket, + percent: + typeof bucket.percent === 'number' ? bucket.percent : bucket.doc_count / totalDocuments, + })); const topValuesOtherCountPercent = 1 - (topValues ? topValues.reduce((acc, bucket) => acc + bucket.percent, 0) : 0); const topValuesOtherCount = Math.floor(topValuesOtherCountPercent * (sampleCount ?? 0)); diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/_index.scss deleted file mode 100644 index 841415620d69..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'components/index'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/_index.scss deleted file mode 100644 index 0477913cd0be..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/_index.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import 'edit_flyout/index'; -@import 'file_contents/index'; -@import 'import_summary/index'; -@import 'file_data_visualizer_view/index'; -@import 'results_view/index'; -@import 'about_panel/index'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_about_panel.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_about_panel.scss deleted file mode 100644 index e4decb0d4552..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_about_panel.scss +++ /dev/null @@ -1,12 +0,0 @@ -.file-datavisualizer-about-panel__icon { - width: $euiSizeXL * 3; - height: $euiSizeXL * 3; - margin-left: $euiSizeXL; - margin-right: $euiSizeL; -} - -.euiFlexItem.file-datavisualizer-about-panel__doc-icon { - margin-left: $euiSizeXL; - margin-right: $euiSizeXS; - margin-top: $euiSize; -} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_index.scss deleted file mode 100644 index e2edab76538c..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'about_panel' diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx index c0f56ead665b..64f08822617f 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/about_panel.tsx @@ -7,6 +7,8 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; import type { FC } from 'react'; import React from 'react'; @@ -28,6 +30,13 @@ interface Props { hasPermissionToImport: boolean; } +const aboutPanelContentStyle = css({ + '.euiFilePicker__icon': { + width: euiThemeVars.euiSizeXXL, + height: euiThemeVars.euiSizeXXL, + }, +}); + export const AboutPanel: FC = ({ onFilePickerChange, hasPermissionToImport }) => { return ( @@ -40,6 +49,7 @@ export const AboutPanel: FC = ({ onFilePickerChange, hasPermissionToImpor
= ({ onFilePickerChange, hasPermissionToImpor } )} onChange={(files) => onFilePickerChange(files)} - className="file-datavisualizer-file-picker" + css={aboutPanelContentStyle} />
@@ -59,11 +69,7 @@ export const AboutPanel: FC = ({ onFilePickerChange, hasPermissionToImpor export const LoadingPanel: FC = () => { return ( - + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx index d15834ae11d7..cc7a66d13892 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/about_panel/welcome_content.tsx @@ -8,11 +8,25 @@ import { FormattedMessage } from '@kbn/i18n-react'; import type { FC } from 'react'; import React from 'react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { css } from '@emotion/react'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import { useDataVisualizerKibana } from '../../../kibana_context'; +const docIconStyle = css({ + marginLeft: euiThemeVars.euiSizeL, + marginTop: euiThemeVars.euiSizeXS, +}); + +const mainIconStyle = css({ + width: '96px', + height: '96px', + marginLeft: euiThemeVars.euiSizeXL, + marginRight: euiThemeVars.euiSizeL, +}); + interface Props { hasPermissionToImport: boolean; } @@ -28,7 +42,7 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => { return ( - + @@ -65,8 +79,8 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => {

- - + + @@ -81,8 +95,8 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => { - - + + @@ -97,8 +111,8 @@ export const WelcomeContent: FC = ({ hasPermissionToImport }) => { - - + + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/edit_flyout/_edit_flyout.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/edit_flyout/_edit_flyout.scss deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/edit_flyout/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/edit_flyout/_index.scss deleted file mode 100644 index 28489c50f19b..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/edit_flyout/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'edit_flyout'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/_file_contents.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/_file_contents.scss deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_contents/_index.scss deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_file_data_visualizer_view.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_file_data_visualizer_view.scss deleted file mode 100644 index fead6f42dbe5..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_file_data_visualizer_view.scss +++ /dev/null @@ -1,13 +0,0 @@ -.file-datavisualizer-file-picker { - max-width: inherit; - - .euiFilePicker__prompt { - background-color: $euiColorEmptyShade; - box-shadow: none; - - .euiFilePicker__icon { - width: $euiSizeXXL; - height: $euiSizeXXL; - } - } -} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_index.scss deleted file mode 100644 index 8bbc5bd609e7..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'file_data_visualizer_view'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_import_summary.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_import_summary.scss deleted file mode 100644 index a2b4e36fcbe5..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_import_summary.scss +++ /dev/null @@ -1,8 +0,0 @@ -.failure-list { - max-height: 200px; - overflow-y: auto; - - .error-message { - color: $euiColorDanger; - } -} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_index.scss deleted file mode 100644 index 117e04733ed0..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'import_summary'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/failures.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/failures.tsx index 0b6eb59622f0..2e29b081765c 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/failures.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_summary/failures.tsx @@ -7,8 +7,10 @@ import { FormattedMessage } from '@kbn/i18n-react'; import React, { Component } from 'react'; +import { euiThemeVars } from '@kbn/ui-theme'; import { EuiAccordion, EuiPagination } from '@elastic/eui'; +import { css } from '@emotion/react'; const PAGE_SIZE = 100; @@ -28,6 +30,15 @@ interface State { page: number; } +const containerStyle = css({ + maxHeight: '200px', + overflowY: 'auto', +}); + +const errorStyle = css({ + color: euiThemeVars.euiColorDanger, +}); + export class Failures extends Component { state: State = { page: 0 }; @@ -56,11 +67,11 @@ export class Failures extends Component { } paddingSize="m" > -
+
{this._renderPaginationControl()} {this.props.failedDocs.slice(startIndex, endIndex).map(({ item, reason, doc }) => (
-
+
{item}: {reason}
{JSON.stringify(doc)}
diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_index.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_index.scss deleted file mode 100644 index 31f819d4f08b..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@import 'results_view'; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_results_view.scss b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_results_view.scss deleted file mode 100644 index 1c5ea1dd26fd..000000000000 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/_results_view.scss +++ /dev/null @@ -1,10 +0,0 @@ -.results { - .euiDescriptionList { - dd, dt { - margin-top: 5px; - } - dd:nth-child(1), dt:nth-child(1), { - margin-top: 0; - } - } -} diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx index 91b8a388c4c3..0c55b838e37b 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/results_view/results_view.tsx @@ -84,7 +84,7 @@ export const ResultsView: FC = ({ -
+
; if (results) { - const topValuesSampleSize = results?.reduce((acc: number, row) => acc + row[0], 0); - const terms = results.map((row) => ({ key: row[1], doc_count: row[0], - percent: row[0] / topValuesSampleSize, })); return { fieldName: field.name, topValues: terms, - topValuesSampleSize, - topValuesSamplerShardSize: topValuesSampleSize, isTopValuesSampled: false, } as StringFieldStats; } diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_numeric_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_numeric_field_stats.ts index ca8684499eb3..2f0ea4d7b307 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_numeric_field_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_numeric_field_stats.ts @@ -92,7 +92,7 @@ const getESQLNumericFieldStatsInChunk = async ({ const median = values[startIndex + numericAccessorMap.p50]; const percentiles = values - .slice(startIndex + numericAccessorMap.p0, startIndex + numericAccessorMap.p100) + .slice(startIndex + numericAccessorMap.p5, startIndex + numericAccessorMap.p100 + 1) .map((value: number) => ({ value })); const distribution = processDistributionData(percentiles, PERCENTILE_SPACING, min); diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts index b5f26bbb89f0..d78e286e88d3 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/search_strategy/esql_requests/get_text_field_stats.ts @@ -45,9 +45,9 @@ export const getESQLExampleFieldValues = async ({ if (textFieldsResp) { return textFields.map((textField, idx) => { - const examples = (textFieldsResp.rawResponse.values as unknown[][]).map( - (row) => row[idx] - ); + const examples = [ + ...new Set((textFieldsResp.rawResponse.values as unknown[][]).map((row) => row[idx])), + ]; return { fieldName: textField.name, diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts index bc25d0151a5a..56e3daccf231 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/connector/attach_index_api_logic.ts @@ -13,15 +13,21 @@ export interface AttachIndexApiLogicArgs { indexName: string; } +export interface AttachIndexApiLogicResponse { + connectorId: string; + indexName: string; +} + export const attachIndex = async ({ connectorId, indexName, -}: AttachIndexApiLogicArgs): Promise => { +}: AttachIndexApiLogicArgs): Promise => { const route = `/internal/enterprise_search/connectors/${connectorId}/index_name/${indexName}`; await HttpLogic.values.http.put(route); + return { connectorId, indexName }; }; export const AttachIndexApiLogic = createApiLogic(['add_connector_api_logic'], attachIndex); -export type AttachIndexApiLogicActions = Actions; +export type AttachIndexApiLogicActions = Actions; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts index 84784edd8571..538f358b4d59 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/api/index/cached_fetch_index_api_logic.ts @@ -98,9 +98,11 @@ export const CachedFetchIndexApiLogic = kea< if (indexName === values.indexName) return; clearTimeout(values.pollTimeoutId); } - actions.makeRequest({ indexName }); + if (indexName) { + actions.makeRequest({ indexName }); - actions.createPollTimeout(FETCH_INDEX_POLLING_DURATION); + actions.createPollTimeout(FETCH_INDEX_POLLING_DURATION); + } }, stopPolling: () => { if (values.pollTimeoutId) { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx index 75272313fd0f..5699d0019aed 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_box.tsx @@ -6,7 +6,7 @@ */ import React, { useEffect, useState } from 'react'; -import { useLocation } from 'react-router-dom'; +import { useLocation, useParams } from 'react-router-dom'; import { useActions, useValues } from 'kea'; @@ -34,27 +34,49 @@ import { FetchAllIndicesAPILogic } from '../../api/index/fetch_all_indices_api_l import { AttachIndexLogic } from './attach_index_logic'; +const CREATE_NEW_INDEX_GROUP_LABEL = i18n.translate( + 'xpack.enterpriseSearch.attachIndexBox.optionsGroup.createNewIndex', + { + defaultMessage: 'Create new index', + } +); + +const SELECT_EXISTING_INDEX_GROUP_LABEL = i18n.translate( + 'xpack.enterpriseSearch.attachIndexBox.optionsGroup.selectExistingIndex', + { + defaultMessage: 'Select existing index', + } +); + export interface AttachIndexBoxProps { connector: Connector; } export const AttachIndexBox: React.FC = ({ connector }) => { + const { indexName } = useParams<{ indexName: string }>(); const { createIndex, attachIndex, setConnector, checkIndexExists } = useActions(AttachIndexLogic); const { isLoading: isSaveLoading, isExistLoading, - canCreateSameNameIndex, + indexExists, + createApiError, + attachApiError, } = useValues(AttachIndexLogic); - const [selectedIndex, setSelectedIndex] = useState<{ label: string; shouldCreate?: boolean }>(); + const [selectedIndex, setSelectedIndex] = useState< + { label: string; shouldCreate?: boolean } | undefined + >( + connector.index_name + ? { + label: connector.index_name, + } + : undefined + ); const [selectedLanguage] = useState(); - const [showError, setShowError] = useState(false); - useEffect(() => { - if (!canCreateSameNameIndex) { - setShowError(true); - } else { - setShowError(false); - } - }, [canCreateSameNameIndex]); + const [query, setQuery] = useState<{ + hasMatchingOptions: boolean; + isFullMatch: boolean; + searchValue: string; + }>(); const { makeRequest } = useActions(FetchAllIndicesAPILogic); const { data, status } = useValues(FetchAllIndicesAPILogic); @@ -63,26 +85,52 @@ export const AttachIndexBox: React.FC = ({ connector }) => const onSave = () => { if (selectedIndex?.shouldCreate) { createIndex({ indexName: selectedIndex.label, language: selectedLanguage ?? null }); - } else if (selectedIndex) { + } else if (selectedIndex && !(selectedIndex.label === connector.index_name)) { attachIndex({ connectorId: connector.id, indexName: selectedIndex.label }); } }; - const options: Array> = isLoading + const options: Array> = isLoading ? [] : data?.indices.map((index) => { return { label: index.name, }; }) ?? []; + + const shouldPrependUserInputAsOption = + !!query?.searchValue && query.hasMatchingOptions && !query.isFullMatch; + + const groupedOptions: Array> = shouldPrependUserInputAsOption + ? [ + ...[ + { + label: CREATE_NEW_INDEX_GROUP_LABEL, + options: [ + { + label: query.searchValue, + }, + ], + }, + ], + ...[{ label: SELECT_EXISTING_INDEX_GROUP_LABEL, options }], + ] + : [{ label: SELECT_EXISTING_INDEX_GROUP_LABEL, options }]; + useEffect(() => { setConnector(connector); makeRequest({}); - if (!connector.index_name) { + if (!connector.index_name && connector.name) { checkIndexExists({ indexName: connector.name }); } }, [connector.id]); + useEffect(() => { + if (query) { + checkIndexExists({ indexName: query.searchValue }); + } + }, [query]); + const { hash } = useLocation(); useEffect(() => { if (hash) { @@ -96,6 +144,21 @@ export const AttachIndexBox: React.FC = ({ connector }) => } }, [hash]); + const error = + !!query && indexExists[query.searchValue] + ? i18n.translate( + 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexErrorTextLabel', + { + defaultMessage: + "You can't create a new index using an existing index name. Choose an existing index or create a new index with a new name.", + } + ) + : attachApiError?.body?.message || createApiError?.body?.message || undefined; + if (indexName) { + // We don't want to let people edit indices when on the index route + return <>; + } + return ( @@ -122,26 +185,12 @@ export const AttachIndexBox: React.FC = ({ connector }) => 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexLabel', { defaultMessage: 'Associated index' } )} - helpText={ - showError - ? '' - : i18n.translate( - 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexHelpTextLabel', - { defaultMessage: 'You can use an existing index or create a new one.' } - ) - } - error={ - showError - ? i18n.translate( - 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexErrorTextLabel', - { - defaultMessage: - "You can't create a new index using an existing index name. Choose an existing index or create a new index with a new name.", - } - ) - : undefined - } - isInvalid={showError} + helpText={i18n.translate( + 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.associatedIndexHelpTextLabel', + { defaultMessage: 'You can use an existing index or create a new one.' } + )} + error={error} + isInvalid={!!error} > = ({ connector }) => customOptionText={i18n.translate( 'xpack.enterpriseSearch.attachIndexBox.euiFormRow.indexSelector.customOption', { - defaultMessage: 'Create {searchValue} new index', + defaultMessage: 'Create index {searchValue}', values: { searchValue: '{searchValue}' }, } )} isLoading={isLoading} - options={options} + options={groupedOptions} + onSearchChange={(searchValue, hasMatchingOptions) => { + setQuery({ + hasMatchingOptions: !!hasMatchingOptions, + isFullMatch: options.some((option) => option.label === searchValue), + searchValue, + }); + }} onChange={(selection) => { - if (showError) { - setShowError(false); - } - setSelectedIndex(selection[0] || undefined); + const currentSelection = selection[0] ?? undefined; + const selectedIndexOption = currentSelection + ? { + label: currentSelection.label, + shouldCreate: + shouldPrependUserInputAsOption && + !!(currentSelection?.label === query?.searchValue), + } + : undefined; + setSelectedIndex(selectedIndexOption); }} selectedOptions={selectedIndex ? [selectedIndex] : undefined} onCreateOption={(value) => { - if (showError) { - setShowError(false); - } setSelectedIndex({ label: value.trim(), shouldCreate: true }); }} - singleSelection={{ asPlainText: true }} + singleSelection /> + {!connector.index_name && ( + + { + createIndex({ indexName: connector.name, language: null }); + }} + isLoading={isSaveLoading || isExistLoading} + disabled={indexExists[connector.name]} + > + {i18n.translate('xpack.enterpriseSearch.attachIndexBox.createSameIndexButtonLabel', { + defaultMessage: 'Create and attach an index named {indexName}', + values: { indexName: connector.name }, + })} + + {indexExists[connector.name] ? ( + + {i18n.translate('xpack.enterpriseSearch.attachIndexBox.indexNameExistsError', { + defaultMessage: 'Index with name {indexName} already exists', + values: { indexName: connector.name }, + })} + + ) : ( + <> + )} + + )} { - createIndex({ indexName: connector.name, language: null }); - }} - isLoading={isSaveLoading || isExistLoading} - disabled={!canCreateSameNameIndex} + onClick={() => onSave()} + disabled={!selectedIndex || selectedIndex.label === connector.index_name} + isLoading={isSaveLoading} > - {i18n.translate('xpack.enterpriseSearch.attachIndexBox.createSameIndexButtonLabel', { - defaultMessage: 'Create and attach an index with same name', - })} - - - - onSave()} disabled={!selectedIndex} isLoading={isSaveLoading}> {i18n.translate('xpack.enterpriseSearch.attachIndexBox.saveConfigurationButtonLabel', { - defaultMessage: 'Save Configuration', + defaultMessage: 'Save configuration', })} diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts index 298fc333490e..3f0b99a25e4c 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/attach_index_logic.ts @@ -9,7 +9,7 @@ import { kea, MakeLogicType } from 'kea'; import { Connector } from '@kbn/search-connectors'; -import { Status } from '../../../../../common/types/api'; +import { HttpError, Status } from '../../../../../common/types/api'; import { AttachIndexApiLogic, @@ -24,31 +24,42 @@ import { IndexExistsApiLogicActions, } from '../../api/index/index_exists_api_logic'; +import { ConnectorViewActions, ConnectorViewLogic } from './connector_view_logic'; + export interface AttachIndexActions { attachIndex: AttachIndexApiLogicActions['makeRequest']; attachIndexApiError: AttachIndexApiLogicActions['apiError']; attachIndexApiSuccess: AttachIndexApiLogicActions['apiSuccess']; - checkIndexExists: IndexExistsApiLogicActions['makeRequest']; + callCheckIndexExists: IndexExistsApiLogicActions['makeRequest']; + checkIndexExists: ({ indexName }: { indexName: string }) => { indexName: string }; checkIndexExistsApiError: IndexExistsApiLogicActions['apiError']; checkIndexExistsApiSuccess: IndexExistsApiLogicActions['apiSuccess']; createIndex: CreateApiIndexApiLogicActions['makeRequest']; createIndexApiError: CreateApiIndexApiLogicActions['apiError']; createIndexApiSuccess: CreateApiIndexApiLogicActions['apiSuccess']; + fetchConnector: ConnectorViewActions['fetchConnector']; setConnector(connector: Connector): Connector; } export interface AttachIndexValues { + attachApiError: HttpError; attachApiStatus: Status; - canCreateSameNameIndex: boolean; connector: Connector | null; + createApiError: HttpError; createIndexApiStatus: Status; + indexExists: Record; indexExistsApiStatus: Status; isExistLoading: boolean; isLoading: boolean; } export const AttachIndexLogic = kea>({ - actions: { setConnector: (connector) => connector }, + actions: { + checkIndexExists: ({ indexName }) => ({ + indexName, + }), + setConnector: (connector) => connector, + }, connect: { actions: [ AttachIndexApiLogic, @@ -65,16 +76,18 @@ export const AttachIndexLogic = kea ({ attachIndexApiSuccess: () => { if (values.connector) { - // TODO this is hacky - location.reload(); + actions.fetchConnector({ connectorId: values.connector.id }); } }, + checkIndexExists: async ({ indexName }, breakpoint) => { + await breakpoint(200); + actions.callCheckIndexExists({ indexName }); + }, createIndexApiSuccess: async ({ indexName }, breakpoint) => { if (values.connector) { await breakpoint(500); @@ -95,18 +111,21 @@ export const AttachIndexLogic = kea !exists, - }, - ], connector: [ null, { setConnector: (_, connector) => connector, }, ], + indexExists: [ + {}, + { + checkIndexExistsApiSuccess: (state, { exists, indexName }) => ({ + ...state, + [indexName]: exists, + }), + }, + ], }, selectors: ({ selectors }) => ({ isExistLoading: [ diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx index 911e91f6c54c..26df487caf19 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_configuration.tsx @@ -37,7 +37,6 @@ import { HttpLogic } from '../../../shared/http'; import { LicensingLogic } from '../../../shared/licensing'; import { EuiButtonTo, EuiLinkTo } from '../../../shared/react_router_helpers'; import { GenerateConnectorApiKeyApiLogic } from '../../api/connector/generate_connector_api_key_api_logic'; -import { ConnectorConfigurationApiLogic } from '../../api/connector/update_connector_configuration_api_logic'; import { CONNECTOR_DETAIL_TAB_PATH } from '../../routes'; import { SyncsContextMenu } from '../search_index/components/header_actions/syncs_context_menu'; import { ApiKeyConfig } from '../search_index/connector/api_key_configuration'; @@ -54,19 +53,17 @@ import { NativeConnectorConfiguration } from './native_connector_configuration'; export const ConnectorConfiguration: React.FC = () => { const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic); - const { fetchConnector } = useActions(ConnectorViewLogic); - const { index, isLoading, connector } = useValues(ConnectorViewLogic); + const { index, isLoading, connector, updateConnectorConfigurationStatus } = + useValues(ConnectorViewLogic); const cloudContext = useCloudDetails(); const { hasPlatinumLicense } = useValues(LicensingLogic); - const { status } = useValues(ConnectorConfigurationApiLogic); - const { makeRequest } = useActions(ConnectorConfigurationApiLogic); const { errorConnectingMessage, http } = useValues(HttpLogic); + const { fetchConnector, updateConnectorConfiguration } = useActions(ConnectorViewLogic); if (!connector) { return <>; } - // TODO make it work without index if possible if (connector.is_native && connector.service_type) { return ; } @@ -196,9 +193,9 @@ export const ConnectorConfiguration: React.FC = () => { - makeRequest({ + updateConnectorConfiguration({ configuration, connectorId: connector.id, }) @@ -353,12 +350,12 @@ export const ConnectorConfiguration: React.FC = () => { ]} /> - {!connector.index_name && ( + { <> - )} + } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx index 796173903f4e..b17f501501d8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_detail.tsx @@ -45,8 +45,11 @@ export enum ConnectorDetailTabId { export const ConnectorDetail: React.FC = () => { const connectorId = decodeURIComponent(useParams<{ connectorId: string }>().connectorId); const { hasFilteringFeature, isLoading, index, connector } = useValues(ConnectorViewLogic); - const { startConnectorPoll } = useActions(ConnectorViewLogic); + const { fetchConnectorApiReset, startConnectorPoll, stopConnectorPoll } = + useActions(ConnectorViewLogic); useEffect(() => { + stopConnectorPoll(); + fetchConnectorApiReset(); startConnectorPoll(connectorId); }, [connectorId]); diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts index c06a82307f50..a1eef12c28e8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/connector_view_logic.ts @@ -23,9 +23,12 @@ import { CachedFetchConnectorByIdApiLogicValues, } from '../../api/connector/cached_fetch_connector_by_id_api_logic'; +import { + ConnectorConfigurationApiLogic, + PostConnectorConfigurationActions, +} from '../../api/connector/update_connector_configuration_api_logic'; import { FetchIndexActions, FetchIndexApiLogic } from '../../api/index/fetch_index_api_logic'; import { ElasticsearchViewIndex } from '../../types'; -import { IndexNameActions, IndexNameLogic } from '../search_index/index_name_logic'; export interface ConnectorViewActions { fetchConnector: CachedFetchConnectorByIdApiLogicActions['makeRequest']; @@ -38,10 +41,12 @@ export interface ConnectorViewActions { fetchIndexApiError: FetchIndexActions['apiError']; fetchIndexApiReset: FetchIndexActions['apiReset']; fetchIndexApiSuccess: FetchIndexActions['apiSuccess']; - setIndexName: IndexNameActions['setIndexName']; + updateConnectorConfiguration: PostConnectorConfigurationActions['makeRequest']; + updateConnectorConfigurationSuccess: PostConnectorConfigurationActions['apiSuccess']; } export interface ConnectorViewValues { + updateConnectorConfigurationStatus: Status; connector: Connector | undefined; connectorData: CachedFetchConnectorByIdApiLogicValues['connectorData']; connectorError: string | undefined; @@ -75,8 +80,6 @@ export const ConnectorViewLogic = kea ({ @@ -107,10 +117,10 @@ export const ConnectorViewLogic = kea ({ - fetchConnectorApiSuccess: (response) => { - if (response.connector?.index_name) { - actions.setIndexName(response.connector.index_name); + listeners: ({ actions, values }) => ({ + updateConnectorConfigurationSuccess: () => { + if (values.connectorId) { + actions.fetchConnector({ connectorId: values.connectorId }); } }, }), diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx index 2d992b223bab..04c49f07b377 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/native_connector_configuration.tsx @@ -233,12 +233,12 @@ export const NativeConnectorConfiguration: React.FC = () => { ]} /> - {!connector.index_name && ( + { <> - )} + } diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx index a83b29fc0502..d696f4cdb85a 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/delete_connector_modal.tsx @@ -68,7 +68,7 @@ export const DeleteConnectorModal: React.FC = ({ isCr onConfirm={() => { deleteConnector({ connectorId, - shouldDeleteIndex, + shouldDeleteIndex: isCrawler ? true : shouldDeleteIndex, }); }} cancelButtonText={ @@ -127,21 +127,40 @@ export const DeleteConnectorModal: React.FC = ({ isCr

- - - {connectorName} - - ), - }} - /> - + {isCrawler && ( + <> + + + {connectorName} + + ), + }} + /> + + + )} + {!isCrawler && ( + + + {connectorName} + + ), + }} + /> + + )}

- {deleteModalIndexName && ( + {deleteModalIndexName && !isCrawler && ( <> { - const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic); - const { connector, fetchConnectorApiStatus } = useValues(ConnectorViewLogic); - const { fetchConnector } = useActions(ConnectorViewLogic); - const cloudContext = useCloudDetails(); - const { hasPlatinumLicense } = useValues(LicensingLogic); - const { status } = useValues(ConnectorConfigurationApiLogic); - const { makeRequest } = useActions(ConnectorConfigurationApiLogic); - const { http } = useValues(HttpLogic); - - if (!connector) { - return <>; // TODO: show nicer error message - } - - if (connector.is_native && connector.service_type) { - return ; - } - - const hasApiKey = !!(connector.api_key_id ?? apiKeyData); - const docsUrl = CONNECTORS.find( - ({ serviceType }) => serviceType === connector.service_type - )?.docsUrl; - - // TODO service_type === "" is considered unknown/custom connector multipleplaces replace all of them with a better solution - const isBeta = - !connector.service_type || - Boolean(BETA_CONNECTORS.find(({ serviceType }) => serviceType === connector.service_type)); - - return ( - <> - - - - - - ) : ( - i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.apiKey.noApiKeyLabel', - { - defaultMessage: 'Please set an index name before generating an API key', - } - ) - ), - status: hasApiKey ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title', - { - defaultMessage: 'Generate an API key', - } - ), - titleSize: 'xs', - }, - { - children: , - status: connector.description ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle', - { - defaultMessage: 'Name and description', - } - ), - titleSize: 'xs', - }, - { - children: ( - <> - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink', - { defaultMessage: 'configuration file' } - )} - - ), - }} - /> - - - - {getConnectorTemplate({ - apiKeyData, - connectorData: { - id: connector.id, - service_type: connector.service_type, - }, - host: cloudContext.elasticsearchUrl, - })} - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText', - { - defaultMessage: - 'Once configured, deploy the connector on your infrastructure.', - } - )} - - - ), - status: - !connector.status || connector.status === ConnectorStatus.CREATED - ? 'incomplete' - : 'complete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title', - { - defaultMessage: 'Deploy connector service', - } - ), - titleSize: 'xs', - }, - { - children: ( - - makeRequest({ - configuration, - connectorId: connector.id, // TODO - }) - } - subscriptionLink={docLinks.licenseManagement} - stackManagementLink={http.basePath.prepend( - '/app/management/stack/license_management' - )} - > - {!connector.status || connector.status === ConnectorStatus.CREATED ? ( - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText', - { - defaultMessage: - 'Your connector has not connected to Search. Troubleshoot your configuration and refresh the page.', - } - )} - - fetchConnector({ connectorId: connector.id })} - isLoading={fetchConnectorApiStatus === Status.LOADING} - > - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label', - { - defaultMessage: 'Recheck now', - } - )} - - - ) : ( - - )} - - ), - status: - connector.status === ConnectorStatus.CONNECTED ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title', - { - defaultMessage: 'Configure your connector client', - } - ), - titleSize: 'xs', - }, - { - children: ( - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description', - { - defaultMessage: - 'Finalize your connector by triggering a one-time sync, or setting a recurring sync to keep your data source in sync over time', - } - )} - - - - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label', - { - defaultMessage: 'Set schedule and sync', - } - )} - - - - - - - - - ), - status: connector.scheduling.full.enabled ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title', - { - defaultMessage: 'Sync your data', - } - ), - titleSize: 'xs', - }, - ]} - /> - - - - - - - - - -

- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.title', - { - defaultMessage: 'Support and documentation', - } - )} -

-
-
- - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.description', - { - defaultMessage: - 'You need to deploy this connector on your own infrastructure.', - } - )} - - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label', - { - defaultMessage: 'View documentation', - } - )} - - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label', - { - defaultMessage: 'Manage API keys', - } - )} - - - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label', - { - defaultMessage: 'Connector readme', - } - )} - - - {docsUrl && ( - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label', - { - defaultMessage: 'Deploy with Docker', - } - )} - - - )} - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label', - { - defaultMessage: 'Deploy without Docker', - } - )} - - -
-
-
- {isBeta ? ( - - - - ) : null} -
-
-
- - ); -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx deleted file mode 100644 index 39b39ee50b0b..000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/connector/native_connector_configuration/native_connector_configuration.tsx +++ /dev/null @@ -1,294 +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 { useValues } from 'kea'; - -import { - EuiCallOut, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiLink, - EuiPanel, - EuiSpacer, - EuiSteps, - EuiText, - EuiTitle, -} from '@elastic/eui'; - -import { i18n } from '@kbn/i18n'; - -import { BetaConnectorCallout } from '../../../../../shared/beta/beta_connector_callout'; -import { docLinks } from '../../../../../shared/doc_links'; -import { HttpLogic } from '../../../../../shared/http'; -import { CONNECTOR_ICONS } from '../../../../../shared/icons/connector_icons'; -import { KibanaLogic } from '../../../../../shared/kibana'; - -import { GenerateConnectorApiKeyApiLogic } from '../../../../api/connector/generate_connector_api_key_api_logic'; -import { hasConfiguredConfiguration } from '../../../../utils/has_configured_configuration'; -import { isConnectorIndex } from '../../../../utils/indices'; -import { IndexViewLogic } from '../../index_view_logic'; -import { ApiKeyConfig } from '../api_key_configuration'; -import { ConnectorNameAndDescription } from '../connector_name_and_description/connector_name_and_description'; -import { BETA_CONNECTORS, NATIVE_CONNECTORS } from '../constants'; - -import { ConvertConnector } from './convert_connector'; -import { NativeConnectorAdvancedConfiguration } from './native_connector_advanced_configuration'; -import { NativeConnectorConfigurationConfig } from './native_connector_configuration_config'; -import { ResearchConfiguration } from './research_configuration'; - -export const NativeConnectorConfiguration: React.FC = () => { - const { index } = useValues(IndexViewLogic); - const { config } = useValues(KibanaLogic); - const { errorConnectingMessage } = useValues(HttpLogic); - const { data: apiKeyData } = useValues(GenerateConnectorApiKeyApiLogic); - - if (!isConnectorIndex(index)) { - return <>; - } - - const nativeConnector = NATIVE_CONNECTORS.find( - (connector) => connector.serviceType === index.connector.service_type - ) || { - docsUrl: '', - externalAuthDocsUrl: '', - externalDocsUrl: '', - icon: CONNECTOR_ICONS.custom, - iconPath: 'custom.svg', - isBeta: true, - isNative: true, - keywords: [], - name: index.connector.name, - serviceType: index.connector.service_type ?? '', - }; - - const hasDescription = !!index.connector.description; - const hasConfigured = hasConfiguredConfiguration(index.connector.configuration); - const hasConfiguredAdvanced = - index.connector.last_synced || - index.connector.scheduling.full.enabled || - index.connector.scheduling.incremental.enabled; - const hasResearched = hasDescription || hasConfigured || hasConfiguredAdvanced; - const icon = nativeConnector.icon; - - const hasApiKey = !!(index.connector.api_key_id ?? apiKeyData); - - // TODO service_type === "" is considered unknown/custom connector multipleplaces replace all of them with a better solution - const isBeta = - !index.connector.service_type || - Boolean( - BETA_CONNECTORS.find(({ serviceType }) => serviceType === index.connector.service_type) - ); - - return ( - <> - - - - - - {icon && ( - - - - )} - - -

{nativeConnector?.name ?? index.connector.name}

-
-
-
- - {config.host && config.canDeployEntSearch && errorConnectingMessage && ( - <> - -

- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.entSearchWarning.text', - { - defaultMessage: - 'Native connectors require a running Enterprise Search instance to sync content from source.', - } - )} -

-
- - - - )} - , - status: hasResearched ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle', - { - defaultMessage: 'Research configuration requirements', - } - ), - titleSize: 'xs', - }, - { - children: ( - - ), - status: hasApiKey ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.manageApiKeyTitle', - { - defaultMessage: 'Manage API key', - } - ), - titleSize: 'xs', - }, - { - children: , - status: hasDescription ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle', - { - defaultMessage: 'Name and description', - } - ), - titleSize: 'xs', - }, - { - children: ( - - ), - status: hasConfigured ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle', - { - defaultMessage: 'Configuration', - } - ), - titleSize: 'xs', - }, - { - children: , - status: hasConfiguredAdvanced ? 'complete' : 'incomplete', - title: i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle', - { - defaultMessage: 'Sync your data', - } - ), - titleSize: 'xs', - }, - ]} - /> -
-
- - - - - - - - - - -

- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.schedulingReminder.title', - { - defaultMessage: 'Configurable sync schedule', - } - )} -

-
-
-
- - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.schedulingReminder.description', - { - defaultMessage: - 'Remember to set a sync schedule in the Scheduling tab to continually refresh your searchable data.', - } - )} - -
-
- - - - - - - - -

- {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title', - { - defaultMessage: 'Document level security', - } - )} -

-
-
-
- - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.description', - { - defaultMessage: - 'Restrict and personalize the read access users have to the index documents at query time.', - } - )} - - - {i18n.translate( - 'xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.securityLinkLabel', - { - defaultMessage: 'Document level security', - } - )} - - -
-
- - - - - - {isBeta ? ( - - - - - - ) : null} -
-
-
- - ); -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx index 51444b4967c9..eddf8ba934a4 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/search_index.tsx @@ -22,12 +22,12 @@ import { KibanaLogic } from '../../../shared/kibana'; import { SEARCH_INDEX_PATH, SEARCH_INDEX_TAB_PATH } from '../../routes'; import { isConnectorIndex, isCrawlerIndex } from '../../utils/indices'; +import { ConnectorConfiguration } from '../connector_detail/connector_configuration'; import { EnterpriseSearchContentPageTemplate } from '../layout/page_template'; import { baseBreadcrumbs } from '../search_indices'; import { getHeaderActions } from './components/header_actions/header_actions'; -import { ConnectorConfiguration } from './connector/connector_configuration'; import { ConnectorScheduling } from './connector/connector_scheduling'; import { ConnectorSyncRules } from './connector/sync_rules/connector_rules'; import { AutomaticCrawlScheduler } from './crawler/automatic_crawl_scheduler/automatic_crawl_scheduler'; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx index 38875821aecc..11574f611574 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_indices/delete_index_modal.tsx @@ -16,9 +16,12 @@ import { EuiForm, EuiFormRow, EuiSpacer, + EuiText, + EuiTextColor, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; import { ingestionMethodToText } from '../../utils/indices'; @@ -112,15 +115,19 @@ export const DeleteIndexModal: React.FC = () => { )} -

- {i18n.translate( - 'xpack.enterpriseSearch.content.searchIndices.deleteModal.syncsWarning.indexNameDescription', - { - defaultMessage: 'This action cannot be undone. Please type {indexName} to confirm.', - values: { indexName }, - } - )} -

+ + + {indexName} + + ), + }} + /> + { search- }} /> } @@ -220,9 +220,9 @@ export const SearchIndices: React.FC = () => { diff --git a/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx b/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx index afa9d37d4fa5..f77f2585d251 100644 --- a/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/vector_search/components/dev_tools_console_code_block/dev_tools_console_code_block.tsx @@ -8,7 +8,6 @@ import React from 'react'; import { useValues } from 'kea'; -import { compressToEncodedURIComponent } from 'lz-string'; import { EuiButtonEmpty, @@ -16,11 +15,13 @@ import { EuiCodeBlockProps, EuiCopy, EuiFlexGroup, + EuiFlexItem, EuiHorizontalRule, EuiPanel, EuiThemeProvider, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { TryInConsoleButton } from '@kbn/search-api-panels'; import { KibanaLogic } from '../../../shared/kibana'; @@ -32,49 +33,42 @@ export const DevToolsConsoleCodeBlock: React.FC = children, ...props }) => { - const { - application, - share: { url }, - } = useValues(KibanaLogic); + const { application, consolePlugin, share } = useValues(KibanaLogic); - const consolePreviewLink = - !!application?.capabilities?.dev_tools?.show && - url.locators - .get('CONSOLE_APP_LOCATOR') - ?.useUrl( - { loadFrom: `data:text/plain,${compressToEncodedURIComponent(children)}` }, - undefined, - [] - ); + const showConsoleLink = !!application?.capabilities?.dev_tools?.show; return ( - - {consolePreviewLink && ( - - + {showConsoleLink && ( + + - +
)} - - {(copy) => ( - - - - )} - + + + {(copy) => ( + + + + )} + + { const { client } = (await context.core).elasticsearch; const { connectorId, indexName } = request.params; - try { await client.asCurrentUser.transport.request({ body: { @@ -677,21 +677,23 @@ export function registerConnectorRoutes({ router, log }: RouteDependencies) { method: 'PUT', path: `/_connector/${connectorId}/_index_name`, }); - - const connector = await fetchConnectorById(client.asCurrentUser, connectorId); - if (connector?.is_native) { - // generateApiKey will search for the connector doc based on index_name, so we need to refresh the index before that. - await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX }); - await generateApiKey(client, indexName, true); - } - - return response.ok(); } catch (error) { - if (isIndexNotFoundException(error)) { - return response.ok(); - } - throw error; + // This will almost always be a conflict because another connector has the index configured + // ES returns this reason nicely so we can just pass it through + return response.customError({ + body: (error.meta.body as ElasticsearchErrorDetails)?.error?.reason, + statusCode: 500, + }); } + + const connector = await fetchConnectorById(client.asCurrentUser, connectorId); + if (connector?.is_native) { + // generateApiKey will search for the connector doc based on index_name, so we need to refresh the index before that. + await client.asCurrentUser.indices.refresh({ index: CONNECTORS_INDEX }); + await generateApiKey(client, indexName, true); + } + + return response.ok(); }) ); } diff --git a/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts b/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts index 2ab6b77be124..179608f9b0b7 100644 --- a/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts +++ b/x-pack/plugins/enterprise_search/server/utils/identify_exceptions.ts @@ -5,6 +5,9 @@ * 2.0. */ +import { ElasticsearchErrorDetails, isResponseError } from '@kbn/es-errors'; +import { i18n } from '@kbn/i18n'; + import { ErrorCode } from '../../common/types/error_codes'; export interface ElasticsearchResponseError { @@ -67,3 +70,28 @@ export const isExpensiveQueriesNotAllowedException = (error: ElasticsearchRespon error.meta?.body?.error?.caused_by?.reason?.includes('search.allow_expensive_queries') ); }; + +export function getErrorMessage(payload?: unknown): string { + if (!payload) { + throw new Error('expected error message to be provided'); + } + if (typeof payload === 'string') return payload; + // Elasticsearch response errors contain nested error messages + if (isResponseError(payload)) { + return `[${payload.message}]: ${ + (payload.meta.body as ElasticsearchErrorDetails)?.error?.reason + }`; + } + + if ((payload as { message: unknown }).message) { + return getErrorMessage((payload as { message: unknown }).message); + } + try { + return JSON.stringify(payload); + } catch (error) { + // If all else fails, we return a generic error + return i18n.translate('xpack.enterpriseSearch.server.errorIdentifyingException', { + defaultMessage: 'Internal server error: could not parse error message', + }); + } +} diff --git a/x-pack/plugins/enterprise_search/tsconfig.json b/x-pack/plugins/enterprise_search/tsconfig.json index 4f006ac5dc51..afe5f39650f3 100644 --- a/x-pack/plugins/enterprise_search/tsconfig.json +++ b/x-pack/plugins/enterprise_search/tsconfig.json @@ -67,6 +67,7 @@ "@kbn/react-kibana-context-theme", "@kbn/code-editor", "@kbn/console-plugin", - "@kbn/core-notifications-browser" + "@kbn/core-notifications-browser", + "@kbn/es-errors" ] } diff --git a/x-pack/plugins/fleet/.storybook/context/index.tsx b/x-pack/plugins/fleet/.storybook/context/index.tsx index fec359e89682..3200315ee1b9 100644 --- a/x-pack/plugins/fleet/.storybook/context/index.tsx +++ b/x-pack/plugins/fleet/.storybook/context/index.tsx @@ -101,7 +101,14 @@ export const StorybookContext: React.FC<{ storyContext?: Parameters all: true, setup: true, readEnrollmentTokens: true, + + // subfeatures + allAgents: true, + readAgents: true, + allSettings: true, + readSettings: true, readAgentPolicies: true, + allAgentPolicies: true, }, integrations: { readPackageInfo: true, diff --git a/x-pack/plugins/fleet/common/authz.ts b/x-pack/plugins/fleet/common/authz.ts index e47234730e84..83e4e3dfe783 100644 --- a/x-pack/plugins/fleet/common/authz.ts +++ b/x-pack/plugins/fleet/common/authz.ts @@ -23,6 +23,11 @@ export interface FleetAuthz { setup: boolean; readEnrollmentTokens: boolean; readAgentPolicies: boolean; + allAgentPolicies: boolean; + readAgents: boolean; + allAgents: boolean; + readSettings: boolean; + allSettings: boolean; }; integrations: { @@ -58,18 +63,24 @@ export interface FleetAuthz { }; } +interface ReadAllParams { + all: boolean; + read: boolean; +} + interface CalculateParams { fleet: { all: boolean; setup: boolean; + read?: boolean; + agents?: ReadAllParams; + agentPolicies?: ReadAllParams; + settings?: ReadAllParams; }; - integrations: { - all: boolean; - read: boolean; - }; + integrations: ReadAllParams; - isSuperuser: boolean; + subfeatureEnabled: boolean; } type PrivilegeMap = Record; @@ -77,32 +88,62 @@ type PrivilegeMap = Record; export const calculateAuthz = ({ fleet, integrations, - isSuperuser, -}: CalculateParams): FleetAuthz => ({ - fleet: { - all: fleet.all && (integrations.all || integrations.read), - - // These are currently used by Fleet Server setup - setup: fleet.all || fleet.setup, - readEnrollmentTokens: fleet.all || fleet.setup, - readAgentPolicies: fleet.all || fleet.setup, - }, + subfeatureEnabled, +}: CalculateParams): FleetAuthz => { + // TODO remove fallback when the feature flag is removed + const fleetAuthz: FleetAuthz['fleet'] = subfeatureEnabled + ? { + all: fleet.all && (integrations.all || integrations.read), + + readAgents: (fleet.agents?.read || fleet.agents?.all) ?? false, + allAgents: (fleet.all || fleet.agents?.all) ?? false, + readSettings: (fleet.settings?.read || fleet.settings?.all) ?? false, + allSettings: fleet.settings?.all ?? false, + allAgentPolicies: fleet.agentPolicies?.all ?? false, + + // These are currently used by Fleet Server setup + setup: fleet.all || fleet.setup, + readEnrollmentTokens: (fleet.all || fleet.setup || fleet.agents?.all) ?? false, + readAgentPolicies: + (fleet.all || fleet.read || fleet.setup || fleet.agentPolicies?.read) ?? false, + } + : { + all: fleet.all && (integrations.all || integrations.read), + + readAgents: fleet.all && (integrations.all || integrations.read), + allAgents: fleet.all && (integrations.all || integrations.read), + readSettings: fleet.all && (integrations.all || integrations.read), + allSettings: fleet.all && (integrations.all || integrations.read), + allAgentPolicies: fleet.all && (integrations.all || integrations.read), + + // These are currently used by Fleet Server setup + setup: fleet.all || fleet.setup, + readEnrollmentTokens: (fleet.all || fleet.setup || fleet.agents?.all) ?? false, + readAgentPolicies: + (fleet.all || fleet.read || fleet.setup || fleet.agentPolicies?.read) ?? false, + }; - integrations: { - readPackageInfo: fleet.all || fleet.setup || integrations.all || integrations.read, - readInstalledPackages: integrations.all || integrations.read, - installPackages: fleet.all && integrations.all, - upgradePackages: fleet.all && integrations.all, - removePackages: fleet.all && integrations.all, - uploadPackages: fleet.all && integrations.all, - - readPackageSettings: fleet.all && integrations.all, - writePackageSettings: fleet.all && integrations.all, - - readIntegrationPolicies: fleet.all && (integrations.all || integrations.read), - writeIntegrationPolicies: fleet.all && integrations.all, - }, -}); + return { + fleet: fleetAuthz, + integrations: { + readPackageInfo: fleet.all || fleet.setup || integrations.all || integrations.read, + readInstalledPackages: integrations.all || integrations.read, + installPackages: fleet.all && integrations.all, + upgradePackages: fleet.all && integrations.all, + removePackages: fleet.all && integrations.all, + uploadPackages: fleet.all && integrations.all, + + readPackageSettings: fleet.all && integrations.all, + writePackageSettings: fleet.all && integrations.all, + + readIntegrationPolicies: + ((fleet.all || fleet.read || fleet.agentPolicies?.read) ?? false) && + (integrations.all || integrations.read), + writeIntegrationPolicies: + ((fleet.all || fleet.agentPolicies?.all) ?? false) && integrations.all, + }, + }; +}; export function calculatePackagePrivilegesFromCapabilities( capabilities: Capabilities | undefined diff --git a/x-pack/plugins/fleet/common/errors.ts b/x-pack/plugins/fleet/common/errors.ts index 3b364502dbe0..c43e4a628486 100644 --- a/x-pack/plugins/fleet/common/errors.ts +++ b/x-pack/plugins/fleet/common/errors.ts @@ -23,3 +23,5 @@ export class MessageSigningError extends FleetError {} export class FleetActionsError extends FleetError {} export class FleetActionsClientError extends FleetError {} export class UninstallTokenError extends FleetError {} + +export class AgentRequestInvalidError extends FleetError {} diff --git a/x-pack/plugins/fleet/common/experimental_features.ts b/x-pack/plugins/fleet/common/experimental_features.ts index 12fd08963692..8271f0403bed 100644 --- a/x-pack/plugins/fleet/common/experimental_features.ts +++ b/x-pack/plugins/fleet/common/experimental_features.ts @@ -27,6 +27,7 @@ export const allowedExperimentalValues = Object.freeze>( remoteESOutput: true, agentless: false, enableStrictKQLValidation: false, + subfeaturePrivileges: false, }); type ExperimentalConfigKeys = Array; diff --git a/x-pack/plugins/fleet/common/mocks.ts b/x-pack/plugins/fleet/common/mocks.ts index 8e2545adf5ed..82f3ccd66116 100644 --- a/x-pack/plugins/fleet/common/mocks.ts +++ b/x-pack/plugins/fleet/common/mocks.ts @@ -80,8 +80,13 @@ export const createFleetAuthzMock = (): FleetAuthz => { fleet: { all: true, setup: true, + readAgents: true, readEnrollmentTokens: true, readAgentPolicies: true, + allAgentPolicies: true, + allAgents: true, + allSettings: true, + readSettings: true, }, integrations: { readPackageInfo: true, diff --git a/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts new file mode 100644 index 000000000000..03d00bb96995 --- /dev/null +++ b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { checkFleetServerVersion } from './check_fleet_server_versions'; + +describe('checkFleetServerVersion', () => { + it('should not throw if no force is specified and patch is newer', () => { + const fleetServers = [ + { local_metadata: { elastic: { agent: { version: '8.3.0' } } } }, + { local_metadata: { elastic: { agent: { version: '8.4.0' } } } }, + ] as any; + expect(() => checkFleetServerVersion('8.4.1', fleetServers, false)).not.toThrowError(); + expect(() => checkFleetServerVersion('8.4.1-SNAPSHOT', fleetServers, false)).not.toThrowError(); + }); + + it('should throw if no force is specified and minor is newer', () => { + const fleetServers = [ + { local_metadata: { elastic: { agent: { version: '8.3.0' } } } }, + { local_metadata: { elastic: { agent: { version: '8.4.0' } } } }, + ] as any; + expect(() => checkFleetServerVersion('8.5.1', fleetServers, false)).toThrowError( + 'Cannot upgrade to version 8.5.1 because it is higher than the latest fleet server version 8.4.0.' + ); + }); + + it('should throw if force is specified and patch should not be considered', () => { + const fleetServers = [ + { local_metadata: { elastic: { agent: { version: '8.3.0' } } } }, + { local_metadata: { elastic: { agent: { version: '8.4.0' } } } }, + ] as any; + expect(() => checkFleetServerVersion('8.5.1', fleetServers, true)).toThrowError( + 'Cannot force upgrade to version 8.5.1 because it does not satisfy the major and minor of the latest fleet server version 8.4.0.' + ); + }); +}); diff --git a/x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.ts new file mode 100644 index 000000000000..f7e275167173 --- /dev/null +++ b/x-pack/plugins/fleet/common/services/check_fleet_server_versions.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 semverGt from 'semver/functions/gt'; +import semverMajor from 'semver/functions/major'; +import semverMinor from 'semver/functions/minor'; + +import type { Agent } from '../types'; + +import { AgentRequestInvalidError } from '../errors'; + +import { differsOnlyInPatch } from '.'; +import { getMaxVersion } from './get_min_max_version'; + +// Check the installed fleet server version +export const checkFleetServerVersion = ( + versionToUpgradeNumber: string, + fleetServerAgents: Agent[], + force = false +) => { + const message = getFleetServerVersionMessage(versionToUpgradeNumber, fleetServerAgents, force); + if (force && message) throw new AgentRequestInvalidError(message); + if (message) throw new Error(message); +}; + +export const getFleetServerVersionMessage = ( + versionToUpgradeNumber: string | undefined, + fleetServerAgents: Agent[], + force = false +) => { + const fleetServerVersions = fleetServerAgents.map( + (agent) => agent.local_metadata.elastic.agent.version + ) as string[]; + + const maxFleetServerVersion = getMaxVersion(fleetServerVersions); + + if (!maxFleetServerVersion || !versionToUpgradeNumber) { + return; + } + + if ( + !force && + semverGt(versionToUpgradeNumber, maxFleetServerVersion) && + !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion) + ) { + return `Cannot upgrade to version ${versionToUpgradeNumber} because it is higher than the latest fleet server version ${maxFleetServerVersion}.`; + } + + const fleetServerMajorGt = + semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber); + const fleetServerMajorEqMinorGte = + semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) && + semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber); + + // When force is enabled, only the major and minor versions are checked + if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) { + return `Cannot force upgrade to version ${versionToUpgradeNumber} because it does not satisfy the major and minor of the latest fleet server version ${maxFleetServerVersion}.`; + } +}; + +export const isAgentVersionLessThanFleetServer = ( + versionToUpgradeNumber: string | undefined, + fleetServerAgents: Agent[], + force = false +) => { + const fleetServerVersions = fleetServerAgents.map( + (agent) => agent.local_metadata.elastic.agent.version + ) as string[]; + + const maxFleetServerVersion = getMaxVersion(fleetServerVersions); + + if (!maxFleetServerVersion || !versionToUpgradeNumber) { + return false; + } + if ( + !force && + semverGt(versionToUpgradeNumber, maxFleetServerVersion) && + !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion) + ) + return false; + + const fleetServerMajorGt = + semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber); + const fleetServerMajorEqMinorGte = + semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) && + semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber); + + // When force is enabled, only the major and minor versions are checked + if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) { + return false; + } + + return true; +}; diff --git a/x-pack/plugins/fleet/common/services/index.ts b/x-pack/plugins/fleet/common/services/index.ts index badaff8cb29d..3d1fc77f2a37 100644 --- a/x-pack/plugins/fleet/common/services/index.ts +++ b/x-pack/plugins/fleet/common/services/index.ts @@ -80,3 +80,8 @@ export { isAgentPolicyValidForLicense, unsetAgentPolicyAccordingToLicenseLevel, } from './agent_policy_config'; + +export { + getFleetServerVersionMessage, + isAgentVersionLessThanFleetServer, +} from './check_fleet_server_versions'; diff --git a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts index edb3f7f0eefc..07553dbc21ac 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/agent.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/agent.ts @@ -114,6 +114,7 @@ export interface PostBulkAgentUpgradeRequest { rollout_duration_seconds?: number; start_time?: string; force?: boolean; + includeInactive?: boolean; }; } @@ -147,6 +148,7 @@ export interface PostBulkAgentReassignRequest { policy_id: string; agents: string[] | string; batchSize?: number; + includeInactive?: boolean; }; } @@ -185,6 +187,7 @@ export interface PostBulkUpdateAgentTagsRequest { agents: string[] | string; tagsToAdd?: string[]; tagsToRemove?: string[]; + includeInactive?: boolean; }; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx index 5834c776a6dc..f9ec74f7ce12 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.test.tsx @@ -12,29 +12,29 @@ import { fireEvent, act } from '@testing-library/react'; import type { Agent } from '../../../../types'; import { createFleetTestRendererMock } from '../../../../../../mock'; +import type { LicenseService } from '../../../../services'; import { ExperimentalFeaturesService } from '../../../../services'; import { AgentReassignAgentPolicyModal } from '../../components/agent_reassign_policy_modal'; +import { useLicense } from '../../../../../../hooks/use_license'; + import { AgentBulkActions } from './bulk_actions'; jest.mock('../../../../../../services/experimental_features'); const mockedExperimentalFeaturesService = jest.mocked(ExperimentalFeaturesService); -jest.mock('../../../../hooks', () => ({ - ...jest.requireActual('../../../../hooks'), -})); +jest.mock('../../../../../../hooks/use_license'); +const mockedUseLicence = useLicense as jest.MockedFunction; jest.mock('../../components/agent_reassign_policy_modal'); const defaultProps = { - shownAgents: 10, - inactiveShownAgents: 0, + nAgentsInTable: 10, totalManagedAgentIds: [], - inactiveManagedAgentIds: [], selectionMode: 'manual', currentQuery: '', selectedAgents: [], - visibleAgents: [], + agentsOnCurrentPage: [], refreshAgents: () => undefined, allTags: [], agentPolicies: [], @@ -43,50 +43,28 @@ const defaultProps = { describe('AgentBulkActions', () => { beforeAll(() => { mockedExperimentalFeaturesService.get.mockReturnValue({ - diagnosticFileUploadEnabled: false, + diagnosticFileUploadEnabled: true, } as any); }); beforeEach(() => { + mockedUseLicence.mockReturnValue({ + hasAtLeast: () => false, + } as unknown as LicenseService); jest.mocked(AgentReassignAgentPolicyModal).mockReset(); jest.mocked(AgentReassignAgentPolicyModal).mockReturnValue(null); }); function render(props: any) { const renderer = createFleetTestRendererMock(); - return renderer.render(); } - describe('When in manual mode', () => { - it('should show only disabled actions if no agents are active', async () => { - const results = render({ - ...defaultProps, - inactiveShownAgents: 10, - selectedAgents: [{ id: 'agent1' }, { id: 'agent2' }] as Agent[], - }); - - const bulkActionsButton = results.getByTestId('agentBulkActionsButton'); - await act(async () => { - fireEvent.click(bulkActionsButton); - }); - - expect(results.getByText('Add / remove tags').closest('button')!).toBeDisabled(); - expect(results.getByText('Assign to new policy').closest('button')!).toBeDisabled(); - expect(results.getByText('Unenroll 2 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled(); - expect(results.queryByText('Request diagnostics for 2 agents')).toBeNull(); - expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeDisabled(); - }); - - it('should show available actions for 2 selected agents if they are active', async () => { + describe('When in manual selection mode', () => { + it('should show the available actions for the selected agents', async () => { const results = render({ ...defaultProps, - selectedAgents: [ - { id: 'agent1', tags: ['oldTag'], active: true }, - { id: 'agent2', active: true }, - ] as Agent[], + selectedAgents: [{ id: 'agent1', tags: ['oldTag'] }, { id: 'agent2' }] as Agent[], }); const bulkActionsButton = results.getByTestId('agentBulkActionsButton'); @@ -100,19 +78,19 @@ describe('AgentBulkActions', () => { expect(results.getByText('Upgrade 2 agents').closest('button')!).toBeEnabled(); expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeDisabled(); expect(results.getByText('Restart upgrade 2 agents').closest('button')!).toBeEnabled(); + expect( + results.getByText('Request diagnostics for 2 agents').closest('button')! + ).toBeEnabled(); }); - it('should add actions if mockedExperimentalFeaturesService is enabled', async () => { - mockedExperimentalFeaturesService.get.mockReturnValue({ - diagnosticFileUploadEnabled: true, - } as any); + it('should allow scheduled upgrades if the license allows it', async () => { + mockedUseLicence.mockReturnValue({ + hasAtLeast: () => true, + } as unknown as LicenseService); const results = render({ ...defaultProps, - selectedAgents: [ - { id: 'agent1', tags: ['oldTag'], active: true }, - { id: 'agent2', active: true }, - ] as Agent[], + selectedAgents: [{ id: 'agent1', tags: ['oldTag'] }, { id: 'agent2' }] as Agent[], }); const bulkActionsButton = results.getByTestId('agentBulkActionsButton'); @@ -120,18 +98,12 @@ describe('AgentBulkActions', () => { fireEvent.click(bulkActionsButton); }); - expect( - results.getByText('Request diagnostics for 2 agents').closest('button')! - ).toBeEnabled(); + expect(results.getByText('Schedule upgrade for 2 agents').closest('button')!).toBeEnabled(); }); }); - describe('When in query mode', () => { - mockedExperimentalFeaturesService.get.mockReturnValue({ - diagnosticFileUploadEnabled: true, - } as any); - - it('should show correct actions for active agents when no managed policies exist', async () => { + describe('When in query selection mode', () => { + it('should show the available actions for all agents when no managed agents are listed', async () => { const results = render({ ...defaultProps, selectionMode: 'query', @@ -153,7 +125,7 @@ describe('AgentBulkActions', () => { expect(results.getByText('Restart upgrade 10 agents').closest('button')!).toBeEnabled(); }); - it('should show correct actions for the active agents and exclude the managed agents from the count', async () => { + it('should show the available actions for all agents except managed agents', async () => { const results = render({ ...defaultProps, totalManagedAgentIds: ['agentId1', 'agentId2'], @@ -176,49 +148,7 @@ describe('AgentBulkActions', () => { expect(results.getByText('Restart upgrade 8 agents').closest('button')!).toBeEnabled(); }); - it('should show correct actions also when there are inactive managed agents', async () => { - const results = render({ - ...defaultProps, - inactiveManagedAgentIds: ['agentId1', 'agentId2'], - totalManagedAgentIds: ['agentId1', 'agentId2', 'agentId3'], - selectionMode: 'query', - }); - - const bulkActionsButton = results.getByTestId('agentBulkActionsButton'); - await act(async () => { - fireEvent.click(bulkActionsButton); - }); - - expect(results.getByText('Add / remove tags').closest('button')!).toBeEnabled(); - expect(results.getByText('Assign to new policy').closest('button')!).toBeEnabled(); - expect(results.getByText('Unenroll 9 agents').closest('button')!).toBeEnabled(); - expect(results.getByText('Upgrade 9 agents').closest('button')!).toBeEnabled(); - expect(results.getByText('Schedule upgrade for 9 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Restart upgrade 9 agents').closest('button')!).toBeEnabled(); - }); - - it('should show disabled actions when only inactive agents are selected', async () => { - const results = render({ - ...defaultProps, - inactiveShownAgents: 10, - selectedAgents: [{ id: 'agent1' }, { id: 'agent2' }] as Agent[], - selectionMode: 'query', - }); - - const bulkActionsButton = results.getByTestId('agentBulkActionsButton'); - await act(async () => { - fireEvent.click(bulkActionsButton); - }); - - expect(results.getByText('Add / remove tags').closest('button')!).toBeDisabled(); - expect(results.getByText('Assign to new policy').closest('button')!).toBeDisabled(); - expect(results.getByText('Unenroll 0 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Upgrade 0 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Schedule upgrade for 0 agents').closest('button')!).toBeDisabled(); - expect(results.getByText('Restart upgrade 0 agents').closest('button')!).toBeDisabled(); - }); - - it('should generate a correct kuery to select agents', async () => { + it('should generate a correct kuery to select agents when no managed agents are listed', async () => { const results = render({ ...defaultProps, selectionMode: 'query', @@ -243,7 +173,7 @@ describe('AgentBulkActions', () => { ); }); - it('should generate a correct kuery to select agents with managed agents too', async () => { + it('should generate a correct kuery that excludes managed agents', async () => { const results = render({ ...defaultProps, totalManagedAgentIds: ['agentId1', 'agentId2'], @@ -263,7 +193,7 @@ describe('AgentBulkActions', () => { expect(jest.mocked(AgentReassignAgentPolicyModal)).toHaveBeenCalledWith( expect.objectContaining({ - agents: '(Base query) AND NOT (fleet-agents.agent.id : ("agentId1" or "agentId2"))', + agents: '((Base query)) AND NOT (fleet-agents.agent.id : ("agentId1" or "agentId2"))', }), expect.anything() ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx index 3871473d40ba..cde9c8960e47 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/bulk_actions.tsx @@ -35,28 +35,24 @@ import type { SelectionMode } from './types'; import { TagsAddRemove } from './tags_add_remove'; export interface Props { - shownAgents: number; - inactiveShownAgents: number; + nAgentsInTable: number; totalManagedAgentIds: string[]; - inactiveManagedAgentIds: string[]; selectionMode: SelectionMode; currentQuery: string; selectedAgents: Agent[]; - visibleAgents: Agent[]; + agentsOnCurrentPage: Agent[]; refreshAgents: (args?: { refreshTags?: boolean }) => void; allTags: string[]; agentPolicies: AgentPolicy[]; } export const AgentBulkActions: React.FunctionComponent = ({ - shownAgents, - inactiveShownAgents, + nAgentsInTable, totalManagedAgentIds, - inactiveManagedAgentIds, selectionMode, currentQuery, selectedAgents, - visibleAgents, + agentsOnCurrentPage, refreshAgents, allTags, agentPolicies, @@ -87,26 +83,17 @@ export const AgentBulkActions: React.FunctionComponent = ({ const excludedKuery = `${AGENTS_PREFIX}.agent.id : (${totalManagedAgentIds .map((id) => `"${id}"`) .join(' or ')})`; - return `${currentQuery} AND NOT (${excludedKuery})`; + return `(${currentQuery}) AND NOT (${excludedKuery})`; } else { return currentQuery; } }, [currentQuery, totalManagedAgentIds]); - const totalActiveAgents = shownAgents - inactiveShownAgents; - - // exclude inactive agents from the count + const agents = selectionMode === 'manual' ? selectedAgents : selectionQuery; const agentCount = selectionMode === 'manual' ? selectedAgents.length - : totalActiveAgents - (totalManagedAgentIds?.length - inactiveManagedAgentIds?.length); - - // Check if user is working with only inactive agents - const atLeastOneActiveAgentSelected = - selectionMode === 'manual' - ? !!selectedAgents.find((agent) => agent.active) - : shownAgents > inactiveShownAgents; - const agents = selectionMode === 'manual' ? selectedAgents : selectionQuery; + : nAgentsInTable - totalManagedAgentIds?.length; const [tagsPopoverButton, setTagsPopoverButton] = useState(); const { diagnosticFileUploadEnabled } = ExperimentalFeaturesService.get(); @@ -121,7 +108,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: (event: any) => { setTagsPopoverButton((event.target as Element).closest('button')!); setIsTagAddVisible(!isTagAddVisible); @@ -136,7 +122,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); setIsReassignFlyoutOpen(true); @@ -154,7 +139,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); setIsUnenrollModalOpen(true); @@ -172,7 +156,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: false }); @@ -190,7 +173,7 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected || !isLicenceAllowingScheduleUpgrade, + disabled: !isLicenceAllowingScheduleUpgrade, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: true, isUpdating: false }); @@ -210,7 +193,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); setUpgradeModalState({ isOpen: true, isScheduled: false, isUpdating: true }); @@ -230,7 +212,6 @@ export const AgentBulkActions: React.FunctionComponent = ({ /> ), icon: , - disabled: !atLeastOneActiveAgentSelected, onClick: () => { closeMenu(); setIsRequestDiagnosticsModalOpen(true); @@ -246,8 +227,8 @@ export const AgentBulkActions: React.FunctionComponent = ({ ]; const getSelectedTagsFromAgents = useMemo( - () => getCommonTags(agents, visibleAgents ?? [], agentPolicies), - [agents, visibleAgents, agentPolicies] + () => getCommonTags(agents, agentsOnCurrentPage ?? [], agentPolicies), + [agents, agentsOnCurrentPage, agentPolicies] ); return ( diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx index 07ba1a340240..e7229199995e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.test.tsx @@ -45,15 +45,14 @@ describe('SearchAndFilterBar', () => { it('should show no Actions button when no agent is selected', async () => { const selectedAgents: Agent[] = []; const props: any = { - shownAgents: 10, - inactiveShownAgents: 0, + nAgentsInTable: 10, totalInactiveAgents: 2, totalManagedAgentIds: [], selectionMode: 'manual', currentQuery: '', selectedAgents, refreshAgents: () => undefined, - visibleAgents: [], + agentsOnCurrentPage: [], tags: [], agentPolicies: [], selectedStatus: [], @@ -79,15 +78,14 @@ describe('SearchAndFilterBar', () => { }, ]; const props: any = { - shownAgents: 10, - inactiveShownAgents: 0, + nAgentsInTable: 10, totalInactiveAgents: 2, totalManagedAgentIds: [], selectionMode: 'manual', currentQuery: '', selectedAgents, refreshAgents: () => undefined, - visibleAgents: [], + agentsOnCurrentPage: [], tags: [], agentPolicies: [], selectedStatus: [], @@ -101,15 +99,14 @@ describe('SearchAndFilterBar', () => { it('should show an Actions button when agents selected in query mode', async () => { const props: any = { - shownAgents: 10, - inactiveShownAgents: 0, + nAgentsInTable: 10, totalInactiveAgents: 2, totalManagedAgentIds: [], selectionMode: 'query', currentQuery: '', selectedAgents: [], refreshAgents: () => undefined, - visibleAgents: [], + agentsOnCurrentPage: [], tags: [], agentPolicies: [], selectedStatus: [], diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx index 3dab659e6423..1fd8d0930e9f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/search_and_filter_bar.tsx @@ -46,18 +46,16 @@ export interface SearchAndFilterBarProps { tags: string[]; selectedTags: string[]; onSelectedTagsChange: (selectedTags: string[]) => void; - shownAgents: number; - inactiveShownAgents: number; + nAgentsInTable: number; totalInactiveAgents: number; totalManagedAgentIds: string[]; - inactiveManagedAgentIds: string[]; selectionMode: SelectionMode; currentQuery: string; selectedAgents: Agent[]; refreshAgents: (args?: { refreshTags?: boolean }) => void; onClickAddAgent: () => void; onClickAddFleetServer: () => void; - visibleAgents: Agent[]; + agentsOnCurrentPage: Agent[]; onClickAgentActivity: () => void; showAgentActivityTour: { isOpen: boolean }; } @@ -76,18 +74,16 @@ export const SearchAndFilterBar: React.FunctionComponent { @@ -198,17 +194,15 @@ export const SearchAndFilterBar: React.FunctionComponent {(selectionMode === 'manual' && selectedAgents.length) || - (selectionMode === 'query' && shownAgents > 0) ? ( + (selectionMode === 'query' && nAgentsInTable > 0) ? ( (); const [allTags, setAllTags] = useState(); const [isLoading, setIsLoading] = useState(false); - const [shownAgents, setShownAgents] = useState(0); - const [inactiveShownAgents, setInactiveShownAgents] = useState(0); + const [nAgentsInTable, setNAgentsInTable] = useState(0); const [totalInactiveAgents, setTotalInactiveAgents] = useState(0); const [totalManagedAgentIds, setTotalManagedAgentIds] = useState([]); - const [inactiveManagedAgentIds, setinactiveManagedAgentIds] = useState([]); const [managedAgentsOnCurrentPage, setManagedAgentsOnCurrentPage] = useState(0); const getSortFieldForAPI = (field: keyof Agent): string => { @@ -201,11 +199,8 @@ export function useFetchAgentsData() { } setAgentsOnCurrentPage(agentsResponse.data.items); - setShownAgents(agentsResponse.data.total); + setNAgentsInTable(agentsResponse.data.total); setTotalInactiveAgents(totalInactiveAgentsResponse.data.results.inactive || 0); - setInactiveShownAgents( - showInactive ? totalInactiveAgentsResponse.data.results.inactive || 0 : 0 - ); const managedAgentPolicies = managedAgentPoliciesResponse.data?.items ?? []; @@ -227,11 +222,7 @@ export function useFetchAgentsData() { } const allManagedAgents = response.data?.items ?? []; const allManagedAgentIds = allManagedAgents?.map((agent) => agent.id); - const inactiveManagedIds = allManagedAgents - ?.filter((agent) => agent.status === 'inactive') - .map((agent) => agent.id); setTotalManagedAgentIds(allManagedAgentIds); - setinactiveManagedAgentIds(inactiveManagedIds); setManagedAgentsOnCurrentPage( agentsResponse.data.items @@ -298,11 +289,9 @@ export function useFetchAgentsData() { agentsOnCurrentPage, agentsStatus, isLoading, - shownAgents, - inactiveShownAgents, + nAgentsInTable, totalInactiveAgents, totalManagedAgentIds, - inactiveManagedAgentIds, managedAgentsOnCurrentPage, showUpgradeable, setShowUpgradeable, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx index 96e619db12f0..5b3c3334be0f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_update_tags.tsx @@ -79,7 +79,13 @@ export const useUpdateTags = () => { errorMessage?: string ) => { await wrapRequest( - async () => await sendPostBulkAgentTagsUpdate({ agents, tagsToAdd, tagsToRemove }), + async () => + await sendPostBulkAgentTagsUpdate({ + agents, + tagsToAdd, + tagsToRemove, + includeInactive: true, + }), onSuccess, successMessage, errorMessage diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx index afa26547fecc..6af126747bd9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/index.tsx @@ -49,16 +49,39 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { const [selectedAgents, setSelectedAgents] = useState([]); const [selectionMode, setSelectionMode] = useState('manual'); + // Agent enrollment flyout state + const [enrollmentFlyout, setEnrollmentFlyoutState] = useState<{ + isOpen: boolean; + selectedPolicyId?: string; + }>({ + isOpen: false, + }); + const [isAgentActivityFlyoutOpen, setAgentActivityFlyoutOpen] = useState(false); + const flyoutContext = useFlyoutContext(); + + // Agent actions states + const [agentToReassign, setAgentToReassign] = useState(undefined); + const [agentToUnenroll, setAgentToUnenroll] = useState(undefined); + const [agentToGetUninstallCommand, setAgentToGetUninstallCommand] = useState( + undefined + ); + const [agentToUpgrade, setAgentToUpgrade] = useState(undefined); + const [agentToAddRemoveTags, setAgentToAddRemoveTags] = useState(undefined); + const [tagsPopoverButton, setTagsPopoverButton] = useState(); + const [showTagsAddRemove, setShowTagsAddRemove] = useState(false); + const [agentToRequestDiagnostics, setAgentToRequestDiagnostics] = useState( + undefined + ); + const [showAgentActivityTour, setShowAgentActivityTour] = useState({ isOpen: false }); + const { allTags, agentsOnCurrentPage, agentsStatus, isLoading, - shownAgents, - inactiveShownAgents, + nAgentsInTable, totalInactiveAgents, totalManagedAgentIds, - inactiveManagedAgentIds, managedAgentsOnCurrentPage, showUpgradeable, setShowUpgradeable, @@ -122,31 +145,6 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { setShowUpgradeable, ]); - // Agent enrollment flyout state - const [enrollmentFlyout, setEnrollmentFlyoutState] = useState<{ - isOpen: boolean; - selectedPolicyId?: string; - }>({ - isOpen: false, - }); - const [isAgentActivityFlyoutOpen, setAgentActivityFlyoutOpen] = useState(false); - const flyoutContext = useFlyoutContext(); - - // Agent actions states - const [agentToReassign, setAgentToReassign] = useState(undefined); - const [agentToUnenroll, setAgentToUnenroll] = useState(undefined); - const [agentToGetUninstallCommand, setAgentToGetUninstallCommand] = useState( - undefined - ); - const [agentToUpgrade, setAgentToUpgrade] = useState(undefined); - const [agentToAddRemoveTags, setAgentToAddRemoveTags] = useState(undefined); - const [tagsPopoverButton, setTagsPopoverButton] = useState(); - const [showTagsAddRemove, setShowTagsAddRemove] = useState(false); - const [agentToRequestDiagnostics, setAgentToRequestDiagnostics] = useState( - undefined - ); - const [showAgentActivityTour, setShowAgentActivityTour] = useState({ isOpen: false }); - const onTableChange = ({ page, sort, @@ -213,7 +211,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { differenceBy(selectedAgents, agentsOnCurrentPage, 'id').length === 0; if (!areSelectedAgentsStillVisible) { // force selecting all agents on current page if staying in query mode - return setSelectedAgents(agentsOnCurrentPage); + return setSelectedAgents(agentsOnCurrentPage.filter((agent) => isAgentSelectable(agent))); } else { setSelectionMode('manual'); } @@ -221,6 +219,20 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { setSelectedAgents(newAgents); }; + const onSelectedStatusChange = (status: string[]) => { + if (selectionMode === 'query') { + setSelectionMode('manual'); + } + setSelectedStatus(status); + }; + + const onSelectedAgentPoliciesChange = (policies: string[]) => { + if (selectionMode === 'query') { + setSelectionMode('manual'); + } + setSelectedAgentPolicies(policies); + }; + const agentToUnenrollHasFleetServer = useMemo(() => { if (!agentToUnenroll || !agentToUnenroll.policy_id) { return false; @@ -390,26 +402,24 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { onDraftKueryChange={setDraftKuery} onSubmitSearch={onSubmitSearch} selectedAgentPolicies={selectedAgentPolicies} - onSelectedAgentPoliciesChange={setSelectedAgentPolicies} + onSelectedAgentPoliciesChange={onSelectedAgentPoliciesChange} selectedStatus={selectedStatus} - onSelectedStatusChange={setSelectedStatus} + onSelectedStatusChange={onSelectedStatusChange} showUpgradeable={showUpgradeable} onShowUpgradeableChange={setShowUpgradeable} tags={allTags ?? []} selectedTags={selectedTags} onSelectedTagsChange={setSelectedTags} - shownAgents={shownAgents} - inactiveShownAgents={inactiveShownAgents} + nAgentsInTable={nAgentsInTable} totalInactiveAgents={totalInactiveAgents} totalManagedAgentIds={totalManagedAgentIds} - inactiveManagedAgentIds={inactiveManagedAgentIds} selectionMode={selectionMode} currentQuery={kuery} selectedAgents={selectedAgents} refreshAgents={refreshAgents} onClickAddAgent={() => setEnrollmentFlyoutState({ isOpen: true })} onClickAddFleetServer={onClickAddFleetServer} - visibleAgents={agentsOnCurrentPage} + agentsOnCurrentPage={agentsOnCurrentPage} onClickAgentActivity={onClickAgentActivity} showAgentActivityTour={showAgentActivityTour} /> @@ -417,7 +427,7 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { {/* Agent total, bulk actions and status bar */} = () => { showUpgradeable={showUpgradeable} onTableChange={onTableChange} pagination={pagination} - totalAgents={Math.min(shownAgents, SO_SEARCH_LIMIT)} + totalAgents={Math.min(nAgentsInTable, SO_SEARCH_LIMIT)} isUsingFilter={isUsingFilter} setEnrollmentFlyoutState={setEnrollmentFlyoutState} clearFilters={clearFilters} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts index 9e2911ead130..82c5c2fd2cf1 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.test.ts @@ -10,7 +10,7 @@ import type { Agent, AgentPolicy } from '../../../../types'; import { getCommonTags } from './get_common_tags'; describe('getCommonTags', () => { - it('should return common tags from visibleAgents if agents is empty string', () => { + it('should return common tags from agentsOnCurrentPage if agents is empty string', () => { const result = getCommonTags( '', [{ tags: ['tag1'] }, { tags: ['tag1', 'tag2'] }] as Agent[], @@ -20,7 +20,7 @@ describe('getCommonTags', () => { expect(result).toEqual(['tag1']); }); - it('should return common tags from visibleAgents if agents is query', () => { + it('should return common tags from agentsOnCurrentPage if agents is query', () => { const result = getCommonTags( 'query', [{ tags: ['tag1'] }, { tags: ['tag1', 'tag2'] }] as Agent[], @@ -30,7 +30,7 @@ describe('getCommonTags', () => { expect(result).toEqual(['tag1']); }); - it('should return empty common tags if visibleAgents is empty', () => { + it('should return empty common tags if agentsOnCurrentPage is empty', () => { const result = getCommonTags('', [], []); expect(result).toEqual([]); @@ -52,7 +52,7 @@ describe('getCommonTags', () => { expect(result).toEqual(['oldTag', 'tag1']); }); - it('should return common tags from old data if visibleAgents empty', () => { + it('should return common tags from old data if agentsOnCurrentPage empty', () => { const result = getCommonTags( [ { id: 'agent1', tags: ['oldTag'] }, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts index 8b638129d2d7..c75042b0429f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/utils/get_common_tags.ts @@ -11,7 +11,7 @@ import type { Agent, AgentPolicy } from '../../../../types'; export const getCommonTags = ( agents: string | Agent[], - visibleAgents: Agent[], + agentsOnCurrentPage: Agent[], agentPolicies: AgentPolicy[] ): string[] => { const isManagedPolicy = (agent: Agent): boolean => { @@ -33,12 +33,12 @@ export const getCommonTags = ( if (!Array.isArray(agents)) { // in query mode, returning common tags of all agents in current page // this is a simplification to avoid querying all agents from backend to determine common tags - return commonSelectedTags(visibleAgents); + return commonSelectedTags(agentsOnCurrentPage); } // taking latest tags from freshly loaded agents data, as selected agents array does not contain the latest tags of agents const freshSelectedAgentsData = - visibleAgents.length > 0 - ? visibleAgents.filter((newAgent) => + agentsOnCurrentPage.length > 0 + ? agentsOnCurrentPage.filter((newAgent) => agents.find((existingAgent) => existingAgent.id === newAgent.id) ) : agents; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx index 5fd6183863fb..189f6d4455f8 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_reassign_policy_modal/index.tsx @@ -77,6 +77,7 @@ export const AgentReassignAgentPolicyModal: React.FunctionComponent = ({ : await sendPostBulkAgentReassign({ policy_id: selectedAgentPolicyId, agents: Array.isArray(agents) ? agents.map((agent) => agent.id) : agents, + includeInactive: true, }); if (res.error) { throw res.error; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx index f26dd734354b..1dd949e1f49e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/hooks.tsx @@ -4,9 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useState, useMemo, useCallback } from 'react'; + +import { useCallback, useState, useMemo } from 'react'; import moment from 'moment'; +import { + AGENTS_PREFIX, + FLEET_SERVER_PACKAGE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, + SO_SEARCH_LIMIT, +} from '../../../../../../constants'; + +import { sendGetAgents, sendGetPackagePolicies } from '../../../../../../hooks'; + export function useScheduleDateTime(now?: string) { const initialDatetime = useMemo(() => moment(now), [now]); const [startDatetime, setStartDatetime] = useState(initialDatetime); @@ -44,3 +54,27 @@ export function useScheduleDateTime(now?: string) { maxTime, }; } + +export async function sendAllFleetServerAgents() { + const packagePoliciesRes = await sendGetPackagePolicies({ + page: 1, + perPage: SO_SEARCH_LIMIT, + kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${FLEET_SERVER_PACKAGE}`, + }); + const agentPolicyIds = [ + ...new Set(packagePoliciesRes?.data?.items.map((p) => p.policy_id) ?? []), + ]; + + if (agentPolicyIds.length === 0) { + return { allFleetServerAgents: [] }; + } + const kuery = `${AGENTS_PREFIX}.policy_id:${agentPolicyIds.map((id) => `"${id}"`).join(' or ')}`; + + const response = await sendGetAgents({ + kuery, + perPage: SO_SEARCH_LIMIT, + showInactive: false, + }); + + return { allFleetServerAgents: response.data?.items || [] }; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx index 919a500477f0..30a12409629e 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.test.tsx @@ -13,6 +13,8 @@ import { createFleetTestRendererMock } from '../../../../../../mock'; import { sendGetAgentsAvailableVersions, sendPostBulkAgentUpgrade } from '../../../../hooks'; +import { sendAllFleetServerAgents } from './hooks'; + import { AgentUpgradeAgentModal } from '.'; import type { AgentUpgradeAgentModalProps } from '.'; @@ -33,9 +35,17 @@ jest.mock('../../../../hooks', () => { }; }); +jest.mock('./hooks', () => { + return { + ...jest.requireActual('./hooks'), + sendAllFleetServerAgents: jest.fn(), + }; +}); + const mockSendPostBulkAgentUpgrade = sendPostBulkAgentUpgrade as jest.Mock; const mockSendGetAgentsAvailableVersions = sendGetAgentsAvailableVersions as jest.Mock; +const mockSendAllFleetServerAgents = sendAllFleetServerAgents as jest.Mock; function renderAgentUpgradeAgentModal(props: Partial) { const renderer = createFleetTestRendererMock(); @@ -43,7 +53,6 @@ function renderAgentUpgradeAgentModal(props: Partial {}} {...props} /> ); - return { utils }; } @@ -180,10 +189,113 @@ describe('AgentUpgradeAgentModal', () => { ); expect(optionList.textContent).toEqual(['8.10.4', '8.10.2+build123456789'].join('')); }); + + it('should disable submit button and display a warning for a single agent when version is greater than maxFleetServerVersion', async () => { + mockSendGetAgentsAvailableVersions.mockClear(); + mockSendGetAgentsAvailableVersions.mockResolvedValue({ + data: { + items: ['8.10.4', '8.10.2', '8.9.0', '8.8.0'], + }, + }); + mockSendAllFleetServerAgents.mockResolvedValue({ + allFleetServerAgents: [ + { id: 'fleet-server', local_metadata: { elastic: { agent: { version: '8.9.0' } } } }, + ] as any, + }); + + const { utils } = renderAgentUpgradeAgentModal({ + agents: [ + { + id: 'agent1', + local_metadata: { + elastic: { + agent: { version: '8.8.0', upgradeable: true }, + }, + host: { hostname: 'host00001' }, + }, + }, + ] as any, + agentCount: 1, + }); + + await waitFor(() => { + const container = utils.getByTestId('agentUpgradeModal.VersionCombobox'); + const input = within(container).getByRole('combobox'); + expect(input?.value).toEqual('8.10.2'); + expect( + utils.queryAllByText( + /This action will upgrade the agent running on 'host00001' to version 8.10.2. This action can not be undone. Are you sure you wish to continue?/ + ) + ); + expect( + utils.queryByText( + /Cannot upgrade to version 8.10.2 because it is higher than the latest fleet server version 8.9.0./ + ) + ).toBeInTheDocument(); + const el = utils.getByTestId('confirmModalConfirmButton'); + expect(el).toBeDisabled(); + }); + }); + + it('should display a warning for multiple agents when version is greater than maxFleetServerVersion and not disable submit button', async () => { + mockSendGetAgentsAvailableVersions.mockClear(); + mockSendGetAgentsAvailableVersions.mockResolvedValue({ + data: { + items: ['8.10.4', '8.10.2', '8.9.0', '8.8.0'], + }, + }); + mockSendAllFleetServerAgents.mockResolvedValue({ + allFleetServerAgents: [ + { id: 'fleet-server', local_metadata: { elastic: { agent: { version: '8.9.0' } } } }, + ] as any, + }); + + const { utils } = renderAgentUpgradeAgentModal({ + agents: [ + { + id: 'agent1', + local_metadata: { + elastic: { + agent: { version: '8.8.0', upgradeable: true }, + }, + host: { hostname: 'host00001' }, + }, + }, + { + id: 'agent2', + local_metadata: { + elastic: { + agent: { version: '8.8.1', upgradeable: true }, + }, + host: { hostname: 'host00002' }, + }, + }, + ] as any, + agentCount: 1, + }); + + await waitFor(() => { + const container = utils.getByTestId('agentUpgradeModal.VersionCombobox'); + const input = within(container).getByRole('combobox'); + expect(input?.value).toEqual('8.10.2'); + expect( + utils.queryAllByText( + /This action will upgrade multiple agents to version 8.10.2. This action can not be undone. Are you sure you wish to continue?/ + ) + ); + expect( + utils.queryByText( + /Please choose another version. Cannot upgrade to version 8.10.2 because it is higher than the latest fleet server version 8.9.0./ + ) + ).toBeInTheDocument(); + const el = utils.getByTestId('confirmModalConfirmButton'); + expect(el).not.toBeDisabled(); + }); + }); }); describe('restart upgrade', () => { - it('should restart uprade on updating agents if some agents in updating', async () => { + it('should restart upgrade on updating agents if some agents in updating', async () => { const { utils } = renderAgentUpgradeAgentModal({ agents: [ { status: 'updating', upgrade_started_at: '2022-11-21T12:27:24Z', id: 'agent1' }, @@ -266,10 +378,9 @@ describe('AgentUpgradeAgentModal', () => { agentCount: 2, }); await waitFor(() => { - expect(utils.queryByText(/The selected agent is not upgradeable/)).toBeInTheDocument(); expect( utils.queryByText( - /Reason: agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service./ + /The selected agent is not upgradeable: agent cannot be upgraded through Fleet. It may be running in a container or it is not installed as a service./ ) ).toBeInTheDocument(); const el = utils.getByTestId('confirmModalConfirmButton'); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx index e333efb152ea..74bd3fe35d30 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/components/agent_upgrade_modal/index.tsx @@ -20,6 +20,7 @@ import { EuiCallOut, EuiDatePicker, EuiFieldText, + EuiLink, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -28,9 +29,13 @@ import type { EuiComboBoxOptionOption } from '@elastic/eui'; import semverGt from 'semver/functions/gt'; import semverLt from 'semver/functions/lt'; -import { AGENT_UPGRADE_COOLDOWN_IN_MIN } from '../../../../../../../common/services'; +import { + AGENT_UPGRADE_COOLDOWN_IN_MIN, + getMinVersion, + getFleetServerVersionMessage, + isAgentVersionLessThanFleetServer, +} from '../../../../../../../common/services'; -import { getMinVersion } from '../../../../../../../common/services/get_min_max_version'; import { AGENT_UPDATING_TIMEOUT_HOURS, isStuckInUpdating, @@ -59,7 +64,7 @@ import { MAINTENANCE_VALUES, ROLLING_UPGRADE_MINIMUM_SUPPORTED_VERSION, } from './constants'; -import { useScheduleDateTime } from './hooks'; +import { useScheduleDateTime, sendAllFleetServerAgents } from './hooks'; export interface AgentUpgradeAgentModalProps { onClose: () => void; @@ -86,7 +91,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent { - const { notifications } = useStartServices(); + const { notifications, docLinks } = useStartServices(); const kibanaVersion = useKibanaVersion() || ''; const config = useConfig(); const [isSubmitting, setIsSubmitting] = useState(false); @@ -100,6 +105,8 @@ export const AgentUpgradeAgentModal: React.FunctionComponent(0); const [updatingQuery, setUpdatingQuery] = useState(''); + const [fleetServerAgents, setFleetServerAgents] = useState([]); + const QUERY_STUCK_UPDATING = `status:updating AND upgrade_started_at:* AND NOT upgraded_at:* AND upgrade_started_at < now-${AGENT_UPDATING_TIMEOUT_HOURS}h`; const EMPTY_VALUE = useMemo(() => ({ label: '', value: '' }), []); const [isInvalid, setIsInvalid] = useState(false); @@ -155,6 +162,19 @@ export const AgentUpgradeAgentModal: React.FunctionComponent { + const fetchFleetServerAgents = async () => { + try { + const { allFleetServerAgents } = await sendAllFleetServerAgents(); + setFleetServerAgents(allFleetServerAgents); + } catch (error) { + return; + } + }; + + fetchFleetServerAgents(); + }, []); + const minVersion = useMemo(() => { if (!Array.isArray(agents)) { // when agent is a query, don't set minVersion, so the versions are available to select @@ -208,7 +228,6 @@ export const AgentUpgradeAgentModal: React.FunctionComponent { + if ( + isSingleAgent && + selectedVersion[0]?.value && + !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value) + ) { + return `The selected agent is not upgradeable: ${getNotUpgradeableMessage( + agents[0], + latestAgentVersion, + selectedVersion[0].value + )}`; + } + if ( + selectedVersion[0]?.value && + !isAgentVersionLessThanFleetServer(selectedVersion[0].value, fleetServerAgents) + ) { + return `Please choose another version. ${getFleetServerVersionMessage( + selectedVersion[0].value, + fleetServerAgents + )}`; + } + }, [agents, fleetServerAgents, isSingleAgent, latestAgentVersion, selectedVersion]); + const [selectedMaintenanceWindow, setSelectedMaintenanceWindow] = useState([ isSmallBatch ? maintenanceOptions[0] : maintenanceOptions[1], ]); @@ -231,6 +273,25 @@ export const AgentUpgradeAgentModal: React.FunctionComponent + isSubmitting || + (isUpdating && updatingAgents === 0) || + !selectedVersion[0].value || + (isSingleAgent && !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value)) || + (isSingleAgent && + !isAgentVersionLessThanFleetServer(selectedVersion[0].value, fleetServerAgents)), + [ + agents, + fleetServerAgents, + isSingleAgent, + isSubmitting, + isUpdating, + selectedVersion, + updatingAgents, + ] + ); + async function onSubmit() { const version = getVersion(selectedVersion); const rolloutOptions = { @@ -257,6 +318,7 @@ export const AgentUpgradeAgentModal: React.FunctionComponent } - confirmButtonDisabled={ - isSubmitting || - (isUpdating && updatingAgents === 0) || - !selectedVersion[0].value || - (isSingleAgent && !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value)) - } + confirmButtonDisabled={isSubmitButtonDisabled} confirmButtonText={ isSingleAgent ? ( ) : isSingleAgent ? ( - selectedVersion[0].value && - !isAgentUpgradeableToVersion(agents[0], selectedVersion[0].value) ? ( - - } - > - - + warningMessage ? ( + ) : ( <>

@@ -426,10 +460,22 @@ export const AgentUpgradeAgentModal: React.FunctionComponent + + + +

+ ), }} /> @@ -437,6 +483,8 @@ export const AgentUpgradeAgentModal: React.FunctionComponent ) + ) : warningMessage ? ( + ) : ( + + + +
+ ), }} /> @@ -607,3 +665,37 @@ export const AgentUpgradeAgentModal: React.FunctionComponent ); }; + +export const UpgradeModalWarningCallout: React.FunctionComponent<{ warningMessage: string }> = ({ + warningMessage, +}) => { + const { docLinks } = useStartServices(); + return ( + + } + > + + + + +
+ ), + }} + /> + + ); +}; diff --git a/x-pack/plugins/fleet/public/mock/fleet_start_services.tsx b/x-pack/plugins/fleet/public/mock/fleet_start_services.tsx index aea31e42d517..30661fd94869 100644 --- a/x-pack/plugins/fleet/public/mock/fleet_start_services.tsx +++ b/x-pack/plugins/fleet/public/mock/fleet_start_services.tsx @@ -39,6 +39,11 @@ const fleetAuthzMock: FleetAuthz = { setup: true, readEnrollmentTokens: true, readAgentPolicies: true, + readAgents: true, + readSettings: true, + allAgentPolicies: true, + allAgents: true, + allSettings: true, }, integrations: { readPackageInfo: true, diff --git a/x-pack/plugins/fleet/public/mock/plugin_interfaces.ts b/x-pack/plugins/fleet/public/mock/plugin_interfaces.ts index c85e9e713ebc..735c3283bdbb 100644 --- a/x-pack/plugins/fleet/public/mock/plugin_interfaces.ts +++ b/x-pack/plugins/fleet/public/mock/plugin_interfaces.ts @@ -20,6 +20,11 @@ export const createStartMock = (extensionsStorage: UIExtensionsStorage = {}): Mo setup: true, readEnrollmentTokens: true, readAgentPolicies: true, + allAgentPolicies: true, + allAgents: true, + allSettings: true, + readAgents: true, + readSettings: true, }, integrations: { readPackageInfo: true, diff --git a/x-pack/plugins/fleet/public/plugin.ts b/x-pack/plugins/fleet/public/plugin.ts index 7799b3653c0b..415484633c08 100644 --- a/x-pack/plugins/fleet/public/plugin.ts +++ b/x-pack/plugins/fleet/public/plugin.ts @@ -324,7 +324,7 @@ export class FleetPlugin implements Plugin @@ -283,7 +283,7 @@ export const postBulkAgentsReassignHandler: RequestHandler< const esClient = coreContext.elasticsearch.client.asInternalUser; const agentOptions = Array.isArray(request.body.agents) ? { agentIds: request.body.agents } - : { kuery: request.body.agents }; + : { kuery: request.body.agents, showInactive: request.body.includeInactive }; try { const results = await AgentService.reassignAgents( diff --git a/x-pack/plugins/fleet/server/routes/agent/index.ts b/x-pack/plugins/fleet/server/routes/agent/index.ts index ca37cc76c338..2173a063cc4f 100644 --- a/x-pack/plugins/fleet/server/routes/agent/index.ts +++ b/x-pack/plugins/fleet/server/routes/agent/index.ts @@ -50,7 +50,7 @@ import { deleteAgentHandler, getAgentStatusForAgentPolicyHandler, putAgentsReassignHandlerDeprecated, - postBulkAgentsReassignHandler, + postBulkAgentReassignHandler, getAgentDataHandler, bulkUpdateAgentTagsHandler, getAvailableVersionsHandler, @@ -77,7 +77,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -93,7 +93,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .put({ path: AGENT_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -109,7 +109,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.BULK_UPDATE_AGENT_TAGS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -125,7 +125,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .delete({ path: AGENT_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -142,7 +142,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT path: AGENT_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -158,7 +158,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.LIST_TAGS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -174,7 +174,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.ACTIONS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -194,7 +194,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.CANCEL_ACTIONS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -215,7 +215,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, // Authorizations? + fleet: { readAgents: true }, }, }) .addVersion( @@ -230,7 +230,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.UNENROLL_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -246,7 +246,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .put({ path: AGENT_API_ROUTES.REASSIGN_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -261,7 +261,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.REASSIGN_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -276,7 +276,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.REQUEST_DIAGNOSTICS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -291,7 +291,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.BULK_REQUEST_DIAGNOSTICS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -306,7 +306,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.LIST_UPLOADS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -321,7 +321,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.GET_UPLOAD_FILE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -353,7 +353,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.STATUS_PATTERN_DEPRECATED, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -368,7 +368,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.DATA_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -384,7 +384,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.UPGRADE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -399,7 +399,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.BULK_UPGRADE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -414,9 +414,8 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT router.versioned .get({ path: AGENT_API_ROUTES.ACTION_STATUS_PATTERN, - fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( @@ -432,7 +431,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.BULK_REASSIGN_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -440,7 +439,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT version: API_VERSIONS.public.v1, validate: { request: PostBulkAgentReassignRequestSchema }, }, - postBulkAgentsReassignHandler + postBulkAgentReassignHandler ); // Bulk unenroll @@ -448,7 +447,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .post({ path: AGENT_API_ROUTES.BULK_UNENROLL_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -464,7 +463,7 @@ export const registerAPIRoutes = (router: FleetAuthzRouter, config: FleetConfigT .get({ path: AGENT_API_ROUTES.AVAILABLE_VERSIONS_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgents: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts index f6d7f460119f..ce8f181d05cb 100644 --- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts +++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { checkFleetServerVersion, checkKibanaVersion } from './upgrade_handler'; +import { checkKibanaVersion } from './upgrade_handler'; describe('upgrade handler', () => { describe('checkKibanaVersion', () => { @@ -42,25 +42,4 @@ describe('upgrade handler', () => { expect(() => checkKibanaVersion('8.4.0', '8.4.0', true)).not.toThrowError(); }); }); - - describe('checkFleetServerVersion', () => { - it('should not throw if no force is specified and patch is newer', () => { - const fleetServers = [ - { local_metadata: { elastic: { agent: { version: '8.3.0' } } } }, - { local_metadata: { elastic: { agent: { version: '8.4.0' } } } }, - ] as any; - expect(() => checkFleetServerVersion('8.4.1', fleetServers, false)).not.toThrowError(); - expect(() => - checkFleetServerVersion('8.4.1-SNAPSHOT', fleetServers, false) - ).not.toThrowError(); - }); - - it('should throw if no force is specified and minor is newer', () => { - const fleetServers = [ - { local_metadata: { elastic: { agent: { version: '8.3.0' } } } }, - { local_metadata: { elastic: { agent: { version: '8.4.0' } } } }, - ] as any; - expect(() => checkFleetServerVersion('8.5.1', fleetServers, false)).toThrowError(); - }); - }); }); diff --git a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts index 6073d8b12170..4e4e8d1f367c 100644 --- a/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts +++ b/x-pack/plugins/fleet/server/routes/agent/upgrade_handler.ts @@ -28,9 +28,8 @@ import { isAgentUpgradeableToVersion, differsOnlyInPatch, } from '../../../common/services'; -import { getMaxVersion } from '../../../common/services/get_min_max_version'; +import { checkFleetServerVersion } from '../../../common/services/check_fleet_server_versions'; import { getAgentById } from '../../services/agents'; -import type { Agent } from '../../types'; import { getAllFleetServerAgents } from '../../collectors/get_all_fleet_server_agents'; import { getLatestAvailableVersion } from '../../services/agents/versions'; @@ -173,7 +172,9 @@ export const postBulkAgentsUpgradeHandler: RequestHandler< } try { - const agentOptions = Array.isArray(agents) ? { agentIds: agents } : { kuery: agents }; + const agentOptions = Array.isArray(agents) + ? { agentIds: agents } + : { kuery: agents, showInactive: request.body.includeInactive }; const upgradeOptions = { ...agentOptions, sourceUri, @@ -223,43 +224,3 @@ export const checkKibanaVersion = (version: string, kibanaVersion: string, force ); } }; - -// Check the installed fleet server version -export const checkFleetServerVersion = ( - versionToUpgradeNumber: string, - fleetServerAgents: Agent[], - force = false -) => { - const fleetServerVersions = fleetServerAgents.map( - (agent) => agent.local_metadata.elastic.agent.version - ) as string[]; - - const maxFleetServerVersion = getMaxVersion(fleetServerVersions); - - if (!maxFleetServerVersion) { - return; - } - - if ( - !force && - semverGt(versionToUpgradeNumber, maxFleetServerVersion) && - !differsOnlyInPatch(versionToUpgradeNumber, maxFleetServerVersion) - ) { - throw new Error( - `cannot upgrade agent to ${versionToUpgradeNumber} because it is higher than the latest fleet server version ${maxFleetServerVersion}` - ); - } - - const fleetServerMajorGt = - semverMajor(maxFleetServerVersion) > semverMajor(versionToUpgradeNumber); - const fleetServerMajorEqMinorGte = - semverMajor(maxFleetServerVersion) === semverMajor(versionToUpgradeNumber) && - semverMinor(maxFleetServerVersion) >= semverMinor(versionToUpgradeNumber); - - // When force is enabled, only the major and minor versions are checked - if (force && !(fleetServerMajorGt || fleetServerMajorEqMinorGte)) { - throw new AgentRequestInvalidError( - `Cannot force upgrade agent to ${versionToUpgradeNumber} because it does not satisfy the major and minor of the latest fleet server version ${maxFleetServerVersion}` - ); - } -}; diff --git a/x-pack/plugins/fleet/server/routes/agent_policy/index.ts b/x-pack/plugins/fleet/server/routes/agent_policy/index.ts index 747bc6face1f..028f8ff77578 100644 --- a/x-pack/plugins/fleet/server/routes/agent_policy/index.ts +++ b/x-pack/plugins/fleet/server/routes/agent_policy/index.ts @@ -76,7 +76,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: AGENT_POLICY_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgentPolicies: true }, }, }) .addVersion( @@ -92,7 +92,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: AGENT_POLICY_API_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgentPolicies: true }, }, }) .addVersion( @@ -108,7 +108,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: AGENT_POLICY_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgentPolicies: true }, }, }) .addVersion( @@ -124,7 +124,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: AGENT_POLICY_API_ROUTES.COPY_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgentPolicies: true }, }, }) .addVersion( @@ -140,7 +140,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: AGENT_POLICY_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgentPolicies: true }, }, }) .addVersion( @@ -156,7 +156,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: AGENT_POLICY_API_ROUTES.FULL_INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgentPolicies: true }, }, }) .addVersion( @@ -172,7 +172,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: AGENT_POLICY_API_ROUTES.FULL_INFO_DOWNLOAD_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgentPolicies: true }, }, enableQueryVersion: true, }) @@ -189,7 +189,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: K8S_API_ROUTES.K8S_INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgentPolicies: true }, }, }) .addVersion( @@ -205,7 +205,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: K8S_API_ROUTES.K8S_DOWNLOAD_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readAgentPolicies: true }, }, enableQueryVersion: true, }) diff --git a/x-pack/plugins/fleet/server/routes/download_source/index.tsx b/x-pack/plugins/fleet/server/routes/download_source/index.tsx index a307d5a3296d..7e0d761f7d4e 100644 --- a/x-pack/plugins/fleet/server/routes/download_source/index.tsx +++ b/x-pack/plugins/fleet/server/routes/download_source/index.tsx @@ -31,7 +31,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: DOWNLOAD_SOURCE_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -46,7 +46,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: DOWNLOAD_SOURCE_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -61,7 +61,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: DOWNLOAD_SOURCE_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -76,7 +76,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: DOWNLOAD_SOURCE_API_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -91,7 +91,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: DOWNLOAD_SOURCE_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/enrollment_api_key/index.ts b/x-pack/plugins/fleet/server/routes/enrollment_api_key/index.ts index 3623fb24b451..4797fa2ef562 100644 --- a/x-pack/plugins/fleet/server/routes/enrollment_api_key/index.ts +++ b/x-pack/plugins/fleet/server/routes/enrollment_api_key/index.ts @@ -44,7 +44,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: ENROLLMENT_API_KEY_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -74,7 +74,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: ENROLLMENT_API_KEY_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -104,7 +104,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: ENROLLMENT_API_KEY_ROUTES.DELETE_PATTERN_DEPRECATED, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -134,7 +134,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: ENROLLMENT_API_KEY_ROUTES.CREATE_PATTERN_DEPRECATED, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/fleet_proxies/index.ts b/x-pack/plugins/fleet/server/routes/fleet_proxies/index.ts index 5cd35e027275..5100ae77c237 100644 --- a/x-pack/plugins/fleet/server/routes/fleet_proxies/index.ts +++ b/x-pack/plugins/fleet/server/routes/fleet_proxies/index.ts @@ -27,7 +27,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: FLEET_PROXY_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -42,7 +42,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: FLEET_PROXY_API_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -57,7 +57,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: FLEET_PROXY_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -70,9 +70,9 @@ export const registerRoutes = (router: FleetAuthzRouter) => { router.versioned .get({ - path: FLEET_PROXY_API_ROUTES.DELETE_PATTERN, + path: FLEET_PROXY_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -87,7 +87,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: FLEET_PROXY_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/fleet_server_hosts/index.ts b/x-pack/plugins/fleet/server/routes/fleet_server_hosts/index.ts index 5dddc693206b..8c6ad90f2368 100644 --- a/x-pack/plugins/fleet/server/routes/fleet_server_hosts/index.ts +++ b/x-pack/plugins/fleet/server/routes/fleet_server_hosts/index.ts @@ -30,7 +30,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: FLEET_SERVER_HOST_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -44,7 +44,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: FLEET_SERVER_HOST_API_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -58,7 +58,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: FLEET_SERVER_HOST_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -72,7 +72,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: FLEET_SERVER_HOST_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -86,7 +86,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: FLEET_SERVER_HOST_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/output/index.ts b/x-pack/plugins/fleet/server/routes/output/index.ts index 3a566471aa4d..0ca7f350b292 100644 --- a/x-pack/plugins/fleet/server/routes/output/index.ts +++ b/x-pack/plugins/fleet/server/routes/output/index.ts @@ -34,7 +34,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: OUTPUT_API_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -48,7 +48,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: OUTPUT_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -62,7 +62,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: OUTPUT_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -77,7 +77,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: OUTPUT_API_ROUTES.CREATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -92,7 +92,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .delete({ path: OUTPUT_API_ROUTES.DELETE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -107,7 +107,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .post({ path: OUTPUT_API_ROUTES.LOGSTASH_API_KEY_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( @@ -122,7 +122,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: OUTPUT_API_ROUTES.GET_OUTPUT_HEALTH_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/settings/index.ts b/x-pack/plugins/fleet/server/routes/settings/index.ts index 89da7496dc0c..2246c73c710b 100644 --- a/x-pack/plugins/fleet/server/routes/settings/index.ts +++ b/x-pack/plugins/fleet/server/routes/settings/index.ts @@ -70,7 +70,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .get({ path: SETTINGS_API_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { readSettings: true }, }, }) .addVersion( @@ -84,7 +84,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: SETTINGS_API_ROUTES.UPDATE_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/routes/uninstall_token/index.ts b/x-pack/plugins/fleet/server/routes/uninstall_token/index.ts index a7214607cb30..9fb91b45fa37 100644 --- a/x-pack/plugins/fleet/server/routes/uninstall_token/index.ts +++ b/x-pack/plugins/fleet/server/routes/uninstall_token/index.ts @@ -24,7 +24,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType .get({ path: UNINSTALL_TOKEN_ROUTES.LIST_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( @@ -39,7 +39,7 @@ export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType .get({ path: UNINSTALL_TOKEN_ROUTES.INFO_PATTERN, fleetAuthz: { - fleet: { all: true }, + fleet: { allAgents: true }, }, }) .addVersion( diff --git a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts index 806bb93f85b7..635c6f8c9a62 100644 --- a/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agent_service.test.ts @@ -21,6 +21,7 @@ import { FleetUnauthorizedError } from '../../errors'; import { getAuthzFromRequest } from '../security'; import type { FleetAuthz } from '../../../common'; +import { createFleetAuthzMock } from '../../../common/mocks'; import type { AgentClient } from './agent_service'; import { AgentServiceImpl } from './agent_service'; @@ -53,8 +54,13 @@ describe('AgentService', () => { fleet: { all: false, setup: false, + readAgents: false, readEnrollmentTokens: false, readAgentPolicies: false, + allAgentPolicies: false, + allAgents: false, + allSettings: false, + readSettings: false, }, integrations: { readPackageInfo: false, @@ -121,28 +127,7 @@ describe('AgentService', () => { ); beforeEach(() => - mockGetAuthzFromRequest.mockReturnValue( - Promise.resolve({ - fleet: { - all: true, - setup: true, - readEnrollmentTokens: true, - readAgentPolicies: true, - }, - integrations: { - readPackageInfo: true, - readInstalledPackages: true, - installPackages: true, - upgradePackages: true, - uploadPackages: true, - removePackages: true, - readPackageSettings: true, - writePackageSettings: true, - readIntegrationPolicies: true, - writeIntegrationPolicies: true, - }, - }) - ) + mockGetAuthzFromRequest.mockReturnValue(Promise.resolve(createFleetAuthzMock())) ); expectApisToCallServicesSuccessfully(mockEsClient, mockSoClient, agentClient); diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts index 059edae2f1b6..d02ee39e8383 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/dataset/fields.ts @@ -20,273 +20,3 @@ export const createBaseFields = () => { ]; return yaml.dump(fields); }; - -export const createAgentFields = () => { - const fields = [ - { - name: 'cloud', - title: 'Cloud', - group: 2, - description: 'Fields related to the cloud or infrastructure the events are coming from.', - footnote: - 'Examples: If Metricbeat is running on an EC2 host and fetches data from its host, the cloud info contains the data about this machine. If Metricbeat runs on a remote machine outside the cloud and fetches data from a service running in the cloud, the field contains cloud data from the machine the service is running on.', - type: 'group', - fields: [ - { - name: 'account.id', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: - 'The cloud account or organization id used to identify different entities in a multi-tenant environment.\nExamples: AWS account id, Google Cloud ORG Id, or other unique identifier.', - example: 666777888999, - }, - { - name: 'availability_zone', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Availability zone in which this host is running.', - example: 'us-east-1c', - }, - { - name: 'instance.id', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Instance ID of the host machine.', - example: 'i-1234567890abcdef0', - }, - { - name: 'instance.name', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Instance name of the host machine.', - }, - { - name: 'machine.type', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Machine type of the host machine.', - example: 't2.medium', - }, - { - name: 'provider', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: - 'Name of the cloud provider. Example values are aws, azure, gcp, or digitalocean.', - example: 'aws', - }, - { - name: 'region', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Region in which this host is running.', - example: 'us-east-1', - }, - { - name: 'project.id', - type: 'keyword', - description: 'Name of the project in Google Cloud.', - }, - { - name: 'image.id', - type: 'keyword', - description: 'Image ID for the cloud instance.', - }, - ], - }, - { - name: 'container', - title: 'Container', - group: 2, - description: - 'Container fields are used for meta information about the specific container that is the source of information.\nThese fields help correlate data based containers from any runtime.', - type: 'group', - fields: [ - { - name: 'id', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: 'Unique container id.', - }, - { - name: 'image.name', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Name of the image the container was built on.', - }, - { - name: 'labels', - level: 'extended', - type: 'object', - object_type: 'keyword', - description: 'Image labels.', - }, - { - name: 'name', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Container name.', - }, - ], - }, - { - name: 'host', - title: 'Host', - group: 2, - description: - 'A host is defined as a general computing instance.\nECS host.* fields should be populated with details about the host on which the event happened, or from which the measurement was taken. Host types include hardware, virtual machines, Docker containers, and Kubernetes nodes.', - type: 'group', - fields: [ - { - name: 'architecture', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: 'Operating system architecture.', - example: 'x86_64', - }, - { - name: 'domain', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: - "Name of the domain of which the host is a member.\nFor example, on Windows this could be the host's Active Directory domain or NetBIOS domain name. For Linux this could be the domain of the host's LDAP provider.", - example: 'CONTOSO', - default_field: false, - }, - { - name: 'hostname', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: - 'Hostname of the host.\nIt normally contains what the `hostname` command returns on the host machine', - }, - { - name: 'id', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: - 'Unique host id.\nAs hostname is not always unique, use values that are meaningful in your environment.\nExample: The current usage of `beat.name`', - }, - { - name: 'ip', - level: 'core', - type: 'ip', - description: 'Host ip addresses.', - }, - { - name: 'mac', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: 'Host mac addresses.', - }, - { - name: 'name', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: - 'Name of the host.\nIt can contain what `hostname` returns on Unix systems, the fully qualified domain name, or a name specified by the user. The sender decides which value to use', - }, - { - name: 'os.family', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'OS family (such as redhat, debian, freebsd, windows).', - example: 'debian', - }, - { - name: 'os.kernel', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Operating system kernel version as a raw string.', - example: '4.4.0-112-generic', - }, - { - name: 'os.name', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - multi_fields: [ - { - name: 'text', - type: 'text', - norms: false, - default_field: false, - }, - ], - description: 'Operating system name, without the version.', - example: 'Mac OS X', - }, - { - name: 'os.platform', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Operating system platform (such centos, ubuntu, windows).', - example: 'darwin', - }, - { - name: 'os.version', - level: 'extended', - type: 'keyword', - ignore_above: 1024, - description: 'Operating system version as a raw string.', - example: '10.14.1', - }, - { - name: 'type', - level: 'core', - type: 'keyword', - ignore_above: 1024, - description: - 'Type of host.\nFor Cloud providers this can be the machine type like `t2.medium`. If vm, this could be the container, for example, or other information meaningful in your environment', - }, - { - name: 'containerized', - type: 'boolean', - description: 'If the host is a container.\n', - }, - { - name: 'os.build', - type: 'keyword', - example: '18D109', - description: 'OS build information.\n', - }, - { - name: 'os.codename', - type: 'keyword', - example: 'stretch', - description: 'OS codename, if any.\n', - }, - ], - }, - { - name: 'input.type', - type: 'keyword', - description: 'Input type', - }, - { - name: 'log.offset', - type: 'long', - description: 'Log offset', - }, - ]; - return yaml.dump(fields); -}; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts index a9063c76f741..f32e1983a274 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/custom_integrations/assets/generate.ts @@ -11,7 +11,7 @@ import { pkgToPkgKey } from '../../../registry'; import type { CustomPackageDatasetConfiguration } from '../../install'; -import { createAgentFields, createBaseFields, createDatasetManifest } from './dataset'; +import { createBaseFields, createDatasetManifest } from './dataset'; import { createDefaultPipeline } from './dataset/ingest_pipeline'; import { createManifest } from './manifest'; @@ -45,10 +45,6 @@ export const createAssets = (assetOptions: AssetOptions) => { })}/data_stream/${datasetName}/fields/base-fields.yml`, content: Buffer.from(createBaseFields()), }, - { - path: `${pkgToPkgKey({ name, version })}/data_stream/${datasetName}/fields/agent.yml`, - content: Buffer.from(createAgentFields()), - }, { path: `${pkgToPkgKey({ name, diff --git a/x-pack/plugins/fleet/server/services/security/route_required_authz.ts b/x-pack/plugins/fleet/server/services/security/route_required_authz.ts index 98effa4070c9..bbc1b07010fb 100644 --- a/x-pack/plugins/fleet/server/services/security/route_required_authz.ts +++ b/x-pack/plugins/fleet/server/services/security/route_required_authz.ts @@ -133,7 +133,7 @@ const ROUTE_AUTHZ_REQUIREMENTS = deepFreeze { const fleetAuthz = deepFreeze({ @@ -17,7 +21,12 @@ describe('When using calculateRouteAuthz()', () => { all: false, setup: false, readEnrollmentTokens: false, + allAgentPolicies: false, readAgentPolicies: false, + readAgents: false, + allAgents: false, + readSettings: false, + allSettings: false, }, integrations: { readPackageInfo: false, @@ -541,3 +550,334 @@ describe('When using calculateRouteAuthz()', () => { }); }); }); + +describe('getAuthzFromRequest', () => { + let mockSecurity: jest.MockedObjectDeep; + let checkPrivileges: jest.MockedFn; + beforeEach(() => { + checkPrivileges = jest.fn(); + mockSecurity = { + authc: { getCurrentUser: jest.fn() }, + authz: { + checkPrivilegesDynamicallyWithRequest: jest.fn().mockReturnValue(checkPrivileges), + actions: { + ui: { + get: (s: string) => `ui:${s}`, + }, + api: { + get: (s: string) => `api:${s}`, + }, + }, + mode: { + useRbacForRequest: jest.fn(), + }, + }, + } as unknown as jest.MockedObjectDeep; + + jest.mocked(appContextService.getSecurity).mockReturnValue(mockSecurity); + jest.mocked(appContextService.getSecurityLicense).mockReturnValue({ + isEnabled: () => true, + } as any); + jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ + subfeaturePrivileges: true, + } as any); + }); + it('should not authorize access if RBAC is not enabled', async () => { + mockSecurity.authz.mode.useRbacForRequest.mockReturnValue(false); + const res = await getAuthzFromRequest({} as any); + for (const val of Object.values(res.fleet)) { + expect(val).toBe(false); + } + for (const val of Object.values(res.integrations)) { + expect(val).toBe(false); + } + }); + describe('Fleet readAgents', () => { + beforeEach(() => { + mockSecurity.authz.mode.useRbacForRequest.mockReturnValue(true); + }); + it('should authorize Fleet:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-all', + authorized: true, + }, + { + resource: 'default', + privilege: 'api:fleet-agents-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(true); + }); + + it('should authorize Fleet:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-read', + authorized: true, + }, + { + resource: 'default', + privilege: 'api:fleet-agents-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(true); + }); + + it('should authorize Fleet:Agents:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-agents-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(true); + }); + + it('should authorize Fleet:Agents:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-agents-all', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(true); + }); + + it('without kibana privilege it should not authorize Fleet Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(false); + }); + }); + + describe('Fleet allAgents', () => { + beforeEach(() => { + mockSecurity.authz.mode.useRbacForRequest.mockReturnValue(true); + }); + it('should authorize Fleet:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-all', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: true, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.allAgents).toBe(true); + }); + + it('should not authorize Fleet:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.allAgents).toBe(false); + }); + + it('should not authorize Fleet:Agents:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-agents-read', + authorized: false, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.allAgents).toBe(false); + }); + + it('should authorize Fleet:Agents:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-agents-all', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.allAgents).toBe(true); + }); + }); + + describe('Fleet readSettings', () => { + beforeEach(() => { + mockSecurity.authz.mode.useRbacForRequest.mockReturnValue(true); + }); + it('should authorize Fleet:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-all', + authorized: true, + }, + { + resource: 'default', + privilege: 'api:fleet-settings-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readSettings).toBe(true); + }); + + it('should authorize Fleet:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-read', + authorized: true, + }, + { + resource: 'default', + privilege: 'api:fleet-settings-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readSettings).toBe(true); + }); + + it('should authorize Fleet:Settings:Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-settings-read', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readSettings).toBe(true); + }); + + it('should authorize Fleet:Settings:All', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [ + { + resource: 'default', + privilege: 'api:fleet-settings-all', + authorized: true, + }, + ], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readSettings).toBe(true); + }); + + it('without kibana privilege it should not authorize Fleet Read', async () => { + checkPrivileges.mockResolvedValue({ + privileges: { + kibana: [], + elasticsearch: {} as any, + }, + hasAllRequested: false, + username: 'test', + }); + const res = await getAuthzFromRequest({} as any); + expect(res.fleet.readAgents).toBe(false); + }); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/security/security.ts b/x-pack/plugins/fleet/server/services/security/security.ts index 76986768416f..01bbc16e1779 100644 --- a/x-pack/plugins/fleet/server/services/security/security.ts +++ b/x-pack/plugins/fleet/server/services/security/security.ts @@ -74,8 +74,12 @@ const computeUiApiPrivileges = ( ); }; +const FLEET_SUBFEATURES = ['agents', 'agent-policies', 'settings']; + export async function getAuthzFromRequest(req: KibanaRequest): Promise { const security = appContextService.getSecurity(); + const isSubfeatureEnabled = + appContextService.getExperimentalFeatures()?.subfeaturePrivileges ?? false; if (security.authz.mode.useRbacForRequest(req)) { const checkPrivileges = security.authz.checkPrivilegesDynamicallyWithRequest(req); @@ -88,6 +92,7 @@ export async function getAuthzFromRequest(req: KibanaRequest): Promise [ + security.authz.actions.api.get(`${PLUGIN_ID}-${subfeature}-all`), + security.authz.actions.api.get(`${PLUGIN_ID}-${subfeature}-read`), + ]), + ...endpointPrivileges, ...endpointExceptionsPrivileges, ], }); + const fleetAllAuth = getAuthorizationFromPrivileges({ kibanaPrivileges: privileges.kibana, prefix: `${PLUGIN_ID}-all`, }); + const fleetReadAuth = getAuthorizationFromPrivileges({ + kibanaPrivileges: privileges.kibana, + prefix: `${PLUGIN_ID}-read`, + }); const intAllAuth = getAuthorizationFromPrivileges({ kibanaPrivileges: privileges.kibana, prefix: `${INTEGRATIONS_PLUGIN_ID}-all`, @@ -115,15 +131,56 @@ export async function getAuthzFromRequest(req: KibanaRequest): Promise', () => { diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx index d4e5876761c3..a27fb82fb82b 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_create.test.tsx @@ -528,7 +528,7 @@ describe('', () => { await actions.completeStepOne({ name: TEMPLATE_NAME, indexPatterns: DEFAULT_INDEX_PATTERNS, - allowAutoCreate: true, + allowAutoCreate: 'TRUE', }); // Component templates await actions.completeStepTwo('test_component_template_1'); @@ -556,7 +556,7 @@ describe('', () => { body: JSON.stringify({ name: TEMPLATE_NAME, indexPatterns: DEFAULT_INDEX_PATTERNS, - allowAutoCreate: true, + allowAutoCreate: 'TRUE', dataStream: {}, _kbnMeta: { type: 'default', @@ -655,7 +655,7 @@ describe('', () => { }, index_patterns: DEFAULT_INDEX_PATTERNS, data_stream: {}, - allow_auto_create: false, + allow_auto_create: 'NO_OVERWRITE', }), }) ); diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_edit.test.tsx b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_edit.test.tsx index f6fea16442bf..eb9e6c793aa5 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_edit.test.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_edit.test.tsx @@ -145,7 +145,7 @@ describe('', () => { name: 'test', indexPatterns: ['myPattern*'], version: 1, - allowAutoCreate: false, + allowAutoCreate: 'NO_OVERWRITE', dataStream: { hidden: true, anyUnknownKey: 'should_be_kept', @@ -210,7 +210,7 @@ describe('', () => { await actions.completeStepOne({ indexPatterns: UPDATED_INDEX_PATTERN, priority: 3, - allowAutoCreate: true, + allowAutoCreate: 'TRUE', }); // Component templates await actions.completeStepTwo(); @@ -265,7 +265,7 @@ describe('', () => { indexPatterns: UPDATED_INDEX_PATTERN, priority: 3, version: templateToEdit.version, - allowAutoCreate: true, + allowAutoCreate: 'TRUE', _kbnMeta: { type: 'default', hasDatastream: false, diff --git a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_form.helpers.ts b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_form.helpers.ts index 745b2a69b949..7977c4373d76 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_form.helpers.ts +++ b/x-pack/plugins/index_management/__jest__/client_integration/index_template_wizard/template_form.helpers.ts @@ -192,7 +192,17 @@ export const formSetup = async (initTestBed: SetupFunc) => { } if (allowAutoCreate) { - form.toggleEuiSwitch('allowAutoCreateField.input'); + let optionIndex = 0; + if (allowAutoCreate === 'TRUE') { + optionIndex = 1; + } + if (allowAutoCreate === 'FALSE') { + optionIndex = 2; + } + const radioGroup = find('allowAutoCreateField.input'); + const radioOption = radioGroup.childAt(optionIndex).find('input'); + radioOption.simulate('change', { target: { checked: true } }); + component.update(); } }); component.update(); diff --git a/x-pack/plugins/index_management/common/constants/allow_auto_create.ts b/x-pack/plugins/index_management/common/constants/allow_auto_create.ts new file mode 100644 index 000000000000..6b83471735c9 --- /dev/null +++ b/x-pack/plugins/index_management/common/constants/allow_auto_create.ts @@ -0,0 +1,50 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const allowAutoCreateRadioIds = { + NO_OVERWRITE_RADIO_OPTION: 'NO_OVERWRITE', + TRUE_RADIO_OPTION: 'TRUE', + FALSE_RADIO_OPTION: 'FALSE', +}; + +export const allowAutoCreateRadioValues = { + [allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION]: undefined, + [allowAutoCreateRadioIds.TRUE_RADIO_OPTION]: true, + [allowAutoCreateRadioIds.FALSE_RADIO_OPTION]: false, +}; + +export const allowAutoCreateRadios = [ + { + id: allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION, + label: i18n.translate( + 'xpack.idxMgmt.templateForm.stepLogistics.allowAutoCreate.noOverwriteRadioOptionLabel', + { + defaultMessage: 'Do not overwrite cluster setting', + } + ), + }, + { + id: allowAutoCreateRadioIds.TRUE_RADIO_OPTION, + label: i18n.translate( + 'xpack.idxMgmt.templateForm.stepLogistics.allowAutoCreate.trueRadioOptionLabel', + { + defaultMessage: 'True', + } + ), + }, + { + id: allowAutoCreateRadioIds.FALSE_RADIO_OPTION, + label: i18n.translate( + 'xpack.idxMgmt.templateForm.stepLogistics.allowAutoCreate.falseRadioOptionLabel', + { + defaultMessage: 'False', + } + ), + }, +]; diff --git a/x-pack/plugins/index_management/common/constants/index.ts b/x-pack/plugins/index_management/common/constants/index.ts index efe9630a5f23..718775ed9167 100644 --- a/x-pack/plugins/index_management/common/constants/index.ts +++ b/x-pack/plugins/index_management/common/constants/index.ts @@ -54,3 +54,4 @@ export { MAJOR_VERSION } from './plugin'; export { Section, IndexDetailsSection } from './home_sections'; export type { IndexDetailsTab, IndexDetailsTabId } from './home_sections'; +export * from './allow_auto_create'; diff --git a/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts b/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts index 84af60a41e2f..00d848fb6568 100644 --- a/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts +++ b/x-pack/plugins/index_management/common/lib/component_template_serialization.test.ts @@ -63,7 +63,7 @@ describe('Component template serialization', () => { ] ) ).toEqual({ - isDeprecated: false, + deprecated: undefined, name: 'my_component_template', version: 1, _meta: { diff --git a/x-pack/plugins/index_management/common/lib/component_template_serialization.ts b/x-pack/plugins/index_management/common/lib/component_template_serialization.ts index bffa1a2ad224..b1f2aac8a302 100644 --- a/x-pack/plugins/index_management/common/lib/component_template_serialization.ts +++ b/x-pack/plugins/index_management/common/lib/component_template_serialization.ts @@ -60,7 +60,7 @@ export function deserializeComponentTemplate( template, version, _meta, - isDeprecated: Boolean(deprecated === true), + deprecated, _kbnMeta: { usedBy: indexTemplatesToUsedBy[name] || [], isManaged: Boolean(_meta?.managed === true), @@ -95,11 +95,12 @@ export function deserializeComponentTemplateList( export function serializeComponentTemplate( componentTemplateDeserialized: ComponentTemplateDeserialized ): ComponentTemplateSerialized { - const { version, template, _meta } = componentTemplateDeserialized; + const { version, template, _meta, deprecated } = componentTemplateDeserialized; return { version, template, _meta, + deprecated, }; } diff --git a/x-pack/plugins/index_management/common/lib/template_serialization.test.ts b/x-pack/plugins/index_management/common/lib/template_serialization.test.ts new file mode 100644 index 000000000000..8f9f73c334a9 --- /dev/null +++ b/x-pack/plugins/index_management/common/lib/template_serialization.test.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { deserializeTemplate, serializeTemplate } from './template_serialization'; +import { TemplateDeserialized, TemplateSerialized } from '../types'; + +const defaultSerializedTemplate: TemplateSerialized = { + template: {}, + index_patterns: ['test'], + data_stream: {}, +}; + +const defaultDeserializedTemplate: TemplateDeserialized = { + name: 'my_template', + indexPatterns: ['test'], + _kbnMeta: { + type: 'default', + hasDatastream: true, + }, + allowAutoCreate: 'NO_OVERWRITE', +}; + +const allowAutoCreateRadioOptions = ['NO_OVERWRITE', 'TRUE', 'FALSE']; +const allowAutoCreateSerializedValues = [undefined, true, false]; + +describe('Template serialization', () => { + describe('serialization of allow_auto_create parameter', () => { + describe('deserializeTemplate()', () => { + allowAutoCreateSerializedValues.forEach((value, index) => { + test(`correctly deserializes ${value} value`, () => { + expect( + deserializeTemplate({ + ...defaultSerializedTemplate, + name: 'my_template', + allow_auto_create: value, + }) + ).toHaveProperty('allowAutoCreate', allowAutoCreateRadioOptions[index]); + }); + }); + }); + + describe('serializeTemplate()', () => { + allowAutoCreateRadioOptions.forEach((option, index) => { + test(`correctly serializes ${option} radio option`, () => { + expect( + serializeTemplate({ + ...defaultDeserializedTemplate, + allowAutoCreate: option, + }) + ).toHaveProperty('allow_auto_create', allowAutoCreateSerializedValues[index]); + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/index_management/common/lib/template_serialization.ts b/x-pack/plugins/index_management/common/lib/template_serialization.ts index 80a5514969f5..aacbc15aab3b 100644 --- a/x-pack/plugins/index_management/common/lib/template_serialization.ts +++ b/x-pack/plugins/index_management/common/lib/template_serialization.ts @@ -13,6 +13,7 @@ import { TemplateType, } from '../types'; import { deserializeESLifecycle } from './data_stream_serialization'; +import { allowAutoCreateRadioValues, allowAutoCreateRadioIds } from '../constants'; const hasEntries = (data: object = {}) => Object.entries(data).length > 0; @@ -27,6 +28,7 @@ export function serializeTemplate(templateDeserialized: TemplateDeserialized): T dataStream, _meta, allowAutoCreate, + deprecated, } = templateDeserialized; return { @@ -37,8 +39,9 @@ export function serializeTemplate(templateDeserialized: TemplateDeserialized): T data_stream: dataStream, composed_of: composedOf, ignore_missing_component_templates: ignoreMissingComponentTemplates, - allow_auto_create: allowAutoCreate, + allow_auto_create: allowAutoCreateRadioValues?.[allowAutoCreate], _meta, + deprecated, }; } @@ -81,7 +84,12 @@ export function deserializeTemplate( composedOf: composedOf ?? [], ignoreMissingComponentTemplates: ignoreMissingComponentTemplates ?? [], dataStream, - allowAutoCreate, + allowAutoCreate: + allowAutoCreate === true + ? allowAutoCreateRadioIds.TRUE_RADIO_OPTION + : allowAutoCreate === false + ? allowAutoCreateRadioIds.FALSE_RADIO_OPTION + : allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION, _meta, deprecated, _kbnMeta: { diff --git a/x-pack/plugins/index_management/common/types/component_templates.ts b/x-pack/plugins/index_management/common/types/component_templates.ts index 8eb39dec1da9..be285170f668 100644 --- a/x-pack/plugins/index_management/common/types/component_templates.ts +++ b/x-pack/plugins/index_management/common/types/component_templates.ts @@ -25,7 +25,6 @@ export interface ComponentTemplateSerialized { export interface ComponentTemplateDeserialized extends ComponentTemplateSerialized { name: string; - isDeprecated?: boolean; _kbnMeta: { usedBy: string[]; isManaged: boolean; diff --git a/x-pack/plugins/index_management/common/types/templates.ts b/x-pack/plugins/index_management/common/types/templates.ts index 9205605c7001..b05a29a961a7 100644 --- a/x-pack/plugins/index_management/common/types/templates.ts +++ b/x-pack/plugins/index_management/common/types/templates.ts @@ -49,7 +49,7 @@ export interface TemplateDeserialized { ignoreMissingComponentTemplates?: string[]; version?: number; priority?: number; // Composable template only - allowAutoCreate?: boolean; + allowAutoCreate: string; order?: number; // Legacy template only ilmPolicy?: { name: string; diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts index 203f162bf3a4..49b4e1b201a1 100644 --- a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts +++ b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_details.test.ts @@ -15,7 +15,7 @@ const { setup } = pageHelpers.componentTemplateDetails; const COMPONENT_TEMPLATE: ComponentTemplateDeserialized = { name: 'comp-1', - isDeprecated: true, + deprecated: true, template: { mappings: { properties: { ip_address: { type: 'ip' } } }, aliases: { mydata: {} }, diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx index d113c66302ec..555e4030b92c 100644 --- a/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx +++ b/x-pack/plugins/index_management/public/application/components/component_templates/__jest__/client_integration/component_template_edit.test.tsx @@ -74,7 +74,7 @@ describe('', () => { const COMPONENT_TEMPLATE_NAME = 'comp-1'; const COMPONENT_TEMPLATE_TO_EDIT = { name: COMPONENT_TEMPLATE_NAME, - isDeprecated: true, + deprecated: true, template: { settings: { number_of_shards: 1 }, }, diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx index 3f053b9aa3fd..60324997ab11 100644 --- a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx +++ b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_details/component_template_details.tsx @@ -122,7 +122,7 @@ export const ComponentTemplateDetailsFlyoutContent: React.FunctionComponent diff --git a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx index 220acb812121..aa5cc1637aab 100644 --- a/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx +++ b/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_edit/component_template_edit.tsx @@ -125,7 +125,7 @@ export const ComponentTemplateEdit: React.FunctionComponent - {componentTemplate?.isDeprecated && ( + {componentTemplate?.deprecated && ( <> action.auto_create_index, + true: true, + }} + /> ), testSubject: 'allowAutoCreateField', }, @@ -399,7 +405,14 @@ export const StepLogistics: React.FunctionComponent = React.memo( )} diff --git a/x-pack/plugins/index_management/public/application/components/template_form/steps/step_review.tsx b/x-pack/plugins/index_management/public/application/components/template_form/steps/step_review.tsx index 7d01966d207e..58072fd728c5 100644 --- a/x-pack/plugins/index_management/public/application/components/template_form/steps/step_review.tsx +++ b/x-pack/plugins/index_management/public/application/components/template_form/steps/step_review.tsx @@ -22,6 +22,7 @@ import { EuiCodeBlock, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import { allowAutoCreateRadioIds } from '../../../../../common/constants'; import { serializers } from '../../../../shared_imports'; import { serializeLegacyTemplate, serializeTemplate } from '../../../../../common/lib'; @@ -192,19 +193,30 @@ export const StepReview: React.FunctionComponent = React.memo( {/* Allow auto create */} - {isLegacy !== true && ( - <> - - - - - {getDescriptionText(allowAutoCreate)} - - - )} + {isLegacy !== true && + allowAutoCreate !== allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION && ( + <> + + + + + {allowAutoCreate === allowAutoCreateRadioIds.TRUE_RADIO_OPTION ? ( + + ) : ( + + )} + + + )} {/* components */} {isLegacy !== true && ( diff --git a/x-pack/plugins/index_management/public/application/components/template_form/template_form.tsx b/x-pack/plugins/index_management/public/application/components/template_form/template_form.tsx index 4eab54356eab..be1fdbaa4731 100644 --- a/x-pack/plugins/index_management/public/application/components/template_form/template_form.tsx +++ b/x-pack/plugins/index_management/public/application/components/template_form/template_form.tsx @@ -11,6 +11,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiSpacer, EuiButton, EuiPageHeader } from '@elastic/eui'; import { ScopedHistory } from '@kbn/core/public'; +import { allowAutoCreateRadioIds } from '../../../../common/constants'; import { TemplateDeserialized } from '../../../../common'; import { serializers, Forms, GlobalFlyout } from '../../../shared_imports'; import { @@ -123,6 +124,7 @@ export const TemplateForm = ({ hasDatastream: false, isLegacy, }, + allowAutoCreate: allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION, }; const { @@ -206,6 +208,7 @@ export const TemplateForm = ({ const outputTemplate = { ...wizardData.logistics, _kbnMeta: initialTemplate._kbnMeta, + deprecated: initialTemplate.deprecated, composedOf: wizardData.components, template: { settings: wizardData.settings, diff --git a/x-pack/plugins/index_management/public/application/components/template_form/template_form_schemas.tsx b/x-pack/plugins/index_management/public/application/components/template_form/template_form_schemas.tsx index 383b60c36508..dec31faad794 100644 --- a/x-pack/plugins/index_management/public/application/components/template_form/template_form_schemas.tsx +++ b/x-pack/plugins/index_management/public/application/components/template_form/template_form_schemas.tsx @@ -20,6 +20,7 @@ import { } from '../../../shared_imports'; import { + allowAutoCreateRadioIds, INVALID_INDEX_PATTERN_CHARS, INVALID_TEMPLATE_NAME_CHARS, } from '../../../../common/constants'; @@ -238,11 +239,11 @@ export const schemas: Record = { }, allowAutoCreate: { - type: FIELD_TYPES.TOGGLE, + type: FIELD_TYPES.RADIO_GROUP, label: i18n.translate('xpack.idxMgmt.templateForm.stepLogistics.fieldAllowAutoCreateLabel', { - defaultMessage: 'Allow auto create (optional)', + defaultMessage: 'Allow auto create', }), - defaultValue: false, + defaultValue: allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION, }, _meta: { label: i18n.translate('xpack.idxMgmt.templateForm.stepLogistics.metaFieldEditorLabel', { diff --git a/x-pack/plugins/index_management/public/application/sections/home/template_list/template_details/tabs/tab_summary.tsx b/x-pack/plugins/index_management/public/application/sections/home/template_list/template_details/tabs/tab_summary.tsx index 492c6f426acd..3f451217f841 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/template_list/template_details/tabs/tab_summary.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/template_list/template_details/tabs/tab_summary.tsx @@ -25,6 +25,7 @@ import { getLifecycleValue } from '../../../../../lib/data_streams'; import { TemplateDeserialized } from '../../../../../../../common'; import { ILM_PAGES_POLICY_EDIT } from '../../../../../constants'; import { useIlmLocator } from '../../../../../services/use_ilm_locator'; +import { allowAutoCreateRadioIds } from '../../../../../../../common/constants'; interface Props { templateDetails: TemplateDeserialized; @@ -216,19 +217,22 @@ export const TabSummary: React.FunctionComponent = ({ templateDetails }) )} {/* Allow auto create */} - {isLegacy !== true && ( - <> - - - - - {allowAutoCreate ? i18nTexts.yes : i18nTexts.no} - - - )} + {isLegacy !== true && + allowAutoCreate !== allowAutoCreateRadioIds.NO_OVERWRITE_RADIO_OPTION && ( + <> + + + + + {allowAutoCreate === allowAutoCreateRadioIds.TRUE_RADIO_OPTION + ? i18nTexts.yes + : i18nTexts.no} + + + )} diff --git a/x-pack/plugins/index_management/public/shared_imports.ts b/x-pack/plugins/index_management/public/shared_imports.ts index 3630cb7758e6..9bec64d46b21 100644 --- a/x-pack/plugins/index_management/public/shared_imports.ts +++ b/x-pack/plugins/index_management/public/shared_imports.ts @@ -67,6 +67,7 @@ export { NumericField, JsonEditorField, ComboBoxField, + RadioGroupField, } from '@kbn/es-ui-shared-plugin/static/forms/components'; export { isJSON } from '@kbn/es-ui-shared-plugin/static/validators/string'; diff --git a/x-pack/plugins/index_management/server/routes/api/component_templates/register_update_route.ts b/x-pack/plugins/index_management/server/routes/api/component_templates/register_update_route.ts index 1a9e642cd934..65d939ef5f88 100644 --- a/x-pack/plugins/index_management/server/routes/api/component_templates/register_update_route.ts +++ b/x-pack/plugins/index_management/server/routes/api/component_templates/register_update_route.ts @@ -31,7 +31,7 @@ export const registerUpdateRoute = ({ async (context, request, response) => { const { client } = (await context.core).elasticsearch; const { name } = request.params; - const { template, version, _meta } = request.body; + const { template, version, _meta, deprecated } = request.body; try { // Verify component exists; ES will throw 404 if not @@ -43,6 +43,8 @@ export const registerUpdateRoute = ({ template: template as estypes.IndicesIndexState, version, _meta, + // @ts-expect-error deprecated property is not yet part of the API types + deprecated, }, }); diff --git a/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts b/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts index 586e9db91102..58d593d54345 100644 --- a/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts +++ b/x-pack/plugins/index_management/server/routes/api/component_templates/schema_validation.ts @@ -26,4 +26,5 @@ export const componentTemplateSchema = schema.object({ usedBy: schema.arrayOf(schema.string()), isManaged: schema.boolean(), }), + deprecated: schema.maybe(schema.boolean()), }); diff --git a/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts b/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts index 1f5c5e2a3b82..782277d3abc0 100644 --- a/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts +++ b/x-pack/plugins/index_management/server/routes/api/templates/validate_schemas.ts @@ -13,7 +13,7 @@ export const templateSchema = schema.object({ version: schema.maybe(schema.number()), order: schema.maybe(schema.number()), priority: schema.maybe(schema.number()), - allowAutoCreate: schema.maybe(schema.boolean()), + allowAutoCreate: schema.string(), template: schema.maybe( schema.object({ settings: schema.maybe(schema.object({}, { unknowns: 'allow' })), @@ -49,4 +49,5 @@ export const templateSchema = schema.object({ hasDatastream: schema.maybe(schema.boolean()), isLegacy: schema.maybe(schema.boolean()), }), + deprecated: schema.maybe(schema.boolean()), }); diff --git a/x-pack/plugins/index_management/test/fixtures/template.ts b/x-pack/plugins/index_management/test/fixtures/template.ts index f7db386095b0..ca7f625d61bb 100644 --- a/x-pack/plugins/index_management/test/fixtures/template.ts +++ b/x-pack/plugins/index_management/test/fixtures/template.ts @@ -22,7 +22,7 @@ export const getComposableTemplate = ({ hasDatastream = false, isLegacy = false, type = 'default', - allowAutoCreate = false, + allowAutoCreate = 'NO_OVERWRITE', composedOf = [], }: Partial< TemplateDeserialized & { @@ -70,7 +70,7 @@ export const getTemplate = ({ hasDatastream = false, isLegacy = false, type = 'default', - allowAutoCreate = false, + allowAutoCreate = 'NO_OVERWRITE', }: Partial< TemplateDeserialized & { isLegacy?: boolean; diff --git a/x-pack/plugins/lens/public/app_plugin/save_modal.tsx b/x-pack/plugins/lens/public/app_plugin/save_modal.tsx index 48dce06f08b4..cbab6d4e06a8 100644 --- a/x-pack/plugins/lens/public/app_plugin/save_modal.tsx +++ b/x-pack/plugins/lens/public/app_plugin/save_modal.tsx @@ -111,7 +111,7 @@ export const SaveModal = (props: Props) => { managed ? i18n.translate('xpack.lens.app.mustCopyOnSave', { defaultMessage: - 'This visualization is managed by Elastic. Changes here must be saved to a new visualization.', + 'Elastic manages this visualization. Save any changes to a new visualization.', }) : undefined } diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx index 06a118dc165c..26703a2eebbf 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/formula.test.tsx @@ -17,7 +17,7 @@ import { insertOrReplaceFormulaColumn } from './parse'; import type { FormBasedLayer } from '../../../types'; import { IndexPattern } from '../../../../../types'; import { TermsIndexPatternColumn } from '../terms'; -import { MovingAverageIndexPatternColumn } from '../calculations'; +import type { MovingAverageIndexPatternColumn } from '../calculations'; import { StaticValueIndexPatternColumn } from '../static_value'; import { getFilter } from '../helpers'; import { createOperationDefinitionMock } from './mocks/operation_mocks'; @@ -43,6 +43,7 @@ const operationDefinitionMap: Record = { terms: createOperationDefinitionMock('terms', {}, { scale: 'ordinal' }), sum: createOperationDefinitionMock('sum', { filterable: true }), last_value: createOperationDefinitionMock('last_value', { + input: 'field', getPossibleOperationForField: jest.fn(({ type }) => ({ scale: type === 'string' ? 'ordinal' : 'ratio', isBucketed: false, @@ -54,14 +55,14 @@ const operationDefinitionMap: Record = { filterable: true, canReduceTimeRange: true, }), - derivative: createOperationDefinitionMock('derivative', { input: 'fullReference' }), - moving_average: createOperationDefinitionMock('moving_average', { - // @ts-expect-error upgrade typescript v4.9.5 + derivative: createOperationDefinitionMock('derivative', { + input: 'fullReference', + }), + moving_average: createOperationDefinitionMock('moving_average', { input: 'fullReference', operationParams: [{ name: 'window', type: 'number', required: true }], filterable: true, getErrorMessage: jest.fn(() => ['mock error']), - // @ts-expect-error upgrade typescript v4.9.5 buildColumn: ({ referenceIds }, columnsParams) => ({ label: 'moving_average', dataType: 'number', @@ -74,7 +75,9 @@ const operationDefinitionMap: Record = { filter: getFilter(undefined, columnsParams), }), }), - cumulative_sum: createOperationDefinitionMock('cumulative_sum', { input: 'fullReference' }), + cumulative_sum: createOperationDefinitionMock('cumulative_sum', { + input: 'fullReference', + }), interval: createOperationDefinitionMock('interval', { input: 'managedReference', usedInMath: true, diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/mocks/operation_mocks.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/mocks/operation_mocks.ts index 74d3236aa17c..2e9c0acd4148 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/mocks/operation_mocks.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/formula/mocks/operation_mocks.ts @@ -21,14 +21,14 @@ type OperationByInputType = E { input: Input } >; -export function createOperationDefinitionMock( +export function createOperationDefinitionMock( operation: string, { input = 'field', getErrorMessage, buildColumn, ...params - }: Partial = {}, + }: Partial> = {}, { label = operation, dataType = 'number', @@ -81,13 +81,11 @@ export function createOperationDefinitionMock( return { buildColumn: buildColumn ?? - jest.fn(({ referenceIds }, columnParams: PartialColumnParams) => ({ + jest.fn(({ referenceIds }, columnParams: PartialColumnParams | undefined) => ({ references: referenceIds, filter: getFilter(undefined, columnParams), ...sharedColumnParams, })), - onFieldChange: jest.fn(), - toEsAggsFn: jest.fn(), getPossibleOperation: jest.fn(() => ({ scale: 'ratio', dataType: 'number', diff --git a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts index fd6b68c2bf65..c7f8ed1e6923 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts +++ b/x-pack/plugins/lens/public/datasources/form_based/operations/definitions/index.ts @@ -731,11 +731,13 @@ export type OperationType = string; * This is an operation definition of an unspecified column out of all possible * column types. */ -export type GenericOperationDefinition = - | OperationDefinition - | OperationDefinition - | OperationDefinition - | OperationDefinition; +export type GenericOperationDefinition< + ColumnType extends BaseIndexPatternColumn = BaseIndexPatternColumn +> = + | OperationDefinition + | OperationDefinition + | OperationDefinition + | OperationDefinition; /** * List of all available operation definitions diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx index 08fb71bc5979..119e5216488f 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.test.tsx @@ -241,6 +241,38 @@ describe('LayerPanel', () => { expect(screen.getByText('Requires field')).toBeInTheDocument(); }); + it('should not render the required warning when the chart is empty', async () => { + mockVisualization.getConfiguration.mockReturnValue({ + groups: [ + { + ...defaultGroup, + groupLabel: 'B', + groupId: 'b', + requiredMinDimensionCount: 1, + }, + ], + }); + + renderLayerPanel(); + expect(screen.queryByText('Requires field')).not.toBeInTheDocument(); + }); + + it('should render the required warning when the chart is empty but isInlineEditing', async () => { + mockVisualization.getConfiguration.mockReturnValue({ + groups: [ + { + ...defaultGroup, + groupLabel: 'B', + groupId: 'b', + requiredMinDimensionCount: 1, + }, + ], + }); + + renderLayerPanel({ setIsInlineFlyoutVisible: jest.fn() }); + expect(screen.queryByText('Requires field')).toBeInTheDocument(); + }); + it('should tell the user to remove the correct number of dimensions', async () => { mockVisualization.getConfiguration.mockReturnValue({ groups: [ diff --git a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx index 3c203cacff3b..6ed48175ef22 100644 --- a/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx +++ b/x-pack/plugins/lens/public/editor_frame_service/editor_frame/config_panel/layer_panel.tsx @@ -76,6 +76,8 @@ export function LayerPanel(props: LayerPanelProps) { shouldDisplayChartSwitch, } = props; + const isInlineEditing = Boolean(props?.setIsInlineFlyoutVisible); + const isSaveable = useLensSelector((state) => state.lens.isSaveable); const datasourceStates = useLensSelector(selectDatasourceStates); @@ -434,7 +436,7 @@ export function LayerPanel(props: LayerPanelProps) { .map((group, groupIndex) => { let errorText: string = ''; - if (!isEmptyLayer) { + if (!isEmptyLayer || isInlineEditing) { if ( group.requiredMinDimensionCount && group.requiredMinDimensionCount > group.accessors.length @@ -659,7 +661,7 @@ export function LayerPanel(props: LayerPanelProps) { handleClose={() => { setPanelSettingsOpen(false); }} - isInlineEditing={Boolean(props?.setIsInlineFlyoutVisible)} + isInlineEditing={isInlineEditing} >
@@ -726,7 +728,7 @@ export function LayerPanel(props: LayerPanelProps) { isOpen={isDimensionPanelOpen} isFullscreen={isFullscreen} label={openColumnGroup?.dimensionEditorGroupLabel ?? (openColumnGroup?.groupLabel || '')} - isInlineEditing={Boolean(props?.setIsInlineFlyoutVisible)} + isInlineEditing={isInlineEditing} handleClose={closeDimensionEditor} panel={ <> @@ -786,7 +788,7 @@ export function LayerPanel(props: LayerPanelProps) { addLayer: props.addLayer, removeLayer: props.onRemoveLayer, panelRef, - isInlineEditing: Boolean(props?.setIsInlineFlyoutVisible), + isInlineEditing, }} />
diff --git a/x-pack/plugins/lens/public/embeddable/index.ts b/x-pack/plugins/lens/public/embeddable/index.ts index 37bd92c53a9a..50ee0f582a2f 100644 --- a/x-pack/plugins/lens/public/embeddable/index.ts +++ b/x-pack/plugins/lens/public/embeddable/index.ts @@ -7,4 +7,4 @@ export * from './embeddable'; -export { type HasLensConfig, apiHasLensConfig } from './interfaces/has_lens_config'; +export { type LensApi, isLensApi } from './interfaces/lens_api'; diff --git a/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts b/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts deleted file mode 100644 index 9e3f9c4b026e..000000000000 --- a/x-pack/plugins/lens/public/embeddable/interfaces/has_lens_config.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { type HasType, apiIsOfType } from '@kbn/presentation-publishing'; -import { LensSavedObjectAttributes } from '../embeddable'; - -export type HasLensConfig = HasType<'lens'> & { - getSavedVis: () => Readonly; -}; - -export const apiHasLensConfig = (api: unknown): api is HasLensConfig => { - return Boolean( - api && apiIsOfType(api, 'lens') && typeof (api as HasLensConfig).getSavedVis === 'function' - ); -}; diff --git a/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts b/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts new file mode 100644 index 000000000000..32e1ac52085a --- /dev/null +++ b/x-pack/plugins/lens/public/embeddable/interfaces/lens_api.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + HasParentApi, + HasType, + PublishesLocalUnifiedSearch, + PublishesPanelTitle, +} from '@kbn/presentation-publishing'; +import { + apiIsOfType, + apiPublishesLocalUnifiedSearch, + apiPublishesPanelTitle, +} from '@kbn/presentation-publishing'; +import { LensSavedObjectAttributes } from '../embeddable'; + +export type HasLensConfig = HasType<'lens'> & { + getSavedVis: () => Readonly; +}; + +export type LensApi = HasLensConfig & + PublishesPanelTitle & + PublishesLocalUnifiedSearch & + Partial>; + +export const isLensApi = (api: unknown): api is LensApi => { + return Boolean( + api && + apiIsOfType(api, 'lens') && + typeof (api as HasLensConfig).getSavedVis === 'function' && + apiPublishesPanelTitle(api) && + apiPublishesLocalUnifiedSearch(api) + ); +}; diff --git a/x-pack/plugins/lens/public/index.ts b/x-pack/plugins/lens/public/index.ts index 2bf09422986e..0088e434cb72 100644 --- a/x-pack/plugins/lens/public/index.ts +++ b/x-pack/plugins/lens/public/index.ts @@ -7,7 +7,7 @@ import { LensPlugin } from './plugin'; -export { apiHasLensConfig } from './embeddable/interfaces/has_lens_config'; +export { isLensApi } from './embeddable/interfaces/lens_api'; export type { EmbeddableComponentProps, EmbeddableComponent, @@ -110,7 +110,7 @@ export type { export type { InlineEditLensEmbeddableContext } from './trigger_actions/open_lens_config/in_app_embeddable_edit/types'; export type { - HasLensConfig, + LensApi, LensEmbeddableInput, LensSavedObjectAttributes, Embeddable, diff --git a/x-pack/plugins/maps/public/embeddable/map_api.ts b/x-pack/plugins/maps/public/embeddable/map_api.ts new file mode 100644 index 000000000000..171816289a8a --- /dev/null +++ b/x-pack/plugins/maps/public/embeddable/map_api.ts @@ -0,0 +1,37 @@ +/* + * Copyright 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 { + HasParentApi, + HasType, + PublishesDataViews, + PublishesPanelTitle, + PublishesLocalUnifiedSearch, +} from '@kbn/presentation-publishing'; +import { + apiIsOfType, + apiPublishesLocalUnifiedSearch, + apiPublishesPanelTitle, +} from '@kbn/presentation-publishing'; +import type { ILayer } from '../classes/layers/layer'; + +export type MapApi = HasType<'map'> & { + getLayerList: () => ILayer[]; +} & PublishesDataViews & + PublishesPanelTitle & + PublishesLocalUnifiedSearch & + Partial>; + +export const isMapApi = (api: unknown): api is MapApi => { + return Boolean( + api && + apiIsOfType(api, 'map') && + typeof (api as MapApi).getLayerList === 'function' && + apiPublishesPanelTitle(api) && + apiPublishesLocalUnifiedSearch(api) + ); +}; diff --git a/x-pack/plugins/maps/public/index.ts b/x-pack/plugins/maps/public/index.ts index 72806e7579dc..d0281537e7a0 100644 --- a/x-pack/plugins/maps/public/index.ts +++ b/x-pack/plugins/maps/public/index.ts @@ -28,6 +28,7 @@ export type { export type { MapsSetupApi, MapsStartApi } from './api'; export type { MapEmbeddable, MapEmbeddableInput, MapEmbeddableOutput } from './embeddable'; +export { type MapApi, isMapApi } from './embeddable/map_api'; export type { EMSTermJoinConfig, SampleValuesConfig } from './ems_autosuggest'; diff --git a/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx b/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx index c40157fbbe68..e6d317b5aa1e 100644 --- a/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx +++ b/x-pack/plugins/maps/public/routes/map_page/map_app/map_app.tsx @@ -492,8 +492,7 @@ export class MapApp extends React.Component { ? [ getManagedContentBadge( i18n.translate('xpack.maps.mapController.managedMapDescriptionTooltip', { - defaultMessage: - 'This map is managed by Elastic. Changes here must be saved to a new map.', + defaultMessage: 'Elastic manages this map. Save any changes to a new map.', }) ), ] diff --git a/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx b/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx index cb55d0b71f89..0aabdf877cd4 100644 --- a/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx +++ b/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx @@ -243,8 +243,7 @@ export function getTopNavConfig({ mustCopyOnSaveMessage={ savedMap.isManaged() ? i18n.translate('xpack.maps.topNav.mustCopyOnSaveMessage', { - defaultMessage: - 'This map is managed by Elastic. Changes here must be saved to a new map.', + defaultMessage: 'Elastic manages this map. Save any changes to a new map.', }) : undefined } diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts index bd31feb04f00..520ed2e1cc92 100644 --- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts +++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/is_compatible.ts @@ -7,7 +7,7 @@ import { apiIsOfType } from '@kbn/presentation-publishing'; import { apiHasVisualizeConfig } from '@kbn/visualizations-plugin/public'; -import { apiHasLensConfig } from '@kbn/lens-plugin/public'; +import { isLensApi } from '@kbn/lens-plugin/public'; import { MAP_SAVED_OBJECT_TYPE } from '../../../common/constants'; import { isLegacyMapApi } from '../../legacy_visualizations/is_legacy_map'; import { mapEmbeddablesSingleton } from '../../embeddable/map_embeddables_singleton'; @@ -19,7 +19,7 @@ export function isCompatible(api: SynchronizeMovementActionApi) { } return ( apiIsOfType(api, MAP_SAVED_OBJECT_TYPE) || - (apiHasLensConfig(api) && api.getSavedVis()?.visualizationType === 'lnsChoropleth') || + (isLensApi(api) && api.getSavedVis()?.visualizationType === 'lnsChoropleth') || (apiHasVisualizeConfig(api) && isLegacyMapApi(api)) ); } diff --git a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts index 4b9e48e19c2d..f171e39a2ad2 100644 --- a/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts +++ b/x-pack/plugins/maps/public/trigger_actions/synchronize_movement/types.ts @@ -6,9 +6,9 @@ */ import type { HasType } from '@kbn/presentation-publishing'; -import type { HasLensConfig } from '@kbn/lens-plugin/public'; +import type { LensApi } from '@kbn/lens-plugin/public'; import type { HasVisualizeConfig } from '@kbn/visualizations-plugin/public'; export type SynchronizeMovementActionApi = | HasType<'map' | 'visualization' | 'lens'> - | Partial; + | Partial; diff --git a/x-pack/plugins/ml/common/constants/jobs_list.ts b/x-pack/plugins/ml/common/constants/jobs_list.ts index 466717789062..76cb0d83c792 100644 --- a/x-pack/plugins/ml/common/constants/jobs_list.ts +++ b/x-pack/plugins/ml/common/constants/jobs_list.ts @@ -7,6 +7,8 @@ export const DEFAULT_REFRESH_INTERVAL_MS = 30000; export const MINIMUM_REFRESH_INTERVAL_MS = 1000; -export const DELETING_JOBS_REFRESH_INTERVAL_MS = 2000; +export const BLOCKED_JOBS_REFRESH_INTERVAL_MS = 2000; +export const BLOCKED_JOBS_REFRESH_INTERVAL_SLOW_MS = 120000; // 2mins +export const BLOCKED_JOBS_REFRESH_THRESHOLD_MS = 60000; // 1min export const RESETTING_JOBS_REFRESH_INTERVAL_MS = 1000; export const PROGRESS_JOBS_REFRESH_INTERVAL_MS = 2000; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx index 3ff17c8bd61a..1626a8d3ec66 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/delete_job_modal/delete_job_modal.tsx @@ -24,7 +24,7 @@ import { import { i18n } from '@kbn/i18n'; import { deleteJobs } from '../utils'; -import { DELETING_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; +import { BLOCKED_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; import { DeleteSpaceAwareItemCheckModal } from '../../../../components/delete_space_aware_item_check_modal'; import type { MlSummaryJob } from '../../../../../../common/types/anomaly_detection_jobs'; import { isManagedJob } from '../../../jobs_utils'; @@ -91,7 +91,7 @@ export const DeleteJobModal: FC = ({ setShowFunction, unsetShowFunction, setTimeout(() => { closeModal(); refreshJobs(); - }, DELETING_JOBS_REFRESH_INTERVAL_MS); + }, BLOCKED_JOBS_REFRESH_INTERVAL_MS); }, [jobIds, deleteUserAnnotations, deleteAlertingRules, closeModal, refreshJobs]); if (modalVisible === false || jobIds.length === 0) { diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js index 97d32ebe0dc6..40df5bd90915 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/jobs_list_view/jobs_list_view.js @@ -26,7 +26,11 @@ import { JobsAwaitingNodeWarning } from '../../../../components/jobs_awaiting_no import { SavedObjectsWarning } from '../../../../components/saved_objects_warning'; import { UpgradeWarning } from '../../../../components/upgrade'; -import { DELETING_JOBS_REFRESH_INTERVAL_MS } from '../../../../../../common/constants/jobs_list'; +import { + BLOCKED_JOBS_REFRESH_INTERVAL_MS, + BLOCKED_JOBS_REFRESH_INTERVAL_SLOW_MS, + BLOCKED_JOBS_REFRESH_THRESHOLD_MS, +} from '../../../../../../common/constants/jobs_list'; import { JobListMlAnomalyAlertFlyout } from '../../../../../alerting/ml_alerting_flyout'; import { StopDatafeedsConfirmModal } from '../confirm_modals/stop_datafeeds_confirm_modal'; import { CloseJobsConfirmModal } from '../confirm_modals/close_jobs_confirm_modal'; @@ -49,6 +53,7 @@ export class JobsListView extends Component { itemIdToExpandedRowMap: {}, filterClauses: [], blockingJobIds: [], + blockingJobsFirstFoundMs: null, jobsAwaitingNodeCount: 0, }; @@ -350,14 +355,17 @@ export class JobsListView extends Component { }); this.isDoneRefreshing(); - if ( - blockingJobsRefreshTimeout === null && - jobsSummaryList.some((j) => j.blocked !== undefined) - ) { + if (jobsSummaryList.some((j) => j.blocked !== undefined)) { // if there are some jobs in a deleting state, start polling for // deleting jobs so we can update the jobs list once the // deleting tasks are over this.checkBlockingJobTasks(true); + if (this.state.blockingJobsFirstFoundMs === null) { + // keep a record of when the first blocked job was found + this.setState({ blockingJobsFirstFoundMs: Date.now() }); + } + } else { + this.setState({ blockingJobsFirstFoundMs: null }); } } catch (error) { console.error(error); @@ -366,7 +374,7 @@ export class JobsListView extends Component { } async checkBlockingJobTasks(forceRefresh = false) { - if (this._isMounted === false) { + if (this._isMounted === false || blockingJobsRefreshTimeout !== null) { return; } @@ -384,12 +392,22 @@ export class JobsListView extends Component { this.refreshJobSummaryList(); } - if (blockingJobIds.length > 0 && blockingJobsRefreshTimeout === null) { + if (this.state.blockingJobsFirstFoundMs !== null || blockingJobIds.length > 0) { blockingJobsRefreshTimeout = setTimeout(() => { blockingJobsRefreshTimeout = null; this.checkBlockingJobTasks(); - }, DELETING_JOBS_REFRESH_INTERVAL_MS); + }, this.getBlockedJobsRefreshInterval()); + } + } + + getBlockedJobsRefreshInterval() { + const runningTimeMs = Date.now() - this.state.blockingJobsFirstFoundMs; + if (runningTimeMs > BLOCKED_JOBS_REFRESH_THRESHOLD_MS) { + // if the jobs have been in a blocked state for more than a minute + // increase the polling interval + return BLOCKED_JOBS_REFRESH_INTERVAL_SLOW_MS; } + return BLOCKED_JOBS_REFRESH_INTERVAL_MS; } renderJobsListComponents() { diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts index 37e7eb83d572..60fa45bfae44 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/index.ts @@ -5,5 +5,5 @@ * 2.0. */ -export { QuickJobCreatorBase, isLensEmbeddable, isMapEmbeddable } from './quick_create_job_base'; +export { QuickJobCreatorBase } from './quick_create_job_base'; export type { CreateState } from './quick_create_job_base'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts index f3b986d35277..d6bfc450a4cf 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_dashboard/quick_create_job_base.ts @@ -11,11 +11,14 @@ import type { IUiSettingsClient } from '@kbn/core/public'; import type { TimefilterContract } from '@kbn/data-plugin/public'; import { firstValueFrom } from 'rxjs'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { DashboardLocatorParams, DashboardStart } from '@kbn/dashboard-plugin/public'; +import type { + DashboardAPI, + DashboardLocatorParams, + DashboardStart, +} from '@kbn/dashboard-plugin/public'; +import { getPanelTitle } from '@kbn/presentation-publishing'; import type { Filter, Query, DataViewBase } from '@kbn/es-query'; import { FilterStateStore } from '@kbn/es-query'; -import type { Embeddable } from '@kbn/lens-plugin/public'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; import type { ErrorType } from '@kbn/ml-error-utils'; import type { DataViewsContract } from '@kbn/data-views-plugin/public'; import type { MlApiServices } from '../../../services/ml_api_service'; @@ -25,16 +28,6 @@ import type { CREATED_BY_LABEL } from '../../../../../common/constants/new_job'; import { createQueries } from '../utils/new_job_utils'; import { createDatafeedId } from '../../../../../common/util/job_utils'; -export function isLensEmbeddable(arg: any): arg is Embeddable { - return arg.hasOwnProperty('type') && arg.type === 'lens'; -} - -export function isMapEmbeddable(arg: any): arg is MapEmbeddable { - return arg.hasOwnProperty('type') && arg.type === 'map'; -} - -export type Dashboard = Embeddable['parent']; - interface CreationState { success: boolean; error?: ErrorType; @@ -85,7 +78,7 @@ export class QuickJobCreatorBase { end: number | undefined; startJob: boolean; runInRealTime: boolean; - dashboard?: Dashboard; + dashboard?: DashboardAPI; }) { const datafeedId = createDatafeedId(jobId); const datafeed = { ...datafeedConfig, job_id: jobId, datafeed_id: datafeedId }; @@ -232,23 +225,14 @@ export class QuickJobCreatorBase { return mergedQueries; } - private async createDashboardLink(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) { - const dashboardTitle = dashboard?.getTitle(); - if (dashboardTitle === undefined || dashboardTitle === '') { - // embeddable may have not been in a dashboard - // and my not have been given a title as it is unsaved. - return null; - } - - const findDashboardsService = await this.dashboardService.findDashboardsService(); - // find the dashboard from the dashboard service as the dashboard passed in may not have the correct id - const foundDashboard = await findDashboardsService.findByTitle(dashboardTitle); - if (foundDashboard === undefined) { + private async createDashboardLink(dashboard: DashboardAPI, datafeedConfig: estypes.MlDatafeed) { + const savedObjectId = dashboard.savedObjectId?.value; + if (!savedObjectId) { return null; } const params: DashboardLocatorParams = { - dashboardId: foundDashboard.id, + dashboardId: savedObjectId, timeRange: { from: '$earliest$', to: '$latest$', @@ -270,13 +254,13 @@ export class QuickJobCreatorBase { const url = `${location.app}${location.path}`; const urlName = i18n.translate('xpack.ml.newJob.fromLens.createJob.namedUrlDashboard', { defaultMessage: 'Open {dashboardTitle}', - values: { dashboardTitle }, + values: { dashboardTitle: getPanelTitle(dashboard) ?? 'dashboard' }, }); return { url_name: urlName, url_value: url, time_range: 'auto' }; } - private async getCustomUrls(dashboard: Dashboard, datafeedConfig: estypes.MlDatafeed) { + private async getCustomUrls(dashboard: DashboardAPI, datafeedConfig: estypes.MlDatafeed) { const customUrls = await this.createDashboardLink(dashboard, datafeedConfig); return dashboard !== undefined && customUrls !== null ? { custom_urls: [customUrls] } : {}; } diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts index 25f4fc16c7f2..ccb24599a9c7 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/index.ts @@ -13,4 +13,5 @@ export { getJobsItemsFromEmbeddable, isCompatibleVisualizationType, redirectToADJobWizards, + getChartInfoFromVisualization, } from './utils'; diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts index 0860f8c9f4d8..88ad820c059f 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/quick_create_job.ts @@ -8,7 +8,6 @@ import { i18n } from '@kbn/i18n'; import type { ChartInfo, - Embeddable, LensPublicStart, LensSavedObjectAttributes, } from '@kbn/lens-plugin/public'; @@ -17,7 +16,7 @@ import type { TimefilterContract } from '@kbn/data-plugin/public'; import type { DataViewsContract } from '@kbn/data-views-plugin/public'; import type { Filter, Query } from '@kbn/es-query'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; - +import type { LensApi } from '@kbn/lens-plugin/public'; import type { JobCreatorType } from '../common/job_creator'; import { createEmptyJob, createEmptyDatafeed } from '../common/job_creator/util/default_configs'; import { stashJobForCloning } from '../common/job_creator/util/general'; @@ -51,7 +50,7 @@ export class QuickLensJobCreator extends QuickJobCreatorBase { public async createAndSaveJob( jobId: string, bucketSpan: string, - embeddable: Embeddable, + embeddable: LensApi, startJob: boolean, runInRealTime: boolean, layerIndex: number diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts index 88e66aab9193..e8d6d890a0a0 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/utils.ts @@ -7,18 +7,20 @@ import { i18n } from '@kbn/i18n'; import type { - Embeddable, LensPublicStart, DataType, ChartInfo, LensSavedObjectAttributes, } from '@kbn/lens-plugin/public'; +import type { Query } from '@kbn/es-query'; +import { apiIsOfType } from '@kbn/presentation-publishing'; import type { SerializableRecord } from '@kbn/utility-types'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import { layerTypes } from '@kbn/lens-plugin/public'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; import { ML_JOB_AGGREGATION } from '@kbn/ml-anomaly-utils'; - +import type { LensApi } from '@kbn/lens-plugin/public'; +import type { DashboardAPI } from '@kbn/dashboard-plugin/public'; import { ML_PAGES, ML_APP_LOCATOR } from '../../../../../common/constants/locator'; export const COMPATIBLE_SERIES_TYPES = [ @@ -43,7 +45,7 @@ export const COMPATIBLE_SPLIT_FIELD_TYPES: DataType[] = [ ]; export async function redirectToADJobWizards( - embeddable: Embeddable, + embeddable: LensApi, layerIndex: number, share: SharePluginStart, lens: LensPublicStart @@ -66,7 +68,7 @@ export async function redirectToADJobWizards( window.open(url, '_blank'); } -export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?: LensPublicStart) { +export async function getJobsItemsFromEmbeddable(embeddable: LensApi, lens?: LensPublicStart) { if (!lens) { throw Error( i18n.translate('xpack.ml.newJob.fromLens.createJob.error.lensNotFound', { @@ -75,9 +77,11 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?: ); } - const { filters, timeRange, ...input } = embeddable.getInput(); - const query = input.query === undefined ? { query: '', language: 'kuery' } : input.query; + const dashboardApi = apiIsOfType(embeddable.parentApi, 'dashboard') + ? (embeddable.parentApi as DashboardAPI) + : undefined; + const timeRange = embeddable.localTimeRange?.value ?? dashboardApi?.localTimeRange?.value; if (timeRange === undefined) { throw Error( i18n.translate('xpack.ml.newJob.fromLens.createJob.error.noTimeRange', { @@ -85,8 +89,6 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?: }) ); } - const { to, from } = timeRange; - const vis = embeddable.getSavedVis(); if (vis === undefined) { @@ -97,17 +99,14 @@ export async function getJobsItemsFromEmbeddable(embeddable: Embeddable, lens?: ); } - const chartInfo = await getChartInfoFromVisualization(lens, vis); - const dashboard = embeddable.parent?.type === 'dashboard' ? embeddable.parent : undefined; - return { vis, - chartInfo, - from, - to, - query, - filters, - dashboard, + chartInfo: await getChartInfoFromVisualization(lens, vis), + from: timeRange.from, + to: timeRange.to, + query: (dashboardApi?.localQuery?.value as Query) ?? { query: '', language: 'kuery' }, + filters: dashboardApi?.localFilters?.value ?? [], + dashboard: dashboardApi, }; } @@ -238,7 +237,7 @@ export function createDetectors( export async function getChartInfoFromVisualization( lens: LensPublicStart, vis: LensSavedObjectAttributes -) { +): Promise { const chartInfo = await (await (await lens.stateHelperApi()).chartInfo).getChartInfo(vis); if (!chartInfo) { throw new Error('Cannot create job, chart info is undefined'); diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts index 4552123184f5..3883558d7652 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_lens/visualization_extractor.ts @@ -5,12 +5,11 @@ * 2.0. */ -import type { Embeddable, LensPublicStart, ChartInfo } from '@kbn/lens-plugin/public'; +import type { LensPublicStart, ChartInfo } from '@kbn/lens-plugin/public'; import { layerTypes } from '@kbn/lens-plugin/public'; - import { i18n } from '@kbn/i18n'; - import type { ErrorType } from '@kbn/ml-error-utils'; +import type { LensApi } from '@kbn/lens-plugin/public'; import { JOB_TYPE } from '../../../../../common/constants/new_job'; import { getVisTypeFactory, @@ -39,7 +38,7 @@ export class VisualizationExtractor { constructor() {} public async getResultLayersFromEmbeddable( - embeddable: Embeddable, + embeddable: LensApi, lens: LensPublicStart ): Promise { const { chartInfo } = await getJobsItemsFromEmbeddable(embeddable, lens); diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts index dae30d13b877..cf4d4a35545a 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/quick_create_job.ts @@ -6,13 +6,12 @@ */ import { i18n } from '@kbn/i18n'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; import type { IUiSettingsClient } from '@kbn/core/public'; import type { TimefilterContract } from '@kbn/data-plugin/public'; import type { Filter, Query } from '@kbn/es-query'; import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; - +import type { MapApi } from '@kbn/maps-plugin/public'; import type { MlApiServices } from '../../../services/ml_api_service'; import { CREATED_BY_LABEL, @@ -63,7 +62,7 @@ export class QuickGeoJobCreator extends QuickJobCreatorBase { }: { jobId: string; bucketSpan: string; - embeddable: MapEmbeddable; + embeddable: MapApi; startJob: boolean; runInRealTime: boolean; dataViewId?: string; @@ -81,8 +80,8 @@ export class QuickGeoJobCreator extends QuickJobCreatorBase { } = await getJobsItemsFromEmbeddable(embeddable); // Map level stuff - const embeddableQuery = (await embeddable.getQuery()) ?? getDefaultQuery(); - const embeddableFilters = (await embeddable.getFilters()) ?? []; + const embeddableQuery = (embeddable.localQuery?.value as Query) ?? getDefaultQuery(); + const embeddableFilters = embeddable.localFilters?.value ?? []; if (dashboardQuery === undefined || dashboardFilters === undefined) { throw new Error('Cannot create job, query and filters are undefined'); diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts index 5a3985aa0dc3..5fe0c3bc0846 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/utils.ts @@ -7,12 +7,14 @@ import { i18n } from '@kbn/i18n'; import type { Query } from '@kbn/es-query'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; +import { apiIsOfType } from '@kbn/presentation-publishing'; import type { SharePluginStart } from '@kbn/share-plugin/public'; +import type { MapApi } from '@kbn/maps-plugin/public'; +import type { DashboardAPI } from '@kbn/dashboard-plugin/public'; import { ML_PAGES, ML_APP_LOCATOR } from '../../../../../common/constants/locator'; export async function redirectToGeoJobWizard( - embeddable: MapEmbeddable, + embeddable: MapApi, dataViewId: string, geoField: string, layerQuery: Query | null, @@ -20,8 +22,8 @@ export async function redirectToGeoJobWizard( share: SharePluginStart ) { const { query, filters, to, from } = await getJobsItemsFromEmbeddable(embeddable); - const embeddableQuery = await embeddable.getQuery(); - const embeddableFilters = await embeddable.getFilters(); + const embeddableQuery = embeddable.localQuery?.value; + const embeddableFilters = embeddable.localFilters?.value ?? []; const locator = share.url.locators.get(ML_APP_LOCATOR); const pageState = { @@ -43,21 +45,17 @@ export async function redirectToGeoJobWizard( window.open(url, '_blank'); } -export function isCompatibleMapVisualization(embeddable: MapEmbeddable) { - return embeddable.getLayerList().some((layer) => { - const geoField = layer.getGeoFieldNames().length ? layer.getGeoFieldNames()[0] : undefined; - const dataViewId = layer.getIndexPatternIds().length - ? layer.getIndexPatternIds()[0] - : undefined; - return geoField && dataViewId; +export function isCompatibleMapVisualization(api: MapApi) { + return api.getLayerList().some((layer) => { + return layer.getGeoFieldNames().length && layer.getIndexPatternIds().length; }); } -export async function getJobsItemsFromEmbeddable(embeddable: MapEmbeddable) { - // Get dashboard level query/filters - const { filters, timeRange, ...input } = embeddable.getInput(); - const query = input.query === undefined ? { query: '', language: 'kuery' } : input.query; - +export async function getJobsItemsFromEmbeddable(embeddable: MapApi) { + const dashboardApi = apiIsOfType(embeddable.parentApi, 'dashboard') + ? (embeddable.parentApi as DashboardAPI) + : undefined; + const timeRange = embeddable.localTimeRange?.value ?? dashboardApi?.localTimeRange?.value; if (timeRange === undefined) { throw Error( i18n.translate('xpack.ml.newJob.fromGeo.createJob.error.noTimeRange', { @@ -65,14 +63,11 @@ export async function getJobsItemsFromEmbeddable(embeddable: MapEmbeddable) { }) ); } - const { to, from } = timeRange; - const dashboard = embeddable.parent?.type === 'dashboard' ? embeddable.parent : undefined; - return { - from, - to, - query, - filters, - dashboard, + from: timeRange.from, + to: timeRange.to, + query: (dashboardApi?.localQuery?.value as Query) ?? { query: '', language: 'kuery' }, + filters: dashboardApi?.localFilters?.value ?? [], + dashboard: dashboardApi, }; } diff --git a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts index 26972a454ff8..ab319fab9f34 100644 --- a/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts +++ b/x-pack/plugins/ml/public/application/jobs/new_job/job_from_map/visualization_extractor.ts @@ -6,11 +6,11 @@ */ import { asyncForEach } from '@kbn/std'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; +import type { PublishesDataViews } from '@kbn/presentation-publishing'; +import { type MapApi } from '@kbn/maps-plugin/public'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/common'; import type { Query } from '@kbn/es-query'; -import type { DashboardAPI } from '@kbn/dashboard-plugin/public'; import { categoryFieldTypes } from '../../../../../common/util/fields_utils'; export interface LayerResult { @@ -26,9 +26,11 @@ export interface LayerResult { export class VisualizationExtractor { constructor() {} - public async getResultLayersFromEmbeddable(embeddable: MapEmbeddable): Promise { + public async getResultLayersFromEmbeddable( + embeddable: MapApi & Partial + ): Promise { const layers: LayerResult[] = []; - const dataViews: DataView[] = (embeddable.getRoot() as DashboardAPI)?.getAllDataViews() ?? []; + const dataViews: DataView[] = embeddable.dataViews?.value ?? []; // Keep track of geoFields for layers as they can be repeated const layerGeoFields: Record = {}; @@ -39,8 +41,8 @@ export class VisualizationExtractor { ? layer.getIndexPatternIds()[0] : undefined; const layerDisplayName = await layer.getDisplayName(); - const layerId = await layer.getId(); - const query = await layer.getQuery(); + const layerId = layer.getId(); + const query = layer.getQuery(); if (geoField && dataViewId && layerGeoFields[geoField] === undefined) { layerGeoFields[geoField] = true; diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx index 7a440794092b..df5048d7261a 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/aiops/flyout/create_job.tsx @@ -147,7 +147,6 @@ export const CreateJob: FC = ({ dataView, field, query, timeRange }) => { Promise; layer?: LayerResult; layerIndex: number; - embeddable: Embeddable | MapEmbeddable | undefined; timeRange: TimeRange | undefined; incomingCreateError?: { text: string; errorText: string }; outerFormComplete?: boolean; @@ -78,7 +73,6 @@ export const JobDetails: FC = ({ createADJob, layer, layerIndex, - embeddable, timeRange, incomingCreateError, outerFormComplete, @@ -112,7 +106,6 @@ export const JobDetails: FC = ({ const result = await createADJob({ jobId, bucketSpan, - embeddable, startJob, runInRealTime, }); diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx index e9705b85278f..8e0b4178b5a1 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/flyout.tsx @@ -7,7 +7,6 @@ import type { FC } from 'react'; import React, { useState, useEffect } from 'react'; -import type { Embeddable } from '@kbn/lens-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlyoutFooter, @@ -20,14 +19,15 @@ import { EuiSpacer, EuiText, } from '@elastic/eui'; - +import { getPanelTitle } from '@kbn/presentation-publishing'; +import type { LensApi } from '@kbn/lens-plugin/public'; import { Layer } from './layer'; import type { LayerResult } from '../../../../application/jobs/new_job/job_from_lens'; import { VisualizationExtractor } from '../../../../application/jobs/new_job/job_from_lens'; import { useMlFromLensKibanaContext } from '../../common/context'; interface Props { - embeddable: Embeddable; + embeddable: LensApi; onClose: () => void; } @@ -67,7 +67,7 @@ export const LensLayerSelectionFlyout: FC = ({ onClose, embeddable }) => diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx index 041abd7aaab5..3c9eefd47370 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/compatible_layer.tsx @@ -8,10 +8,8 @@ import type { FC } from 'react'; import React, { useMemo } from 'react'; // useCallback import { FormattedMessage } from '@kbn/i18n-react'; -import type { Embeddable } from '@kbn/lens-plugin/public'; - import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui'; - +import type { LensApi } from '@kbn/lens-plugin/public'; import { redirectToADJobWizards, QuickLensJobCreator, @@ -25,7 +23,7 @@ import { JobDetails } from '../../../common/job_details'; interface Props { layer: LayerResult; layerIndex: number; - embeddable: Embeddable; + embeddable: LensApi; } export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) => { @@ -58,17 +56,11 @@ export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) => redirectToADJobWizards(embeddable, layerIndex, share, lens); } - async function createADJob({ - jobId, - bucketSpan, - embeddable: lensEmbeddable, - startJob, - runInRealTime, - }: CreateADJobParams) { + async function createADJob({ jobId, bucketSpan, startJob, runInRealTime }: CreateADJobParams) { const result = await quickJobCreator.createAndSaveJob( jobId, bucketSpan, - lensEmbeddable as Embeddable, + embeddable, startJob, runInRealTime, layerIndex @@ -81,8 +73,7 @@ export const CompatibleLayer: FC = ({ layer, layerIndex, embeddable }) => diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx index 073a38383f74..03f862e7bf67 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/lens_vis_layer_selection_flyout/layer/layer.tsx @@ -7,7 +7,6 @@ import type { FC } from 'react'; import React from 'react'; -import type { Embeddable } from '@kbn/lens-plugin/public'; import { EuiFlexGroup, EuiFlexItem, @@ -17,6 +16,7 @@ import { EuiSplitPanel, EuiHorizontalRule, } from '@elastic/eui'; +import type { LensApi } from '@kbn/lens-plugin/public'; import type { LayerResult } from '../../../../../application/jobs/new_job/job_from_lens'; import { CompatibleLayer } from './compatible_layer'; import { IncompatibleLayer } from './incompatible_layer'; @@ -24,7 +24,7 @@ import { IncompatibleLayer } from './incompatible_layer'; interface Props { layer: LayerResult; layerIndex: number; - embeddable: Embeddable; + embeddable: LensApi; } export const Layer: FC = ({ layer, layerIndex, embeddable }) => { diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx index 4a0f87c48a08..949d0a318331 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/lens/show_flyout.tsx @@ -7,17 +7,17 @@ import type { FC } from 'react'; import React from 'react'; -import type { Embeddable } from '@kbn/lens-plugin/public'; import type { CoreStart } from '@kbn/core/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; +import type { LensApi } from '@kbn/lens-plugin/public'; import { createFlyout, type FlyoutComponentProps } from '../common/create_flyout'; import { LensLayerSelectionFlyout } from './lens_vis_layer_selection_flyout'; export async function showLensVisToADJobFlyout( - embeddable: Embeddable, + embeddable: LensApi, coreStart: CoreStart, share: SharePluginStart, data: DataPublicPluginStart, diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx index 80e43a0f682b..a10ed011f7e8 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/flyout.tsx @@ -7,7 +7,6 @@ import type { FC } from 'react'; import React, { useEffect, useState } from 'react'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlyoutFooter, @@ -21,12 +20,14 @@ import { EuiTitle, useEuiTheme, } from '@elastic/eui'; +import { getPanelTitle } from '@kbn/presentation-publishing'; +import type { MapApi } from '@kbn/maps-plugin/public'; import { Layer } from './map_vis_layer_selection_flyout/layer'; import type { LayerResult } from '../../../application/jobs/new_job/job_from_map'; import { VisualizationExtractor } from '../../../application/jobs/new_job/job_from_map'; interface Props { - embeddable: MapEmbeddable; + embeddable: MapApi; onClose: () => void; } @@ -62,7 +63,7 @@ export const GeoJobFlyout: FC = ({ onClose, embeddable }) => { diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx index ba7216e80252..c5b8c69e72be 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/compatible_layer.tsx @@ -20,7 +20,7 @@ import { EuiText, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; +import type { MapApi } from '@kbn/maps-plugin/public'; import { type LayerResult, QuickGeoJobCreator, @@ -36,7 +36,7 @@ interface DropDownLabel { } interface Props { - embeddable: MapEmbeddable; + embeddable: MapApi; layer: LayerResult; layerIndex: number; } @@ -81,18 +81,12 @@ export const CompatibleLayer: FC = ({ embeddable, layer, layerIndex }) => }, [layer?.dataView?.id, embeddable, selectedSplitField]); const createGeoJob = useCallback( - async ({ - jobId, - bucketSpan, - embeddable: mapEmbeddable, - startJob, - runInRealTime, - }: CreateADJobParams) => { + async ({ jobId, bucketSpan, startJob, runInRealTime }: CreateADJobParams) => { try { const result = await quickJobCreator.createAndSaveGeoJob({ jobId, bucketSpan, - embeddable: mapEmbeddable as MapEmbeddable, + embeddable, startJob, runInRealTime, sourceDataView: layer.dataView, @@ -149,8 +143,7 @@ export const CompatibleLayer: FC = ({ embeddable, layer, layerIndex }) => layerIndex={layerIndex} createADJob={createGeoJob} createADJobInWizard={createGeoJobInWizard} - embeddable={embeddable} - timeRange={embeddable.getInput().timeRange} + timeRange={embeddable.localTimeRange?.value} incomingCreateError={createError} > <> diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx index 1d519cb739fc..3d3143824676 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/map_vis_layer_selection_flyout/layer/layer.tsx @@ -7,7 +7,6 @@ import type { FC } from 'react'; import React from 'react'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; import { EuiFlexGroup, EuiFlexItem, @@ -17,6 +16,7 @@ import { EuiSplitPanel, EuiHorizontalRule, } from '@elastic/eui'; +import type { MapApi } from '@kbn/maps-plugin/public'; import type { LayerResult } from '../../../../../application/jobs/new_job/job_from_map'; import { CompatibleLayer } from './compatible_layer'; import { IncompatibleLayer } from './incompatible_layer'; @@ -24,7 +24,7 @@ import { IncompatibleLayer } from './incompatible_layer'; interface Props { layer: LayerResult; layerIndex: number; - embeddable: MapEmbeddable; + embeddable: MapApi; } export const Layer: FC = ({ layer, layerIndex, embeddable }) => ( diff --git a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx index 3c29b5b4dd5b..0f98fd5a2977 100644 --- a/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/job_creation/map/show_flyout.tsx @@ -10,14 +10,13 @@ import React from 'react'; import type { CoreStart } from '@kbn/core/public'; import type { SharePluginStart } from '@kbn/share-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; - +import type { MapApi } from '@kbn/maps-plugin/public'; import { GeoJobFlyout } from './flyout'; import { createFlyout, type FlyoutComponentProps } from '../common/create_flyout'; export async function showMapVisToADJobFlyout( - embeddable: MapEmbeddable, + embeddable: MapApi, coreStart: CoreStart, share: SharePluginStart, data: DataPublicPluginStart, diff --git a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx index ce62db458746..e4ce56e8f5a5 100644 --- a/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/open_vis_in_ml_action.tsx @@ -6,17 +6,20 @@ */ import { i18n } from '@kbn/i18n'; -import type { Embeddable } from '@kbn/lens-plugin/public'; -import type { MapEmbeddable } from '@kbn/maps-plugin/public'; +import { type EmbeddableApiContext, apiHasType, apiIsOfType } from '@kbn/presentation-publishing'; import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; +import { isLensApi } from '@kbn/lens-plugin/public'; +import { isMapApi } from '@kbn/maps-plugin/public'; +import type { ActionApi } from './types'; import type { MlCoreSetup } from '../plugin'; -import { isLensEmbeddable, isMapEmbeddable } from '../application/jobs/new_job/job_from_dashboard'; export const CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION = 'createMLADJobAction'; +export const isApiCompatible = (api: unknown | null): api is ActionApi => apiHasType(api); + export function createVisToADJobAction( getStartServices: MlCoreSetup['getStartServices'] -): UiActionsActionDefinition<{ embeddable: Embeddable | MapEmbeddable }> { +): UiActionsActionDefinition { return { id: 'create-ml-ad-job-action', type: CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION, @@ -27,20 +30,20 @@ export function createVisToADJobAction( i18n.translate('xpack.ml.actions.createADJobFromLens', { defaultMessage: 'Create anomaly detection job', }), - async execute({ embeddable }) { + async execute({ embeddable }: EmbeddableApiContext) { if (!embeddable) { throw new Error('Not possible to execute an action without the embeddable context'); } try { - if (isLensEmbeddable(embeddable)) { + if (isLensApi(embeddable)) { const [{ showLensVisToADJobFlyout }, [coreStart, { share, data, lens, dashboard }]] = await Promise.all([import('../embeddables/job_creation/lens'), getStartServices()]); if (lens === undefined) { return; } await showLensVisToADJobFlyout(embeddable, coreStart, share, data, dashboard, lens); - } else if (isMapEmbeddable(embeddable)) { + } else if (isMapApi(embeddable)) { const [{ showMapVisToADJobFlyout }, [coreStart, { share, data, dashboard }]] = await Promise.all([import('../embeddables/job_creation/map'), getStartServices()]); await showMapVisToADJobFlyout(embeddable, coreStart, share, data, dashboard); @@ -49,19 +52,20 @@ export function createVisToADJobAction( return Promise.reject(); } }, - async isCompatible(context: { embeddable: Embeddable }) { - const embeddableType = context.embeddable.type; - if (embeddableType !== 'map') { - if (embeddableType !== 'lens' || !context.embeddable.getSavedVis()) { - return false; - } - } + async isCompatible({ embeddable }: EmbeddableApiContext) { + if ( + !isApiCompatible(embeddable) || + !(apiIsOfType(embeddable, 'lens') || apiIsOfType(embeddable, 'map')) + ) + return false; - const [{ getJobsItemsFromEmbeddable, isCompatibleVisualizationType }, [coreStart, { lens }]] = - await Promise.all([ - import('../application/jobs/new_job/job_from_lens'), - getStartServices(), - ]); + const [ + { getChartInfoFromVisualization, isCompatibleVisualizationType }, + [coreStart, { lens }], + ] = await Promise.all([ + import('../application/jobs/new_job/job_from_lens'), + getStartServices(), + ]); const { isCompatibleMapVisualization } = await import( '../application/jobs/new_job/job_from_map' ); @@ -74,13 +78,17 @@ export function createVisToADJobAction( } try { - if (embeddableType === 'lens' && lens) { - const { chartInfo } = await getJobsItemsFromEmbeddable(context.embeddable, lens); - return isCompatibleVisualizationType(chartInfo!); - } else if (isMapEmbeddable(context.embeddable)) { - return isCompatibleMapVisualization(context.embeddable); + if (isLensApi(embeddable) && lens) { + const vis = embeddable.getSavedVis(); + if (!vis) { + return false; + } + const chartInfo = await getChartInfoFromVisualization(lens, vis); + return isCompatibleVisualizationType(chartInfo); + } else if (isMapApi(embeddable)) { + return isCompatibleMapVisualization(embeddable); } - return true; + return false; } catch (error) { // eslint-disable-next-line no-console console.error('Error attempting to check for ML job compatibility', error); diff --git a/x-pack/plugins/ml/public/ui_actions/types.ts b/x-pack/plugins/ml/public/ui_actions/types.ts new file mode 100644 index 000000000000..24459c48bde2 --- /dev/null +++ b/x-pack/plugins/ml/public/ui_actions/types.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 { LensApi } from '@kbn/lens-plugin/public'; +import type { MapApi } from '@kbn/maps-plugin/public'; + +export type ActionApi = MapApi | LensApi; diff --git a/x-pack/plugins/ml/tsconfig.json b/x-pack/plugins/ml/tsconfig.json index 0f30e96a0be2..79391f2c156f 100644 --- a/x-pack/plugins/ml/tsconfig.json +++ b/x-pack/plugins/ml/tsconfig.json @@ -115,6 +115,7 @@ "@kbn/ml-creation-wizard-utils", "@kbn/deeplinks-management", "@kbn/code-editor", + "@kbn/presentation-publishing", "@kbn/core-elasticsearch-server", "@kbn/core-elasticsearch-client-server-mocks", ], diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts new file mode 100644 index 000000000000..39eab697bbbf --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/error_count.cy.ts @@ -0,0 +1,102 @@ +/* + * Copyright 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 { synthtrace } from '../../../synthtrace'; +import { generateData } from './generate_data'; + +function deleteAllRules() { + cy.log('Delete all rules'); + cy.request({ + log: false, + method: 'GET', + url: '/api/alerting/rules/_find', + auth: { user: 'editor', pass: 'changeme' }, + }).then(({ body }) => { + if (body.data.length > 0) { + cy.log(`Deleting rules`); + } + + body.data.map(({ id }: { id: string }) => { + cy.request({ + headers: { 'kbn-xsrf': 'true' }, + log: false, + method: 'DELETE', + url: `/api/alerting/rule/${id}`, + auth: { user: 'editor', pass: 'changeme' }, + }); + }); + }); +} + +describe('Alerts', () => { + beforeEach(() => { + deleteAllRules(); + }); + + after(() => { + deleteAllRules(); + }); + + before(() => { + const start = Date.now() - 1000 * 60 * 10; + const end = Date.now() + 1000 * 60 * 5; + + synthtrace.index( + generateData({ + from: new Date(start).getTime(), + to: new Date(end).getTime(), + }) + ); + }); + + after(() => { + synthtrace.clean(); + }); + + describe('when rendered from Service view in APM app', () => { + const ruleName = 'Error count threshold'; + const confirmModalButtonSelector = + '.euiModal button[data-test-subj=confirmModalConfirmButton]'; + + it('alerts table is rendered correctly', () => { + cy.loginAsEditorUser(); + + // Create a rule in APM + cy.visitKibana('/app/apm/services'); + cy.contains('Alerts and rules').click(); + cy.contains('Create error count rule').click(); + + // Check for the existence of these elements to make sure the form + // has loaded. + cy.contains('for the last'); + cy.contains('Actions'); + cy.contains('Save').should('not.be.disabled'); + + // Update "Is above" to "0" + cy.contains('is above').click(); + cy.getByTestSubj('apmIsAboveFieldFieldNumber').clear(); + cy.contains('is above 0 errors'); + + // Save, with no actions + cy.contains('Save').click(); + cy.get(confirmModalButtonSelector).click(); + + cy.contains(`Created rule "${ruleName}`); + + // Check that the "Alerts" table is loaded + cy.wait(2000); + cy.visitKibana('/app/apm/services/opbeans-java/alerts'); + cy.getByTestSubj('o11yGetRenderCellValueLink') + .first() + .click({ force: true }); + cy.getByTestSubj('alertsFlyout').should('exist'); + cy.contains('Overview'); + cy.contains('Status'); + cy.contains('Active'); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts new file mode 100644 index 000000000000..e50e334a628d --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/alerts/generate_data.ts @@ -0,0 +1,50 @@ +/* + * Copyright 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 { apm, timerange } from '@kbn/apm-synthtrace-client'; + +export function generateData({ from, to }: { from: number; to: number }) { + const range = timerange(from, to); + + const opbeansJava = apm + .service({ + name: 'opbeans-java', + environment: 'production', + agentName: 'java', + }) + .instance('opbeans-java-prod-1') + .podId('opbeans-java-prod-1-pod'); + + const opbeansNode = apm + .service({ + name: 'opbeans-node', + environment: 'production', + agentName: 'nodejs', + }) + .instance('opbeans-node-prod-1'); + + return range + .interval('2m') + .rate(1) + .generator((timestamp, index) => [ + opbeansJava + .transaction({ transactionName: 'GET /apple 🍎 ' }) + .timestamp(timestamp) + .duration(1000) + .success() + .errors( + opbeansJava + .error({ message: `Error ${index}`, type: `exception ${index}` }) + .timestamp(timestamp) + ), + opbeansNode + .transaction({ transactionName: 'GET /banana 🍌' }) + .timestamp(timestamp) + .duration(500) + .success(), + ]); +} diff --git a/x-pack/plugins/observability_solution/apm/kibana.jsonc b/x-pack/plugins/observability_solution/apm/kibana.jsonc index 56d7c094ee26..c46afe508c45 100644 --- a/x-pack/plugins/observability_solution/apm/kibana.jsonc +++ b/x-pack/plugins/observability_solution/apm/kibana.jsonc @@ -48,7 +48,8 @@ "usageCollection", "customIntegrations", // Move this to requiredPlugins after completely migrating from the Tutorials Home App "licenseManagement", - "profilingDataAccess" + "profilingDataAccess", + "cases" ], "requiredBundles": [ "fleet", @@ -56,8 +57,7 @@ "kibanaUtils", "ml", "observability", - "maps", - "observabilityAIAssistant" + "maps" ] } } diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx index ad80482d70ff..0296f8dc53d2 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx @@ -44,6 +44,9 @@ export function AlertDetailsAppSection({ timeZone, setAlertSummaryFields, }: AlertDetailsAppSectionProps) { + const { services } = useKibana(); + createCallApmApi(services as CoreStart); + const alertRuleTypeId = alert.fields[ALERT_RULE_TYPE_ID]; const alertEvaluationValue = alert.fields[ALERT_EVALUATION_VALUE]; const alertEvaluationThreshold = alert.fields[ALERT_EVALUATION_THRESHOLD]; @@ -105,12 +108,6 @@ export function AlertDetailsAppSection({ setAlertSummaryFields, ]); - const { services } = useKibana(); - - useEffect(() => { - createCallApmApi(services as CoreStart); - }, [services]); - const params = rule.params; const latencyAggregationType = getAggsTypeFromRule(params.aggregationType); const timeRange = getPaddedAlertTimeRange( diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx index 0e1f2ddeb974..a4cd0d5523e5 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx @@ -147,7 +147,7 @@ function LatencyChart({ alertStart={alert.start} color={euiTheme.colors.danger} id={'alertActiveRect'} - key={'alertThresholdRect'} + key={'alertActiveRect'} />, (() => { - const now = new Date().toISOString(); - const serviceName = error.service.name; const languageName = error.service.language?.name ?? ''; const runtimeName = error.service.runtime?.name ?? ''; const runtimeVersion = error.service.runtime?.version ?? ''; const transactionName = transaction?.transaction.name ?? ''; - return [ - { - '@timestamp': now, - message: { - role: MessageRole.User, - content: `I'm an SRE. I am looking at an exception and trying to understand what it means. - -Your task is to describe what the error means and what it could be caused by. - -The error occurred on a service called ${serviceName}, which is a ${runtimeName} service written in ${languageName}. The -runtime version is ${runtimeVersion}. - -The request it occurred for is called ${transactionName}. + return getContextualInsightMessages({ + message: `I'm looking at an exception and trying to understand what it means`, + instructions: `I'm an SRE. I am looking at an exception and trying to understand what it means. -${ - logStacktrace - ? `The log stacktrace: -${logStacktrace}` - : '' -} - -${ - exceptionStacktrace - ? `The exception stacktrace: -${exceptionStacktrace}` - : '' -} -`, - }, - }, - ]; - }, [error, transaction, logStacktrace, exceptionStacktrace]); + Your task is to describe what the error means and what it could be caused by. + + The error occurred on a service called ${serviceName}, which is a ${runtimeName} service written in ${languageName}. The + runtime version is ${runtimeVersion}. + + The request it occurred for is called ${transactionName}. + + ${ + logStacktrace + ? `The log stacktrace: + ${logStacktrace}` + : '' + } + + ${ + exceptionStacktrace + ? `The exception stacktrace: + ${exceptionStacktrace}` + : '' + }`, + }); + }, [ + error, + transaction, + logStacktrace, + exceptionStacktrace, + getContextualInsightMessages, + ]); return ObservabilityAIAssistantContextualInsight && messages ? ( <> diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/index.tsx index 9e8a0e2baf46..3c2bb140235d 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/index.tsx @@ -6,11 +6,6 @@ */ import { - EuiButton, - EuiCallOut, - EuiFlexGroup, - EuiFlexItem, - EuiLink, EuiLoadingSpinner, EuiSpacer, EuiTabbedContent, @@ -18,27 +13,29 @@ import { } from '@elastic/eui'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; import { EmbeddableProfilingSearchBar, ProfilingEmptyState, } from '@kbn/observability-shared-plugin/public'; import React, { useMemo } from 'react'; import { useHistory } from 'react-router-dom'; +import { isJavaAgentName as getIsJavaAgentName } from '../../../../common/agent_name'; import { ApmDocumentType } from '../../../../common/document_type'; +import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context'; import { useApmParams } from '../../../hooks/use_apm_params'; -import { useLocalStorage } from '../../../hooks/use_local_storage'; import { usePreferredDataSourceAndBucketSize } from '../../../hooks/use_preferred_data_source_and_bucket_size'; import { useProfilingPlugin } from '../../../hooks/use_profiling_plugin'; import { useTimeRange } from '../../../hooks/use_time_range'; -import { ApmPluginStartDeps } from '../../../plugin'; import { push } from '../../shared/links/url_helpers'; -import { ProfilingFlamegraph } from './profiling_flamegraph'; -import { ProfilingTopNFunctions } from './profiling_top_functions'; +import { ProfilingFlamegraph } from '../../shared/profiling/flamegraph'; +import { ProfilingTopNFunctions } from '../../shared/profiling/top_functions'; +import { SearchBar } from '../../shared/search_bar/search_bar'; +import { ProfilingHostsCallout } from './profiling_hosts_callout'; +import { ProfilingHostsFlamegraph } from './profiling_hosts_flamegraph'; +import { ProfilingHostsTopNFunctions } from './profiling_hosts_top_functions'; export function ProfilingOverview() { const history = useHistory(); - const { services } = useKibana(); const { path: { serviceName }, query: { rangeFrom, rangeTo, environment, kuery }, @@ -53,13 +50,8 @@ export function ProfilingOverview() { numBuckets: 20, }); - const [ - apmUniversalProfilingShowCallout, - setAPMUniversalProfilingShowCallout, - ] = useLocalStorage('apmUniversalProfilingShowCallout', true); - - const baseUrl = - services.docLinks?.ELASTIC_WEBSITE_URL || 'https://www.elastic.co/'; + const { agentName, transactionType } = useApmServiceContext(); + const isJavaAgent = getIsJavaAgentName(agentName); const tabs = useMemo((): EuiTabbedContentProps['tabs'] => { return [ @@ -71,16 +63,27 @@ export function ProfilingOverview() { content: ( <> - + {isJavaAgent ? ( + + ) : ( + + )} ), }, @@ -92,18 +95,29 @@ export function ProfilingOverview() { content: ( <> - + {isJavaAgent ? ( + + ) : ( + + )} ), }, @@ -111,12 +125,14 @@ export function ProfilingOverview() { }, [ end, environment, + isJavaAgent, kuery, preferred?.source, rangeFrom, rangeTo, serviceName, start, + transactionType, ]); if (isLoading) { @@ -138,68 +154,29 @@ export function ProfilingOverview() { return ( <> - {apmUniversalProfilingShowCallout && ( + {isJavaAgent ? ( + + ) : ( <> - -

- {i18n.translate('xpack.apm.profiling.callout.description', { - defaultMessage: - 'Universal Profiling provides unprecedented code visibility into the runtime behaviour of all applications. It profiles every line of code on the host(s) running your services, including not only your application code but also the kernel and third-party libraries.', - })} -

- - - - {i18n.translate('xpack.apm.profiling.callout.learnMore', { - defaultMessage: 'Learn more', - })} - - - - { - setAPMUniversalProfilingShowCallout(false); - }} - > - {i18n.translate('xpack.apm.profiling.callout.dismiss', { - defaultMessage: 'Dismiss', - })} - - - -
+ + { + push(history, { + query: { + kuery: next.query, + rangeFrom: next.dateRange.from, + rangeTo: next.dateRange.to, + }, + }); + }} + onRefresh={refreshTimeRange} + /> )} - { - push(history, { - query: { - kuery: next.query, - rangeFrom: next.dateRange.from, - rangeTo: next.dateRange.to, - }, - }); - }} - onRefresh={refreshTimeRange} - /> (); + + const baseUrl = + services.docLinks?.ELASTIC_WEBSITE_URL || 'https://www.elastic.co/'; + + const [ + apmUniversalProfilingShowCallout, + setAPMUniversalProfilingShowCallout, + ] = useLocalStorage('apmUniversalProfilingShowCallout', true); + + if (apmUniversalProfilingShowCallout === false) { + return null; + } + + return ( + +

+ {i18n.translate('xpack.apm.profiling.callout.description', { + defaultMessage: + 'Universal Profiling provides unprecedented code visibility into the runtime behaviour of all applications. It profiles every line of code on the host(s) running your services, including not only your application code but also the kernel and third-party libraries.', + })} +

+ + + + {i18n.translate('xpack.apm.profiling.callout.learnMore', { + defaultMessage: 'Learn more', + })} + + + + setAPMUniversalProfilingShowCallout(false)} + > + {i18n.translate('xpack.apm.profiling.callout.dismiss', { + defaultMessage: 'Dismiss', + })} + + + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_flamegraph.tsx similarity index 89% rename from x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx rename to x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_flamegraph.tsx index 2504ce687307..9f8bcb2095f0 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_flamegraph.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_flamegraph.tsx @@ -15,7 +15,7 @@ import { toKueryFilterFormat, } from '../../../../common/utils/kuery_utils'; import { useFetcher } from '../../../hooks/use_fetcher'; -import { ProfilingFlamegraphChart } from '../../shared/profiling/flamegraph'; +import { FlamegraphChart } from '../../shared/charts/flamegraph'; import { ProfilingFlamegraphLink } from '../../shared/profiling/flamegraph/flamegraph_link'; import { HostnamesFilterWarning } from './host_names_filter_warning'; @@ -32,7 +32,7 @@ interface Props { rangeTo: string; } -export function ProfilingFlamegraph({ +export function ProfilingHostsFlamegraph({ start, end, serviceName, @@ -46,7 +46,7 @@ export function ProfilingFlamegraph({ (callApmApi) => { if (dataSource) { return callApmApi( - 'GET /internal/apm/services/{serviceName}/profiling/flamegraph', + 'GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph', { params: { path: { serviceName }, @@ -87,7 +87,7 @@ export function ProfilingFlamegraph({ - + ); } diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_top_functions.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_top_functions.tsx similarity index 95% rename from x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_top_functions.tsx rename to x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_top_functions.tsx index 8785a4974a2d..56d8b0cb1a60 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_top_functions.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/profiling_overview/profiling_hosts_top_functions.tsx @@ -34,7 +34,7 @@ interface Props { rangeTo: string; } -export function ProfilingTopNFunctions({ +export function ProfilingHostsTopNFunctions({ serviceName, start, end, @@ -50,7 +50,7 @@ export function ProfilingTopNFunctions({ (callApmApi) => { if (dataSource) { return callApmApi( - 'GET /internal/apm/services/{serviceName}/profiling/functions', + 'GET /internal/apm/services/{serviceName}/profiling/hosts/functions', { params: { path: { serviceName }, diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_flamegraph.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_flamegraph.tsx deleted file mode 100644 index 2f87d2be5021..000000000000 --- a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_flamegraph.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { EuiSpacer } from '@elastic/eui'; -import React from 'react'; -import { useFetcher } from '../../../hooks/use_fetcher'; -import { useTimeRange } from '../../../hooks/use_time_range'; -import { ProfilingFlamegraphChart } from '../../shared/profiling/flamegraph'; -import { ProfilingFlamegraphLink } from '../../shared/profiling/flamegraph/flamegraph_link'; - -interface Props { - serviceName: string; - rangeFrom: string; - rangeTo: string; - kuery: string; - transactionName: string; - transactionType?: string; - environment: string; -} - -export function ProfilingFlamegraph({ - serviceName, - rangeFrom, - rangeTo, - kuery, - transactionName, - transactionType, - environment, -}: Props) { - const { start, end } = useTimeRange({ rangeFrom, rangeTo }); - - const { data, status } = useFetcher( - (callApmApi) => { - if (!transactionType) { - return; - } - return callApmApi( - 'GET /internal/apm/services/{serviceName}/transactions/flamegraph', - { - params: { - path: { serviceName }, - query: { - start, - end, - kuery, - transactionName, - transactionType, - environment, - }, - }, - } - ); - }, - [ - serviceName, - start, - end, - kuery, - transactionName, - transactionType, - environment, - ] - ); - - return ( - <> - - - - - ); -} diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_tab.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_tab.tsx index 1728e214ff8f..4d56c62fa0a7 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_tab.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_tab.tsx @@ -17,8 +17,8 @@ import React, { useMemo } from 'react'; import { ProfilingEmptyState } from '@kbn/observability-shared-plugin/public'; import { useApmParams } from '../../../hooks/use_apm_params'; import { useProfilingPlugin } from '../../../hooks/use_profiling_plugin'; -import { ProfilingFlamegraph } from './profiling_flamegraph'; -import { ProfilingTopNFunctions } from './profiling_top_functions'; +import { ProfilingFlamegraph } from '../../shared/profiling/flamegraph'; +import { ProfilingTopNFunctions } from '../../shared/profiling/top_functions'; function ProfilingTab() { const { diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/transaction_details_tabs.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/transaction_details_tabs.tsx index 56511f94fb38..5ccd49b539ed 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/transaction_details_tabs.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/transaction_details_tabs.tsx @@ -28,6 +28,8 @@ import { latencyCorrelationsTab } from './latency_correlations_tab'; import { profilingTab } from './profiling_tab'; import { traceSamplesTab } from './trace_samples_tab'; import { useTransactionProfilingSetting } from '../../../hooks/use_profiling_integration_setting'; +import { useApmServiceContext } from '../../../context/apm_service/use_apm_service_context'; +import { isJavaAgentName } from '../../../../common/agent_name'; export interface TabContentProps { clearChartSelection: () => void; @@ -43,6 +45,7 @@ export function TransactionDetailsTabs() { '/services/{serviceName}/transactions/view', '/mobile-services/{serviceName}/transactions/view' ); + const { agentName } = useApmServiceContext(); const isCriticalPathFeatureEnabled = useCriticalPathFeatureEnabledSetting(); const isTransactionProfilingEnabled = useTransactionProfilingSetting(); @@ -57,12 +60,12 @@ export function TransactionDetailsTabs() { tabs.push(aggregatedCriticalPathTab); } - if (isTransactionProfilingEnabled) { + if (isTransactionProfilingEnabled && isJavaAgentName(agentName)) { tabs.push(profilingTab); } return tabs; - }, [isCriticalPathFeatureEnabled, isTransactionProfilingEnabled]); + }, [agentName, isCriticalPathFeatureEnabled, isTransactionProfilingEnabled]); const { urlParams } = useLegacyUrlParams(); const history = useHistory(); diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx index 766e9e8c9d44..629f707a3d3d 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/app_root/index.tsx @@ -131,7 +131,6 @@ export function ApmAppRoot({ function MountApmHeaderActionMenu() { const { appMountParameters: { setHeaderActionMenu, theme$ }, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, } = useApmPluginContext(); return ( @@ -140,11 +139,6 @@ function MountApmHeaderActionMenu() { - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} ); diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx index 09106b92e961..2ae97fdbd1c7 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/apm_main_template.tsx @@ -66,7 +66,7 @@ export function ApmMainTemplate({ const basePath = http?.basePath.get(); const { config } = useApmPluginContext(); - const aiAssistant = services.observabilityAIAssistant.service; + const aiAssistant = services.observabilityAIAssistant; const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate; @@ -119,7 +119,7 @@ export function ApmMainTemplate({ }); useEffect(() => { - return aiAssistant.setScreenContext({ + return aiAssistant.service.setScreenContext({ screenDescription: [ hasApmData ? 'The user has APM data.' diff --git a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx index c3c190bc8d27..eaab08bc09e6 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/routing/templates/settings_template.stories.tsx @@ -25,9 +25,7 @@ const coreMock = { }, }, observabilityAIAssistant: { - service: { - setScreenContext: () => noop, - }, + service: { setScreenContext: () => noop }, }, } as unknown as Partial; diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/charts/flamegraph/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/charts/flamegraph/index.tsx new file mode 100644 index 000000000000..b091e91f2a75 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/charts/flamegraph/index.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { EuiEmptyPrompt } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { EmbeddableFlamegraph } from '@kbn/observability-shared-plugin/public'; +import { BaseFlameGraph } from '@kbn/profiling-utils'; +import { isEmpty } from 'lodash'; +import React from 'react'; +import { FETCH_STATUS, isPending } from '../../../../hooks/use_fetcher'; + +interface Props { + data?: BaseFlameGraph; + status: FETCH_STATUS; +} + +export function FlamegraphChart({ data, status }: Props) { + return ( + <> + {status === FETCH_STATUS.SUCCESS && + (isEmpty(data) || data?.TotalSamples === 0) ? ( + + {i18n.translate('xpack.apm.profiling.flamegraph.noDataFound', { + defaultMessage: 'No data found', + })} +
+ } + /> + ) : ( + + )} + + ); +} diff --git a/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/flamegraph/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/flamegraph/index.tsx index cfe92331486a..a492370578d9 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/flamegraph/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/flamegraph/index.tsx @@ -4,41 +4,77 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiEmptyPrompt } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { EmbeddableFlamegraph } from '@kbn/observability-shared-plugin/public'; -import { BaseFlameGraph } from '@kbn/profiling-utils'; -import { isEmpty } from 'lodash'; +import { EuiSpacer } from '@elastic/eui'; import React from 'react'; -import { FETCH_STATUS, isPending } from '../../../../hooks/use_fetcher'; +import { useFetcher } from '../../../../hooks/use_fetcher'; +import { useTimeRange } from '../../../../hooks/use_time_range'; +import { FlamegraphChart } from '../../charts/flamegraph'; +import { ProfilingFlamegraphLink } from './flamegraph_link'; interface Props { - data?: BaseFlameGraph; - status: FETCH_STATUS; + serviceName: string; + rangeFrom: string; + rangeTo: string; + kuery: string; + transactionName?: string; + transactionType?: string; + environment: string; } -export function ProfilingFlamegraphChart({ data, status }: Props) { +export function ProfilingFlamegraph({ + serviceName, + rangeFrom, + rangeTo, + kuery, + transactionName, + transactionType, + environment, +}: Props) { + const { start, end } = useTimeRange({ rangeFrom, rangeTo }); + + const { data, status } = useFetcher( + (callApmApi) => { + if (!transactionType) { + return; + } + return callApmApi( + 'GET /internal/apm/services/{serviceName}/profiling/flamegraph', + { + params: { + path: { serviceName }, + query: { + start, + end, + kuery, + transactionName, + transactionType, + environment, + }, + }, + } + ); + }, + [ + serviceName, + start, + end, + kuery, + transactionName, + transactionType, + environment, + ] + ); + return ( <> - {status === FETCH_STATUS.SUCCESS && - (isEmpty(data) || data?.TotalSamples === 0) ? ( - - {i18n.translate('xpack.apm.profiling.flamegraph.noDataFound', { - defaultMessage: 'No data found', - })} -
- } - /> - ) : ( - - )} + + + ); } diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_top_functions.tsx b/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/top_functions/index.tsx similarity index 65% rename from x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_top_functions.tsx rename to x-pack/plugins/observability_solution/apm/public/components/shared/profiling/top_functions/index.tsx index 96ef5f349734..4d0cc1be4dad 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/transaction_details/profiling_top_functions.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/shared/profiling/top_functions/index.tsx @@ -7,16 +7,16 @@ import { EuiSpacer } from '@elastic/eui'; import { EmbeddableFunctions } from '@kbn/observability-shared-plugin/public'; import React from 'react'; -import { isPending, useFetcher } from '../../../hooks/use_fetcher'; -import { useTimeRange } from '../../../hooks/use_time_range'; -import { ProfilingTopNFunctionsLink } from '../../shared/profiling/top_functions/top_functions_link'; +import { isPending, useFetcher } from '../../../../hooks/use_fetcher'; +import { useTimeRange } from '../../../../hooks/use_time_range'; +import { ProfilingTopNFunctionsLink } from './top_functions_link'; interface Props { serviceName: string; rangeFrom: string; rangeTo: string; kuery: string; - transactionName: string; + transactionName?: string; transactionType?: string; environment: string; } @@ -34,27 +34,26 @@ export function ProfilingTopNFunctions({ const { data, status } = useFetcher( (callApmApi) => { - if (!transactionType) { - return; - } - return callApmApi( - 'GET /internal/apm/services/{serviceName}/transactions/functions', - { - params: { - path: { serviceName }, - query: { - start, - end, - kuery, - transactionName, - startIndex: 0, - endIndex: 10, - transactionType, - environment, + if (transactionType) { + return callApmApi( + 'GET /internal/apm/services/{serviceName}/profiling/functions', + { + params: { + path: { serviceName }, + query: { + start, + end, + kuery, + transactionName, + startIndex: 0, + endIndex: 10, + transactionType, + environment, + }, }, - }, - } - ); + } + ); + } }, [ serviceName, diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx index 3fb8f3bacb76..10d7c557ec46 100644 --- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx +++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/apm_plugin_context.tsx @@ -15,7 +15,7 @@ import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { SharePluginSetup } from '@kbn/share-plugin/public'; import type { ApmPluginSetupDeps } from '../../plugin'; import type { ConfigSchema } from '../..'; @@ -33,7 +33,7 @@ export interface ApmPluginContextValue { data: DataPublicPluginStart; unifiedSearch: UnifiedSearchPublicPluginStart; uiActions: UiActionsStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; share: SharePluginSetup; kibanaEnvironment: KibanaEnvContext; } diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx index ea18e9550e9a..05033575445a 100644 --- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx +++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx @@ -172,9 +172,7 @@ export const mockApmPluginContextValue = { getTriggerCompatibleActions: () => Promise.resolve([]), }, observabilityAIAssistant: { - service: { - setScreenContext: jest.fn().mockImplementation(() => noop), - }, + service: { setScreenContext: jest.fn().mockImplementation(() => noop) }, }, }; diff --git a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx index a358565663aa..08ea56443033 100644 --- a/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx +++ b/x-pack/plugins/observability_solution/apm/public/context/apm_plugin/mock_apm_plugin_storybook.tsx @@ -129,9 +129,7 @@ const mockApmPluginContext = { core: mockCore, plugins: mockPlugin, observabilityAIAssistant: { - service: { - setScreenContext: () => noop, - }, + service: { setScreenContext: () => noop }, }, } as unknown as ApmPluginContextValue; diff --git a/x-pack/plugins/observability_solution/apm/public/plugin.ts b/x-pack/plugins/observability_solution/apm/public/plugin.ts index ede721d072ee..7223ba7045e9 100644 --- a/x-pack/plugins/observability_solution/apm/public/plugin.ts +++ b/x-pack/plugins/observability_solution/apm/public/plugin.ts @@ -42,7 +42,7 @@ import { LicenseManagementUIPluginSetup } from '@kbn/license-management-plugin/p import type { LicensingPluginSetup } from '@kbn/licensing-plugin/public'; import type { MapsStartApi } from '@kbn/maps-plugin/public'; import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public'; -import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { FetchDataParams, ObservabilityPublicSetup, @@ -137,7 +137,7 @@ export interface ApmPluginStartDeps { lens: LensPublicStart; uiActions: UiActionsStart; profiling?: ProfilingPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; dashboard: DashboardStart; metricsDataAccess: MetricsDataPluginStart; uiSettings: IUiSettingsClient; diff --git a/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts b/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts index e0ac6710a08b..d4b135460c28 100644 --- a/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts +++ b/x-pack/plugins/observability_solution/apm/server/assistant_functions/index.ts @@ -8,7 +8,7 @@ import type { CoreSetup } from '@kbn/core-lifecycle-server'; import type { Logger } from '@kbn/logging'; import type { - ChatRegistrationFunction, + RegistrationCallback, RegisterFunction, } from '@kbn/observability-ai-assistant-plugin/server/service/types'; import type { IRuleDataClient } from '@kbn/rule-registry-plugin/server'; @@ -47,8 +47,11 @@ export function registerAssistantFunctions({ kibanaVersion: string; ruleDataClient: IRuleDataClient; plugins: APMRouteHandlerResources['plugins']; -}): ChatRegistrationFunction { - return async ({ resources, registerContext, registerFunction }) => { +}): RegistrationCallback { + return async ({ + resources, + functions: { registerContext, registerFunction }, + }) => { const apmRouteHandlerResources: APMRouteHandlerResources = { context: resources.context, request: resources.request, diff --git a/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts b/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts index 7c555366c9e6..302a8d004760 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts @@ -13,10 +13,13 @@ import { PickByValue } from 'utility-types'; import { agentExplorerRouteRepository } from '../agent_explorer/route'; import { agentKeysRouteRepository } from '../agent_keys/route'; import { alertsChartPreviewRouteRepository } from '../alerts/route'; +import { assistantRouteRepository } from '../assistant_functions/route'; import { correlationsRouteRepository } from '../correlations/route'; +import { serviceDashboardsRouteRepository } from '../custom_dashboards/route'; import { dataViewRouteRepository } from '../data_view/route'; import { debugTelemetryRoute } from '../debug_telemetry/route'; import { dependencisRouteRepository } from '../dependencies/route'; +import { diagnosticsRepository } from '../diagnostics/route'; import { environmentsRouteRepository } from '../environments/route'; import { errorsRouteRepository } from '../errors/route'; import { eventMetadataRouteRepository } from '../event_metadata/route'; @@ -28,6 +31,8 @@ import { latencyDistributionRouteRepository } from '../latency_distribution/rout import { metricsRouteRepository } from '../metrics/route'; import { mobileRouteRepository } from '../mobile/route'; import { observabilityOverviewRouteRepository } from '../observability_overview/route'; +import { profilingHostsRouteRepository } from '../profiling/hosts/route'; +import { profilingRouteRepository } from '../profiling/route'; import { serviceRouteRepository } from '../services/route'; import { serviceGroupRouteRepository } from '../service_groups/route'; import { serviceMapRouteRepository } from '../service_map/route'; @@ -35,7 +40,6 @@ import { agentConfigurationRouteRepository } from '../settings/agent_configurati import { anomalyDetectionRouteRepository } from '../settings/anomaly_detection/route'; import { apmIndicesRouteRepository } from '../settings/apm_indices/route'; import { customLinkRouteRepository } from '../settings/custom_link/route'; -import { diagnosticsRepository } from '../diagnostics/route'; import { labsRouteRepository } from '../settings/labs/route'; import { sourceMapsRouteRepository } from '../source_maps/route'; import { spanLinksRouteRepository } from '../span_links/route'; @@ -44,9 +48,6 @@ import { suggestionsRouteRepository } from '../suggestions/route'; import { timeRangeMetadataRoute } from '../time_range_metadata/route'; import { traceRouteRepository } from '../traces/route'; import { transactionRouteRepository } from '../transactions/route'; -import { assistantRouteRepository } from '../assistant_functions/route'; -import { profilingRouteRepository } from '../profiling/route'; -import { serviceDashboardsRouteRepository } from '../custom_dashboards/route'; function getTypedGlobalApmServerRouteRepository() { const repository = { @@ -86,6 +87,7 @@ function getTypedGlobalApmServerRouteRepository() { ...diagnosticsRepository, ...assistantRouteRepository, ...profilingRouteRepository, + ...profilingHostsRouteRepository, ...serviceDashboardsRouteRepository, }; diff --git a/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_flamegraph.ts b/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_flamegraph.ts new file mode 100644 index 000000000000..a1ac33693845 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_flamegraph.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ProfilingDataAccessPluginStart } from '@kbn/profiling-data-access-plugin/server'; +import { + CoreRequestHandlerContext, + ElasticsearchClient, +} from '@kbn/core/server'; +import { kqlQuery, termQuery } from '@kbn/observability-plugin/server'; +import { + SERVICE_NAME, + TRANSACTION_NAME, + TRANSACTION_TYPE, +} from '../../../common/es_fields/apm'; +import { environmentQuery } from '../../../common/utils/environment_query'; + +interface Params { + profilingDataAccessStart: ProfilingDataAccessPluginStart; + core: CoreRequestHandlerContext; + esClient: ElasticsearchClient; + start: number; + end: number; + kuery: string; + serviceName?: string; + transactionName?: string; + environment?: string; + transactionType?: string; + indices?: string[]; + stacktraceIdsField?: string; +} + +export function fetchFlamegraph({ + profilingDataAccessStart, + core, + esClient, + start, + end, + kuery, + serviceName, + transactionName, + environment, + transactionType, + indices, + stacktraceIdsField, +}: Params) { + return profilingDataAccessStart.services.fetchFlamechartData({ + core, + esClient, + totalSeconds: end - start, + indices, + stacktraceIdsField, + query: { + bool: { + filter: [ + ...kqlQuery(kuery), + ...termQuery(SERVICE_NAME, serviceName), + ...termQuery(TRANSACTION_NAME, transactionName), + ...environmentQuery(environment), + ...termQuery(TRANSACTION_TYPE, transactionType), + { + range: { + ['@timestamp']: { + gte: String(start), + lt: String(end), + format: 'epoch_second', + }, + }, + }, + ], + }, + }, + }); +} diff --git a/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_functions.ts b/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_functions.ts new file mode 100644 index 000000000000..c6b0bb66c955 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/server/routes/profiling/fetch_functions.ts @@ -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 { ProfilingDataAccessPluginStart } from '@kbn/profiling-data-access-plugin/server'; +import { + CoreRequestHandlerContext, + ElasticsearchClient, +} from '@kbn/core/server'; +import { kqlQuery, termQuery } from '@kbn/observability-plugin/server'; +import { + SERVICE_NAME, + TRANSACTION_NAME, + TRANSACTION_TYPE, +} from '../../../common/es_fields/apm'; +import { environmentQuery } from '../../../common/utils/environment_query'; + +interface Params { + profilingDataAccessStart: ProfilingDataAccessPluginStart; + core: CoreRequestHandlerContext; + esClient: ElasticsearchClient; + startIndex: number; + endIndex: number; + start: number; + end: number; + kuery: string; + serviceName?: string; + transactionName?: string; + environment?: string; + transactionType?: string; + indices?: string[]; + stacktraceIdsField?: string; +} + +export function fetchFunctions({ + profilingDataAccessStart, + core, + esClient, + startIndex, + endIndex, + start, + end, + kuery, + serviceName, + transactionName, + environment, + transactionType, + indices, + stacktraceIdsField, +}: Params) { + return profilingDataAccessStart.services.fetchFunctions({ + core, + esClient, + startIndex, + endIndex, + totalSeconds: end - start, + indices, + stacktraceIdsField, + query: { + bool: { + filter: [ + ...kqlQuery(kuery), + ...termQuery(SERVICE_NAME, serviceName), + ...termQuery(TRANSACTION_NAME, transactionName), + ...environmentQuery(environment), + ...termQuery(TRANSACTION_TYPE, transactionType), + { + range: { + ['@timestamp']: { + gte: String(start), + lt: String(end), + format: 'epoch_second', + }, + }, + }, + ], + }, + }, + }); +} diff --git a/x-pack/plugins/observability_solution/apm/server/routes/profiling/hosts/route.ts b/x-pack/plugins/observability_solution/apm/server/routes/profiling/hosts/route.ts new file mode 100644 index 000000000000..ca5706994267 --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/server/routes/profiling/hosts/route.ts @@ -0,0 +1,173 @@ +/* + * Copyright 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 { toNumberRt } from '@kbn/io-ts-utils'; +import type { BaseFlameGraph, TopNFunctions } from '@kbn/profiling-utils'; +import * as t from 'io-ts'; +import { HOST_NAME } from '../../../../common/es_fields/apm'; +import { + mergeKueries, + toKueryFilterFormat, +} from '../../../../common/utils/kuery_utils'; +import { getApmEventClient } from '../../../lib/helpers/get_apm_event_client'; +import { createApmServerRoute } from '../../apm_routes/create_apm_server_route'; +import { + environmentRt, + kueryRt, + rangeRt, + serviceTransactionDataSourceRt, +} from '../../default_api_types'; +import { fetchFlamegraph } from '../fetch_flamegraph'; +import { fetchFunctions } from '../fetch_functions'; +import { getServiceHostNames } from '../get_service_host_names'; + +const profilingHostsFlamegraphRoute = createApmServerRoute({ + endpoint: + 'GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph', + params: t.type({ + path: t.type({ serviceName: t.string }), + query: t.intersection([ + rangeRt, + environmentRt, + serviceTransactionDataSourceRt, + kueryRt, + ]), + }), + options: { tags: ['access:apm'] }, + handler: async ( + resources + ): Promise< + { flamegraph: BaseFlameGraph; hostNames: string[] } | undefined + > => { + const { context, plugins, params } = resources; + const core = await context.core; + const [esClient, apmEventClient, profilingDataAccessStart] = + await Promise.all([ + core.elasticsearch.client, + await getApmEventClient(resources), + await plugins.profilingDataAccess?.start(), + ]); + if (profilingDataAccessStart) { + const { start, end, environment, documentType, rollupInterval, kuery } = + params.query; + const { serviceName } = params.path; + + const serviceHostNames = await getServiceHostNames({ + apmEventClient, + start, + end, + environment, + serviceName, + documentType, + rollupInterval, + }); + + if (!serviceHostNames.length) { + return undefined; + } + const startSecs = start / 1000; + const endSecs = end / 1000; + + const flamegraph = await fetchFlamegraph({ + profilingDataAccessStart, + core, + esClient: esClient.asCurrentUser, + start: startSecs, + end: endSecs, + kuery: mergeKueries([ + `(${toKueryFilterFormat(HOST_NAME, serviceHostNames)})`, + kuery, + ]), + }); + + return { flamegraph, hostNames: serviceHostNames }; + } + + return undefined; + }, +}); + +const profilingHostsFunctionsRoute = createApmServerRoute({ + endpoint: + 'GET /internal/apm/services/{serviceName}/profiling/hosts/functions', + params: t.type({ + path: t.type({ serviceName: t.string }), + query: t.intersection([ + rangeRt, + environmentRt, + serviceTransactionDataSourceRt, + t.type({ startIndex: toNumberRt, endIndex: toNumberRt }), + kueryRt, + ]), + }), + options: { tags: ['access:apm'] }, + handler: async ( + resources + ): Promise<{ functions: TopNFunctions; hostNames: string[] } | undefined> => { + const { context, plugins, params } = resources; + const core = await context.core; + const [esClient, apmEventClient, profilingDataAccessStart] = + await Promise.all([ + core.elasticsearch.client, + await getApmEventClient(resources), + await plugins.profilingDataAccess?.start(), + ]); + if (profilingDataAccessStart) { + const { + start, + end, + environment, + startIndex, + endIndex, + documentType, + rollupInterval, + kuery, + } = params.query; + const { serviceName } = params.path; + + const serviceHostNames = await getServiceHostNames({ + apmEventClient, + start, + end, + environment, + serviceName, + documentType, + rollupInterval, + }); + + if (!serviceHostNames.length) { + return undefined; + } + + const startSecs = start / 1000; + const endSecs = end / 1000; + + const functions = await fetchFunctions({ + profilingDataAccessStart, + core, + esClient: esClient.asCurrentUser, + startIndex, + endIndex, + start: startSecs, + end: endSecs, + kuery: mergeKueries([ + `(${toKueryFilterFormat(HOST_NAME, serviceHostNames)})`, + kuery, + ]), + }); + + return { functions, hostNames: serviceHostNames }; + } + + return undefined; + }, +}); + +export const profilingHostsRouteRepository = { + ...profilingHostsFlamegraphRoute, + ...profilingHostsFunctionsRoute, +}; diff --git a/x-pack/plugins/observability_solution/apm/server/routes/profiling/route.ts b/x-pack/plugins/observability_solution/apm/server/routes/profiling/route.ts index 9009f60da03a..a255cfd3d8c4 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/profiling/route.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/profiling/route.ts @@ -8,209 +8,25 @@ import { isoToEpochSecsRt, toNumberRt } from '@kbn/io-ts-utils'; import type { BaseFlameGraph, TopNFunctions } from '@kbn/profiling-utils'; import * as t from 'io-ts'; -import { kqlQuery, termQuery } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; -import { - HOST_NAME, - SERVICE_NAME, - TRANSACTION_NAME, - TRANSACTION_PROFILER_STACK_TRACE_IDS, - TRANSACTION_TYPE, -} from '../../../common/es_fields/apm'; -import { - mergeKueries, - toKueryFilterFormat, -} from '../../../common/utils/kuery_utils'; import { getApmEventClient } from '../../lib/helpers/get_apm_event_client'; import { createApmServerRoute } from '../apm_routes/create_apm_server_route'; -import { - environmentRt, - kueryRt, - rangeRt, - serviceTransactionDataSourceRt, -} from '../default_api_types'; -import { getServiceHostNames } from './get_service_host_names'; -import { environmentQuery } from '../../../common/utils/environment_query'; +import { environmentRt, kueryRt } from '../default_api_types'; +import { fetchFlamegraph } from './fetch_flamegraph'; +import { fetchFunctions } from './fetch_functions'; +import { TRANSACTION_PROFILER_STACK_TRACE_IDS } from '../../../common/es_fields/apm'; -const profilingFlamegraphRoute = createApmServerRoute({ +const servicesFlamegraphRoute = createApmServerRoute({ endpoint: 'GET /internal/apm/services/{serviceName}/profiling/flamegraph', - params: t.type({ - path: t.type({ serviceName: t.string }), - query: t.intersection([ - rangeRt, - environmentRt, - serviceTransactionDataSourceRt, - kueryRt, - ]), - }), - options: { tags: ['access:apm'] }, - handler: async ( - resources - ): Promise< - { flamegraph: BaseFlameGraph; hostNames: string[] } | undefined - > => { - const { context, plugins, params } = resources; - const core = await context.core; - const [esClient, apmEventClient, profilingDataAccessStart] = - await Promise.all([ - core.elasticsearch.client, - await getApmEventClient(resources), - await plugins.profilingDataAccess?.start(), - ]); - if (profilingDataAccessStart) { - const { start, end, environment, documentType, rollupInterval, kuery } = - params.query; - const { serviceName } = params.path; - - const serviceHostNames = await getServiceHostNames({ - apmEventClient, - start, - end, - environment, - serviceName, - documentType, - rollupInterval, - }); - - if (!serviceHostNames.length) { - return undefined; - } - const startSecs = start / 1000; - const endSecs = end / 1000; - - const flamegraph = - await profilingDataAccessStart?.services.fetchFlamechartData({ - core, - esClient: esClient.asCurrentUser, - totalSeconds: endSecs - startSecs, - query: { - bool: { - filter: [ - ...kqlQuery( - mergeKueries([ - `(${toKueryFilterFormat(HOST_NAME, serviceHostNames)})`, - kuery, - ]) - ), - { - range: { - ['@timestamp']: { - gte: String(startSecs), - lt: String(endSecs), - format: 'epoch_second', - }, - }, - }, - ], - }, - }, - }); - - return { flamegraph, hostNames: serviceHostNames }; - } - - return undefined; - }, -}); - -const profilingFunctionsRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/services/{serviceName}/profiling/functions', - params: t.type({ - path: t.type({ serviceName: t.string }), - query: t.intersection([ - rangeRt, - environmentRt, - serviceTransactionDataSourceRt, - t.type({ startIndex: toNumberRt, endIndex: toNumberRt }), - kueryRt, - ]), - }), - options: { tags: ['access:apm'] }, - handler: async ( - resources - ): Promise<{ functions: TopNFunctions; hostNames: string[] } | undefined> => { - const { context, plugins, params } = resources; - const core = await context.core; - const [esClient, apmEventClient, profilingDataAccessStart] = - await Promise.all([ - core.elasticsearch.client, - await getApmEventClient(resources), - await plugins.profilingDataAccess?.start(), - ]); - if (profilingDataAccessStart) { - const { - start, - end, - environment, - startIndex, - endIndex, - documentType, - rollupInterval, - kuery, - } = params.query; - const { serviceName } = params.path; - - const serviceHostNames = await getServiceHostNames({ - apmEventClient, - start, - end, - environment, - serviceName, - documentType, - rollupInterval, - }); - - if (!serviceHostNames.length) { - return undefined; - } - - const startSecs = start / 1000; - const endSecs = end / 1000; - - const functions = await profilingDataAccessStart?.services.fetchFunction({ - core, - esClient: esClient.asCurrentUser, - startIndex, - endIndex, - totalSeconds: endSecs - startSecs, - query: { - bool: { - filter: [ - ...kqlQuery( - mergeKueries([ - `(${toKueryFilterFormat(HOST_NAME, serviceHostNames)})`, - kuery, - ]) - ), - { - range: { - ['@timestamp']: { - gte: String(startSecs), - lt: String(endSecs), - format: 'epoch_second', - }, - }, - }, - ], - }, - }, - }); - return { functions, hostNames: serviceHostNames }; - } - - return undefined; - }, -}); - -const transactionsFlamegraphRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/services/{serviceName}/transactions/flamegraph', params: t.type({ path: t.type({ serviceName: t.string }), query: t.intersection([ kueryRt, environmentRt, - t.type({ + t.partial({ transactionName: t.string, + }), + t.type({ start: isoToEpochSecsRt, end: isoToEpochSecsRt, transactionType: t.string, @@ -242,32 +58,19 @@ const transactionsFlamegraphRoute = createApmServerRoute({ ProcessorEvent.transaction ); - return await profilingDataAccessStart?.services.fetchFlamechartData({ + return fetchFlamegraph({ + profilingDataAccessStart, core, esClient: esClient.asCurrentUser, + start, + end, + kuery, + serviceName, + transactionName, + environment, + transactionType, indices, stacktraceIdsField: TRANSACTION_PROFILER_STACK_TRACE_IDS, - totalSeconds: end - start, - query: { - bool: { - filter: [ - ...kqlQuery(kuery), - ...termQuery(SERVICE_NAME, serviceName), - ...termQuery(TRANSACTION_NAME, transactionName), - ...environmentQuery(environment), - ...termQuery(TRANSACTION_TYPE, transactionType), - { - range: { - ['@timestamp']: { - gte: String(start), - lt: String(end), - format: 'epoch_second', - }, - }, - }, - ], - }, - }, }); } @@ -275,18 +78,20 @@ const transactionsFlamegraphRoute = createApmServerRoute({ }, }); -const transactionsFunctionsRoute = createApmServerRoute({ - endpoint: 'GET /internal/apm/services/{serviceName}/transactions/functions', +const servicesFunctionsRoute = createApmServerRoute({ + endpoint: 'GET /internal/apm/services/{serviceName}/profiling/functions', params: t.type({ path: t.type({ serviceName: t.string }), query: t.intersection([ environmentRt, + t.partial({ + transactionName: t.string, + }), t.type({ start: isoToEpochSecsRt, end: isoToEpochSecsRt, startIndex: toNumberRt, endIndex: toNumberRt, - transactionName: t.string, transactionType: t.string, }), kueryRt, @@ -320,34 +125,21 @@ const transactionsFunctionsRoute = createApmServerRoute({ ProcessorEvent.transaction ); - return profilingDataAccessStart?.services.fetchFunction({ + return fetchFunctions({ + profilingDataAccessStart, core, esClient: esClient.asCurrentUser, startIndex, endIndex, indices, stacktraceIdsField: TRANSACTION_PROFILER_STACK_TRACE_IDS, - totalSeconds: end - start, - query: { - bool: { - filter: [ - ...kqlQuery(kuery), - ...termQuery(SERVICE_NAME, serviceName), - ...termQuery(TRANSACTION_NAME, transactionName), - ...environmentQuery(environment), - ...termQuery(TRANSACTION_TYPE, transactionType), - { - range: { - ['@timestamp']: { - gte: String(start), - lt: String(end), - format: 'epoch_second', - }, - }, - }, - ], - }, - }, + start, + end, + kuery, + serviceName, + transactionName, + environment, + transactionType, }); } @@ -386,9 +178,7 @@ const profilingStatusRoute = createApmServerRoute({ }); export const profilingRouteRepository = { - ...profilingFlamegraphRoute, + ...servicesFlamegraphRoute, ...profilingStatusRoute, - ...profilingFunctionsRoute, - ...transactionsFlamegraphRoute, - ...transactionsFunctionsRoute, + ...servicesFunctionsRoute, }; diff --git a/x-pack/plugins/observability_solution/apm/server/types.ts b/x-pack/plugins/observability_solution/apm/server/types.ts index fa77e52e7683..80237f6012aa 100644 --- a/x-pack/plugins/observability_solution/apm/server/types.ts +++ b/x-pack/plugins/observability_solution/apm/server/types.ts @@ -66,8 +66,8 @@ import { ProfilingDataAccessPluginStart, } from '@kbn/profiling-data-access-plugin/server'; import type { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantServerSetup, + ObservabilityAIAssistantServerStart, } from '@kbn/observability-ai-assistant-plugin/server'; import { APMConfig } from '.'; @@ -86,7 +86,7 @@ export interface APMPluginSetupDependencies { metricsDataAccess: MetricsDataPluginSetup; dataViews: {}; share: SharePluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantServerSetup; // optional dependencies actions?: ActionsPlugin['setup']; alerting?: AlertingPlugin['setup']; @@ -112,7 +112,7 @@ export interface APMPluginStartDependencies { metricsDataAccess: MetricsDataPluginSetup; dataViews: DataViewsServerPluginStart; share: undefined; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantServerStart; // optional dependencies actions?: ActionsPlugin['start']; alerting?: AlertingPlugin['start']; diff --git a/x-pack/plugins/observability_solution/dataset_quality/README.md b/x-pack/plugins/observability_solution/dataset_quality/README.md index b39802c06f23..afa09dc5781a 100755 --- a/x-pack/plugins/observability_solution/dataset_quality/README.md +++ b/x-pack/plugins/observability_solution/dataset_quality/README.md @@ -4,9 +4,7 @@ In order to make ongoing maintenance of log collection easy we want to introduce ## Development -### Tests - -#### Unit tests +### Unit Tests Kibana primarily uses Jest for unit testing. Each plugin or package defines a `jest.config.js` that extends a preset provided by the `@kbn/test` package. The following command runs all Dataset quality unit tests: @@ -51,3 +49,38 @@ node x-pack/plugins/observability_solution/dataset_quality/scripts/api --server # run tests node x-pack/plugins/observability_solution/dataset_quality/scripts/api --runner --grep-files=error_group_list ``` + + +### Functional Tests + +### Stateful +#### FTR Server +``` +yarn test:ftr:server --config ./x-pack/test/functional/apps/dataset_quality/config.ts +``` + +#### FTR Runner +``` +yarn test:ftr:runner --config ./x-pack/test/functional/apps/dataset_quality/config.ts --include ./x-pack/test/functional/apps/dataset_quality/index.ts +``` + +#### Running Individual Tests +``` +yarn test:ftr:runner --config ./x-pack/test/functional/apps/dataset_quality/config.ts --include ./x-pack/test/functional/apps/dataset_quality/$1 +``` + +### Serverless + +#### Server +``` +yarn test:ftr:server --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts +``` + +#### Runner +``` +yarn test:ftr:runner --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts --include ./x-pack/test_serverless/functional/test_suites/observability/dataset_quality/index.ts +``` +#### Running Individual Tests +``` +yarn test:ftr:runner --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts --include ./x-pack/test_serverless/functional/test_suites/observability/dataset_quality/$1 +``` \ No newline at end of file diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx index 268a7d07c690..eab256983adf 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/filters.tsx @@ -49,7 +49,7 @@ export default function Filters() { ); return ( - + diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/integrations_selector.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/integrations_selector.tsx index 20ea92299859..d7bdf32a3998 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/integrations_selector.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/filters/integrations_selector.tsx @@ -90,6 +90,7 @@ export function IntegrationsSelector({ const button = ( ; + return ( + + + + +

{datasetQualityAppTitle}

+
+ + + +
+
+
+ ); } diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx index 3da7d9b810b0..91dbee88ecd1 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/datasets_quality_indicators.tsx @@ -92,7 +92,11 @@ const QualityIndicator = ({ ) : (

- + {value || 0}

diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/last_day_data_placeholder.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/last_day_data_placeholder.tsx index ecdd8a7d01dc..fba5df2e9dbe 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/last_day_data_placeholder.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/summary_panel/last_day_data_placeholder.tsx @@ -46,9 +46,9 @@ export function LastDayDataPlaceholder({
{isLoading ? ( - + ) : ( - +

{value}

)} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/columns.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/columns.tsx index 8abcf8da66f0..73c5ba7732df 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/columns.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/columns.tsx @@ -144,7 +144,7 @@ export const getDatasetQualityTableColumns = ({ return ( openFlyout(dataStreamStat as FlyoutDataset)} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/fields_list.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/fields_list.tsx index 319b76c1dd05..0824e85ddd36 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/fields_list.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/fields_list.tsx @@ -39,7 +39,9 @@ export function FieldsList({ {fieldTitle}
- {fieldValue} + + {fieldValue} +
{index < fields.length - 1 ? : null} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout.tsx index 49479b875e49..fece0a928a2c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout.tsx @@ -30,10 +30,15 @@ export default function Flyout({ dataset, closeFlyout }: FlyoutProps) { useDatasetQualityFlyout(); return ( - + <>
- + diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/header.tsx index a0474dd8d70f..189567560112 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/header.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/header.tsx @@ -32,7 +32,7 @@ export function Header({ dataStreamStat }: { dataStreamStat: FlyoutDataset }) { - +

{title}

- {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} {isSaveOpen && lensAttributes && ( diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx index f28ffb7e493d..7dc9e7b26367 100644 --- a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx +++ b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/components/action_menu/index.tsx @@ -11,7 +11,6 @@ import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { ExpViewActionMenuContent } from './action_menu'; import { useExploratoryView } from '../../contexts/exploratory_view_config'; -import { useKibana } from '../../hooks/use_kibana'; interface Props { timeRange?: { from: string; to: string }; @@ -20,21 +19,12 @@ interface Props { export function ExpViewActionMenu(props: Props) { const { setHeaderActionMenu, theme$ } = useExploratoryView(); - const { - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - } = useKibana().services; - return ( - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} ); diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts b/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts index eb5fd4ead150..31c80f8bdf8e 100644 --- a/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts +++ b/x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts @@ -35,7 +35,7 @@ import { SecurityPluginStart } from '@kbn/security-plugin/public'; import { SpacesPluginStart } from '@kbn/spaces-plugin/public'; import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; -import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { getExploratoryViewEmbeddable } from './components/shared/exploratory_view/embeddable'; import { createExploratoryViewUrl } from './components/shared/exploratory_view/configurations/exploratory_view_url'; import getAppDataView from './utils/observability_data_views/get_app_data_view'; @@ -68,7 +68,7 @@ export interface ExploratoryViewPublicPluginsStart { usageCollection: UsageCollectionSetup; unifiedSearch: UnifiedSearchPublicPluginStart; home?: HomePublicPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; } export type ExploratoryViewPublicSetup = ReturnType; diff --git a/x-pack/plugins/observability_solution/infra/kibana.jsonc b/x-pack/plugins/observability_solution/infra/kibana.jsonc index dbabc92fd69c..e9bbd5b27e74 100644 --- a/x-pack/plugins/observability_solution/infra/kibana.jsonc +++ b/x-pack/plugins/observability_solution/infra/kibana.jsonc @@ -50,7 +50,6 @@ "requiredBundles": [ "unifiedSearch", "observability", - "observabilityAIAssistant", "licenseManagement", "kibanaUtils", "kibanaReact", diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx index c1f9231a3a1a..2edec4a4aafa 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/log_rate_analysis.tsx @@ -19,7 +19,7 @@ import { import { LogRateAnalysisContent, type LogRateAnalysisResultsData } from '@kbn/aiops-plugin/public'; import { Rule } from '@kbn/alerting-plugin/common'; import { TopAlert } from '@kbn/observability-plugin/public'; -import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/public'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; import { ALERT_END } from '@kbn/rule-data-utils'; @@ -52,7 +52,10 @@ export const LogRateAnalysis: FC = ({ r const { dataViews, logsShared, - observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + observabilityAIAssistant: { + ObservabilityAIAssistantContextualInsight, + getContextualInsightMessages, + }, } = services; const [dataView, setDataView] = useState(); const [esSearchQuery, setEsSearchQuery] = useState(); @@ -194,7 +197,10 @@ export const LogRateAnalysis: FC = ({ r .map((item) => Object.values(item).join(',')) .join('\n'); - const content = `You are an observability expert using Elastic Observability Suite on call being consulted about a log threshold alert that got triggered by a ${logRateAnalysisType} in log messages. Your job is to take immediate action and proceed with both urgency and precision. + return getContextualInsightMessages({ + message: + 'Can you identify possible causes and remediations for these log rate analysis results', + instructions: `You are an observability expert using Elastic Observability Suite on call being consulted about a log threshold alert that got triggered by a ${logRateAnalysisType} in log messages. Your job is to take immediate action and proceed with both urgency and precision. "Log Rate Analysis" is an AIOps feature that uses advanced statistical methods to identify reasons for increases and decreases in log rates. It makes it easy to find and investigate causes of unusual spikes or dips by using the analysis workflow view. You are using "Log Rate Analysis" and ran the statistical analysis on the log messages which occured during the alert. You received the following analysis results from "Log Rate Analysis" which list statistically significant co-occuring field/value combinations sorted from most significant (lower p-values) to least significant (higher p-values) that ${ @@ -227,20 +233,9 @@ export const LogRateAnalysis: FC = ({ r Do not mention individual p-values from the analysis results. Do not repeat the full list of field names and field values back to the user. - Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`; - - const now = new Date().toISOString(); - - return [ - { - '@timestamp': now, - message: { - content, - role: MessageRole.User, - }, - }, - ]; - }, [logRateAnalysisParams]); + Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`, + }); + }, [logRateAnalysisParams, getContextualInsightMessages]); if (!dataView || !esSearchQuery) return null; diff --git a/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx b/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx index 597f387c627b..9e3101f4ddfb 100644 --- a/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx +++ b/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx @@ -9,7 +9,7 @@ import { AppMountParameters, CoreStart } from '@kbn/core/public'; import React from 'react'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { KibanaContextProvider, KibanaThemeProvider } from '@kbn/kibana-react-plugin/public'; -import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { NavigationWarningPromptProvider } from '@kbn/observability-shared-plugin/public'; import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public'; @@ -28,7 +28,7 @@ export const CommonInfraProviders: React.FC<{ appName: string; storage: Storage; triggersActionsUI: TriggersAndActionsUIPublicPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; setHeaderActionMenu: AppMountParameters['setHeaderActionMenu']; theme$: AppMountParameters['theme$']; }> = ({ diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx index c6f98c6d1422..a953a970219c 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/processes/process_row.tsx @@ -23,7 +23,7 @@ import { } from '@elastic/eui'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; import useToggle from 'react-use/lib/useToggle'; -import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import { type Message } from '@kbn/observability-ai-assistant-plugin/public'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { Process } from './types'; import { ProcessRowCharts } from './process_row_charts'; @@ -35,66 +35,62 @@ interface Props { } export const ContextualInsightProcessRow = ({ command }: { command: string }) => { const { - observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + observabilityAIAssistant: { + ObservabilityAIAssistantContextualInsight, + getContextualInsightMessages, + }, } = useKibanaContextForPlugin().services; const explainProcessMessages = useMemo(() => { if (!command) { return undefined; } - const now = new Date().toISOString(); - return [ - { - '@timestamp': now, - message: { - role: MessageRole.User, - content: `I am a software engineer. I am trying to understand what a process running on my - machine does. - Your task is to first describe what the process is and what its general use cases are. If I also provide you - with the arguments to the process you should then explain its arguments and how they influence the behaviour - of the process. If I do not provide any arguments then explain the behaviour of the process when no arguments are - provided. - If you do not recognise the process say "No information available for this process". If I provide an argument - to the process that you do not recognise then say "No information available for this argument" when explaining - that argument. - Here is an example with arguments. - Process: metricbeat -c /etc/metricbeat.yml -d autodiscover,kafka -e -system.hostfs=/hostfs - Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your - servers to periodically collect metrics from the operating system and from services running on the server. - Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install - Metricbeat on your servers to collect metrics from your systems and services. These metrics are then - used for performance monitoring, anomaly detection, system status checks, etc. - Here is a breakdown of the arguments used: - * -c /etc/metricbeat.yml: The -c option is used to specify the configuration file for Metricbeat. In - this case, /etc/metricbeat.yml is the configuration file. This file contains configurations for what - metrics to collect and where to send them (e.g., to Elasticsearch or Logstash). - * -d autodiscover,kafka: The -d option is used to enable debug output for selected components. In - this case, debug output is enabled for autodiscover and kafka components. The autodiscover feature - allows Metricbeat to automatically discover services as they get started and stopped in your environment, - and kafka is presumably a monitored service from which Metricbeat collects metrics. - * -e: The -e option is used to log to stderr and disable syslog/file output. This is useful for debugging. - * -system.hostfs=/hostfs: The -system.hostfs option is used to set the mount point of the host’s - filesystem for use in monitoring a host from within a container. In this case, /hostfs is the mount - point. When running Metricbeat inside a container, filesystem metrics would be for the container by - default, but with this option, Metricbeat can get metrics for the host system. - Here is an example without arguments. - Process: metricbeat - Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your - servers to periodically collect metrics from the operating system and from services running on the server. - Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install - Metricbeat on your servers to collect metrics from your systems and services. These metrics are then - used for performance monitoring, anomaly detection, system status checks, etc. - Running it without any arguments will start the process with the default configuration file, typically - located at /etc/metricbeat/metricbeat.yml. This file specifies the metrics to be collected and where - to ship them to. - Now explain this process to me. - Process: ${command} - Explanation: - `, - }, - }, - ]; - }, [command]); + + return getContextualInsightMessages({ + message: `I am a software engineer. I am trying to understand what this process running on my + machine does.`, + instructions: `Your task is to first describe what the process is and what its general use cases are. If I also provide you + with the arguments to the process you should then explain its arguments and how they influence the behaviour + of the process. If I do not provide any arguments then explain the behaviour of the process when no arguments are + provided. + If you do not recognise the process say "No information available for this process". If I provide an argument + to the process that you do not recognise then say "No information available for this argument" when explaining + that argument. + Here is an example with arguments. + Process: metricbeat -c /etc/metricbeat.yml -d autodiscover,kafka -e -system.hostfs=/hostfs + Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your + servers to periodically collect metrics from the operating system and from services running on the server. + Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install + Metricbeat on your servers to collect metrics from your systems and services. These metrics are then + used for performance monitoring, anomaly detection, system status checks, etc. + Here is a breakdown of the arguments used: + * -c /etc/metricbeat.yml: The -c option is used to specify the configuration file for Metricbeat. In + this case, /etc/metricbeat.yml is the configuration file. This file contains configurations for what + metrics to collect and where to send them (e.g., to Elasticsearch or Logstash). + * -d autodiscover,kafka: The -d option is used to enable debug output for selected components. In + this case, debug output is enabled for autodiscover and kafka components. The autodiscover feature + allows Metricbeat to automatically discover services as they get started and stopped in your environment, + and kafka is presumably a monitored service from which Metricbeat collects metrics. + * -e: The -e option is used to log to stderr and disable syslog/file output. This is useful for debugging. + * -system.hostfs=/hostfs: The -system.hostfs option is used to set the mount point of the host’s + filesystem for use in monitoring a host from within a container. In this case, /hostfs is the mount + point. When running Metricbeat inside a container, filesystem metrics would be for the container by + default, but with this option, Metricbeat can get metrics for the host system. + Here is an example without arguments. + Process: metricbeat + Explanation: Metricbeat is part of the Elastic Stack. It is a lightweight shipper that you can install on your + servers to periodically collect metrics from the operating system and from services running on the server. + Use cases for Metricbeat generally revolve around infrastructure monitoring. You would typically install + Metricbeat on your servers to collect metrics from your systems and services. These metrics are then + used for performance monitoring, anomaly detection, system status checks, etc. + Running it without any arguments will start the process with the default configuration file, typically + located at /etc/metricbeat/metricbeat.yml. This file specifies the metrics to be collected and where + to ship them to. + Now explain this process to me. + Process: ${command} + Explanation:`, + }); + }, [command, getContextualInsightMessages]); return ( <> {ObservabilityAIAssistantContextualInsight && explainProcessMessages ? ( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx b/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx index 35a887db784e..99de8fc23b5c 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/logs/page_content.tsx @@ -31,7 +31,6 @@ export const LogsPageContent: React.FunctionComponent = () => { const { application: { getUrlForApp }, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, } = useKibanaContextForPlugin().services; const enableDeveloperRoutes = isDevMode(); @@ -90,11 +89,6 @@ export const LogsPageContent: React.FunctionComponent = () => { - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} )} diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx index 841c8a095330..494ad94830ab 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx @@ -20,7 +20,6 @@ import { import { useKibana, useUiSetting } from '@kbn/kibana-react-plugin/public'; import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public'; import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common'; -import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { MetricsSourceConfigurationProperties } from '../../../common/metrics_sources'; import { HelpCenterContent } from '../../components/help_center_content'; import { useReadOnlyBadge } from '../../hooks/use_readonly_badge'; @@ -48,9 +47,6 @@ const ADD_DATA_LABEL = i18n.translate('xpack.infra.metricsHeaderAddDataButtonLab }); export const InfrastructurePage = () => { - const { - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - } = useKibanaContextForPlugin().services; const config = usePluginConfig(); const uiCapabilities = useKibana().services.application?.capabilities; const { setHeaderActionMenu, theme$ } = useContext(HeaderActionMenuContext); @@ -115,11 +111,6 @@ export const InfrastructurePage = () => { - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} )} diff --git a/x-pack/plugins/observability_solution/infra/public/types.ts b/x-pack/plugins/observability_solution/infra/public/types.ts index 475e37e9e2ef..bff4d8afb84d 100644 --- a/x-pack/plugins/observability_solution/infra/public/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/types.ts @@ -44,7 +44,7 @@ import { } from '@kbn/logs-shared-plugin/public'; import { FieldFormatsSetup, FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/public'; -import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import type { CloudSetup } from '@kbn/cloud-plugin/public'; import type { LicenseManagementUIPluginSetup } from '@kbn/license-management-plugin/public'; import type { ServerlessPluginStart } from '@kbn/serverless/public'; @@ -96,7 +96,7 @@ export interface InfraClientStartDeps { ml: MlPluginStart; observability: ObservabilityPublicStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; osquery?: unknown; // OsqueryPluginStart - can't be imported due to cyclic dependency; share: SharePluginStart; spaces: SpacesPluginStart; diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts index acec238176d9..be54f570cd8b 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts @@ -232,7 +232,7 @@ export const hasAdditionalContext = ( ): boolean => { return groupBy ? Array.isArray(groupBy) - ? groupBy.every((group) => validGroups.includes(group)) + ? groupBy.some((group) => validGroups.includes(group)) : validGroups.includes(groupBy) : false; }; diff --git a/x-pack/plugins/observability_solution/infra/server/routes/profiling/lib/fetch_profiling_functions.ts b/x-pack/plugins/observability_solution/infra/server/routes/profiling/lib/fetch_profiling_functions.ts index fdf2399be4fa..8e60772ede3c 100644 --- a/x-pack/plugins/observability_solution/infra/server/routes/profiling/lib/fetch_profiling_functions.ts +++ b/x-pack/plugins/observability_solution/infra/server/routes/profiling/lib/fetch_profiling_functions.ts @@ -20,7 +20,7 @@ export async function fetchProfilingFunctions( const startSecs = from / 1000; const endSecs = to / 1000; - return await profilingDataAccess.services.fetchFunction({ + return await profilingDataAccess.services.fetchFunctions({ core: coreRequestContext, esClient: coreRequestContext.elasticsearch.client.asCurrentUser, startIndex, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts index daaa5b27029c..639a1a416092 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/create_controller.ts @@ -59,7 +59,7 @@ export const createLogsExplorerControllerFactory = }); const discoverServices: LogsExplorerDiscoverServices = { data: customData, - history: () => customMemoryHistory, + history: customMemoryHistory, uiSettings: customUiSettings, filterManager: customData.query.filterManager, timefilter: customData.query.timefilter.timefilter, diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts b/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts index eb2f003f2662..f07c99bb0067 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/controller/custom_url_state_storage.ts @@ -9,7 +9,7 @@ import { createKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { createMemoryHistory } from 'history'; import { LogsExplorerDiscoverServices } from './types'; -type DiscoverHistory = ReturnType; +type DiscoverHistory = LogsExplorerDiscoverServices['history']; /** * Create a MemoryHistory instance. It is initialized with an application state diff --git a/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx b/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx index 79adfde85540..3e1b6fced333 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx +++ b/x-pack/plugins/observability_solution/logs_shared/public/components/log_ai_assistant/log_ai_assistant.tsx @@ -7,10 +7,9 @@ import React, { useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { - type Message, - MessageRole, - type ObservabilityAIAssistantPluginStart, +import type { + Message, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; import { LogEntryField } from '../../../common'; import { explainLogMessageTitle, similarLogMessagesTitle } from './translations'; @@ -20,53 +19,47 @@ export interface LogAIAssistantDocument { } export interface LogAIAssistantProps { - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; doc: LogAIAssistantDocument | undefined; } export const LogAIAssistant = ({ doc, - observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + observabilityAIAssistant: { + ObservabilityAIAssistantContextualInsight, + getContextualInsightMessages, + }, }: LogAIAssistantProps) => { const explainLogMessageMessages = useMemo(() => { if (!doc) { return undefined; } - const now = new Date().toISOString(); - - return [ - { - '@timestamp': now, - message: { - role: MessageRole.User, - content: `I'm looking at a log entry. Can you explain me what the log message means? Where it could be coming from, whether it is expected and whether it is an issue. Here's the context, serialized: ${JSON.stringify( - { logEntry: { fields: doc.fields } } - )} `, + return getContextualInsightMessages({ + message: + 'Can you explain what this log message means? Where it could be coming from, whether it is expected and whether it is an issue.', + instructions: JSON.stringify({ + logEntry: { + fields: doc.fields, }, - }, - ]; - }, [doc]); + }), + }); + }, [doc, getContextualInsightMessages]); const similarLogMessageMessages = useMemo(() => { if (!doc) { return undefined; } - const now = new Date().toISOString(); - const message = doc.fields.find((field) => field.field === 'message')?.value[0]; - return [ - { - '@timestamp': now, - message: { - role: MessageRole.User, - content: `I'm looking at a log entry. Can you construct a Kibana KQL query that I can enter in the search bar that gives me similar log entries, based on the \`message\` field: ${message}`, - }, - }, - ]; - }, [doc]); + return getContextualInsightMessages({ + message: `I'm looking at a log entry. Can you construct a Kibana KQL query that I can enter in the search bar that gives me similar log entries, based on the message field?`, + instructions: JSON.stringify({ + message, + }), + }); + }, [getContextualInsightMessages, doc]); return ( diff --git a/x-pack/plugins/observability_solution/logs_shared/public/types.ts b/x-pack/plugins/observability_solution/logs_shared/public/types.ts index da5d2ec49e62..ad16d788cb6d 100644 --- a/x-pack/plugins/observability_solution/logs_shared/public/types.ts +++ b/x-pack/plugins/observability_solution/logs_shared/public/types.ts @@ -8,7 +8,7 @@ import type { CoreSetup, CoreStart, Plugin as PluginClass } from '@kbn/core/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; -import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { SharePluginSetup } from '@kbn/share-plugin/public'; import { UiActionsStart } from '@kbn/ui-actions-plugin/public'; @@ -35,7 +35,7 @@ export interface LogsSharedClientSetupDeps { export interface LogsSharedClientStartDeps { data: DataPublicPluginStart; dataViews: DataViewsPublicPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; uiActions: UiActionsStart; } diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx index 7578f0979907..ad9b0f61e4ea 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx @@ -18,7 +18,7 @@ import { Rule } from '@kbn/alerting-plugin/common'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { type Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/public'; import { ALERT_END } from '@kbn/rule-data-utils'; import { CustomThresholdRuleTypeParams } from '../../types'; import { TopAlert } from '../../../..'; @@ -47,7 +47,10 @@ export function LogRateAnalysis({ services, }: AlertDetailsLogRateAnalysisProps) { const { - observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + observabilityAIAssistant: { + ObservabilityAIAssistantContextualInsight, + getContextualInsightMessages, + }, } = services; const [esSearchQuery, setEsSearchQuery] = useState(); const [logRateAnalysisParams, setLogRateAnalysisParams] = useState< @@ -162,18 +165,12 @@ export function LogRateAnalysis({ Do not repeat the full list of field names and field values back to the user. Do not guess, just say what you are sure of. Do not repeat the given instructions in your output.`; - const now = new Date().toISOString(); - - return [ - { - '@timestamp': now, - message: { - content, - role: MessageRole.User, - }, - }, - ]; - }, [logRateAnalysisParams]); + return getContextualInsightMessages({ + message: + 'Can you identify possible causes and remediations for these log rate analysis results', + instructions: content, + }); + }, [logRateAnalysisParams, getContextualInsightMessages]); if (!dataView || !esSearchQuery) return null; diff --git a/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts b/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts index 06196476e6cb..db791c3ba5b4 100644 --- a/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts +++ b/x-pack/plugins/observability_solution/observability/public/hooks/slo/use_fetch_group_by_cardinality.ts @@ -4,13 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { ALL_VALUE } from '@kbn/slo-schema'; +import { useCallback, useEffect, useState } from 'react'; +import { debounce } from 'lodash'; +import { ALL_VALUE, QuerySchema } from '@kbn/slo-schema'; import { useQuery } from '@tanstack/react-query'; import { lastValueFrom } from 'rxjs'; import { useKibana } from '../../utils/kibana_react'; +import { getElasticsearchQueryOrThrow } from '../../../common/utils/parse_kuery'; -export interface UseFetchIndexPatternFieldsResponse { +export interface UseFetchGroupByCardinalityResponse { isLoading: boolean; isSuccess: boolean; isError: boolean; @@ -29,13 +31,29 @@ const buildInstanceId = (groupBy: string | string[]): string => { export function useFetchGroupByCardinality( indexPattern: string, - timestampField: string, - groupBy: string | string[] -): UseFetchIndexPatternFieldsResponse { + timestampField: string = '@timestamp', + groupBy: string | string[], + filters?: QuerySchema +): UseFetchGroupByCardinalityResponse { const { data: dataService } = useKibana().services; + const serializedFilters = JSON.stringify(filters); + const [filtersState, setFiltersState] = useState(serializedFilters); + + // eslint-disable-next-line react-hooks/exhaustive-deps + const store = useCallback( + debounce((value: string) => setFiltersState(value), 800), + [] + ); + + useEffect(() => { + if (filtersState !== serializedFilters) { + store(serializedFilters); + } + }, [filtersState, serializedFilters, store]); + const { isLoading, isError, isSuccess, data } = useQuery({ - queryKey: ['fetchGroupByCardinality', indexPattern, timestampField, groupBy], + queryKey: ['fetchGroupByCardinality', indexPattern, timestampField, groupBy, filters], queryFn: async ({ signal }) => { try { const result = await lastValueFrom( @@ -45,7 +63,10 @@ export function useFetchGroupByCardinality( body: { query: { bool: { - filter: [{ range: { [timestampField]: { gte: 'now-24h' } } }], + filter: [ + { range: { [timestampField]: { gte: 'now-24h' } } }, + getElasticsearchQueryOrThrow(filters), + ], }, }, runtime_mappings: { @@ -76,7 +97,10 @@ export function useFetchGroupByCardinality( retry: false, refetchOnWindowFocus: false, enabled: - Boolean(indexPattern) && Boolean(timestampField) && Boolean(groupBy) && groupBy !== ALL_VALUE, + Boolean(indexPattern) && + Boolean(timestampField) && + Boolean(groupBy) && + ![groupBy].flat().includes(ALL_VALUE), }); return { isLoading, isError, isSuccess, data }; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx index 33a00564bc7e..ecc503dca594 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alerts/components/alert_actions.test.tsx @@ -45,7 +45,7 @@ mockUseKibanaReturnValue.services.cases.hooks.useCasesAddToExistingCaseModal.moc mockUseKibanaReturnValue.services.cases.helpers.canUseCases.mockReturnValue(allCasesPermissions()); -const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } = +const { ObservabilityAIAssistantContextualInsight } = observabilityAIAssistantPluginMock.createStartContract(); jest.mock('../../../utils/kibana_react', () => ({ @@ -78,7 +78,6 @@ jest.spyOn(pluginContext, 'usePluginContext').mockImplementation(() => ({ plugins: {} as ObservabilityPublicPluginsStart, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, - ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight, })); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx index bd916fc31beb..a7ca5fa38ffc 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/overview/components/header_menu/header_menu.tsx @@ -13,11 +13,7 @@ import { useKibana } from '../../../../utils/kibana_react'; import HeaderMenuPortal from './header_menu_portal'; export function HeaderMenu(): React.ReactElement | null { - const { - http, - theme, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - } = useKibana().services; + const { http, theme } = useKibana().services; const { appMountParameters } = usePluginContext(); @@ -27,11 +23,6 @@ export function HeaderMenu(): React.ReactElement | null { theme$={theme.theme$} > - {ObservabilityAIAssistantActionMenuItem && ( - - - - )} ({ useLocation: () => ({ @@ -28,7 +28,7 @@ jest.mock('react-router-dom', () => ({ useHistory: jest.fn(), })); -const { ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight } = +const { ObservabilityAIAssistantContextualInsight } = observabilityAIAssistantPluginMock.createStartContract(); describe('APMSection', () => { @@ -65,7 +65,6 @@ describe('APMSection', () => { plugins: {} as ObservabilityPublicPluginsStart, observabilityRuleTypeRegistry: createObservabilityRuleTypeRegistryMock(), ObservabilityPageTemplate: KibanaPageTemplate, - ObservabilityAIAssistantActionMenuItem, ObservabilityAIAssistantContextualInsight, })); }); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx index 614aaf3456de..8770375530e1 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/slo_details/components/error_budget_actions.tsx @@ -16,7 +16,7 @@ interface Props { export function ErrorBudgetActions({ setDashboardAttachmentReady }: Props) { const [isActionsPopoverOpen, setIsActionsPopoverOpen] = useState(false); - const handleAttachToDashboard = () => { + const handleAddToDashboard = () => { setIsActionsPopoverOpen(false); if (setDashboardAttachmentReady) { setDashboardAttachmentReady(true); @@ -38,12 +38,12 @@ export function ErrorBudgetActions({ setDashboardAttachmentReady }: Props) { - {i18n.translate('xpack.observability.slo.item.actions.attachToDashboard', { - defaultMessage: 'Attach to Dashboard', + {i18n.translate('xpack.observability.slo.item.actions.addToDashboard', { + defaultMessage: 'Add to Dashboard', })} diff --git a/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx b/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx index db3b8239c511..63252f228615 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/slo_edit/components/common/query_builder.tsx @@ -35,7 +35,7 @@ export function QueryBuilder(props: SearchBarProps) { return ( <> - + { + const handleAddToDashboard = () => { setIsActionsPopoverOpen(false); if (setDashboardAttachmentReady) { setDashboardAttachmentReady(true); @@ -213,12 +213,12 @@ export function SloItemActions({ , - {i18n.translate('xpack.observability.slo.item.actions.attachToDashboard', { - defaultMessage: 'Attach to Dashboard', + {i18n.translate('xpack.observability.slo.item.actions.addToDashboard', { + defaultMessage: 'Add to Dashboard', })} , ]} diff --git a/x-pack/plugins/observability_solution/observability/public/plugin.ts b/x-pack/plugins/observability_solution/observability/public/plugin.ts index a9d210742901..74cc276819f3 100644 --- a/x-pack/plugins/observability_solution/observability/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability/public/plugin.ts @@ -53,8 +53,8 @@ import { ExploratoryViewPublicStart } from '@kbn/exploratory-view-plugin/public' import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public'; import { LicensingPluginStart } from '@kbn/licensing-plugin/public'; import { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; import { SecurityPluginStart } from '@kbn/security-plugin/public'; import { SpacesPluginStart } from '@kbn/spaces-plugin/public'; @@ -119,7 +119,7 @@ export interface ObservabilityPublicPluginsSetup { data: DataPublicPluginSetup; fieldFormats: FieldFormatsSetup; observabilityShared: ObservabilitySharedPluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; share: SharePluginSetup; triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; home?: HomePublicPluginSetup; @@ -146,7 +146,7 @@ export interface ObservabilityPublicPluginsStart { lens: LensPublicStart; licensing: LicensingPluginStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; ruleTypeRegistry: RuleTypeRegistryContract; security: SecurityPluginStart; share: SharePluginStart; diff --git a/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts b/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts index cc21bd6944fa..7023ee1ddd4d 100644 --- a/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts +++ b/x-pack/plugins/observability_solution/observability/public/utils/slo/get_discover_link.ts @@ -5,9 +5,11 @@ * 2.0. */ import { DiscoverStart } from '@kbn/discover-plugin/public'; -import { kqlWithFiltersSchema, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import { ALL_VALUE, kqlWithFiltersSchema, SLOWithSummaryResponse } from '@kbn/slo-schema'; import { Filter, FilterStateStore, TimeRange } from '@kbn/es-query'; import { i18n } from '@kbn/i18n'; +import { v4 } from 'uuid'; +import { isEmpty } from 'lodash'; import { buildEsQuery } from '../build_es_query'; function createDiscoverLocator( @@ -16,6 +18,7 @@ function createDiscoverLocator( showGood = false, timeRange?: TimeRange ) { + const indexId = v4(); const filters: Filter[] = []; if (kqlWithFiltersSchema.is(slo.indicator.params.filter)) { @@ -33,8 +36,15 @@ function createDiscoverLocator( const goodFilters = kqlWithFiltersSchema.is(slo.indicator.params.good) ? slo.indicator.params.good.filters : []; + const totalKuery = kqlWithFiltersSchema.is(slo.indicator.params.total) + ? slo.indicator.params.total.kqlQuery + : slo.indicator.params.total; + const totalFilters = kqlWithFiltersSchema.is(slo.indicator.params.total) + ? slo.indicator.params.total.filters + : []; const customGoodFilter = buildEsQuery({ kuery: goodKuery, filters: goodFilters }); - const customBadFilter = { bool: { must_not: customGoodFilter } }; + const customTotalFilter = buildEsQuery({ kuery: totalKuery, filters: totalFilters }); + const customBadFilter = { bool: { filter: customTotalFilter, must_not: customGoodFilter } }; filters.push({ $state: { store: FilterStateStore.APP_STATE }, @@ -44,8 +54,8 @@ function createDiscoverLocator( defaultMessage: 'Good events', }), disabled: !showGood, - index: `${slo.indicator.params.index}-id`, value: JSON.stringify(customGoodFilter), + index: indexId, }, query: customGoodFilter as Record, }); @@ -58,11 +68,56 @@ function createDiscoverLocator( defaultMessage: 'Bad events', }), disabled: !showBad, - index: `${slo.indicator.params.index}-id`, value: JSON.stringify(customBadFilter), + index: indexId, }, query: customBadFilter as Record, }); + + filters.push({ + $state: { store: FilterStateStore.APP_STATE }, + meta: { + type: 'custom', + alias: i18n.translate('xpack.observability.slo.sloDetails.totalFilterLabel', { + defaultMessage: 'Total events', + }), + value: JSON.stringify(customTotalFilter), + index: indexId, + }, + query: customTotalFilter as Record, + }); + } + + const groupBy = [slo.groupBy].flat(); + + if ( + !isEmpty(slo.groupings) && + groupBy.length > 0 && + groupBy.every((field) => field === ALL_VALUE) === false + ) { + groupBy.forEach((field) => { + filters.push({ + meta: { + disabled: false, + negate: false, + alias: null, + key: field, + params: { + query: slo.groupings[field], + }, + type: 'phrase', + index: indexId, + }, + $state: { + store: FilterStateStore.APP_STATE, + }, + query: { + match_phrase: { + [field]: slo.groupings[field], + }, + }, + }); + }); } const timeFieldName = @@ -80,7 +135,7 @@ function createDiscoverLocator( }, filters, dataViewSpec: { - id: `${slo.indicator.params.index}-id`, + id: indexId, title: slo.indicator.params.index, timeFieldName, }, diff --git a/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts b/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts index f16155792dc5..5b3ba4b0965a 100644 --- a/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts +++ b/x-pack/plugins/observability_solution/observability/server/assets/component_templates/slo_summary_mappings_template.ts @@ -74,6 +74,7 @@ export const getSLOSummaryMappingsTemplate = ( type: 'keyword', }, indicator: { + dynamic: false, properties: { type: { type: 'keyword', diff --git a/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts b/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts index d279c925f86b..627407104a6e 100644 --- a/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts +++ b/x-pack/plugins/observability_solution/observability/server/assets/ingest_templates/slo_summary_pipeline_template.ts @@ -6,10 +6,16 @@ */ import { timeslicesBudgetingMethodSchema } from '@kbn/slo-schema'; +import { IngestPutPipelineRequest } from '@elastic/elasticsearch/lib/api/types'; +import { IBasePath } from '@kbn/core-http-server'; import { getSLOSummaryPipelineId, SLO_RESOURCES_VERSION } from '../../../common/slo/constants'; import { SLO } from '../../domain/models'; -export const getSLOSummaryPipelineTemplate = (slo: SLO, spaceId: string) => { +export const getSLOSummaryPipelineTemplate = ( + slo: SLO, + spaceId: string, + basePath: IBasePath +): IngestPutPipelineRequest => { const errorBudgetEstimated = slo.budgetingMethod === 'occurrences' && slo.timeWindow.type === 'calendarAligned'; @@ -160,6 +166,32 @@ export const getSLOSummaryPipelineTemplate = (slo: SLO, spaceId: string) => { value: spaceId, }, }, + { + set: { + field: 'slo.indicator.params', + value: slo.indicator.params, + ignore_failure: true, + }, + }, + { + set: { + field: 'slo.createdAt', + value: slo.createdAt, + }, + }, + { + set: { + field: 'slo.updatedAt', + value: slo.updatedAt, + }, + }, + { + set: { + field: 'kibanaUrl', + value: basePath.publicBaseUrl ?? '', + ignore_failure: true, + }, + }, ], _meta: { description: `Ingest pipeline for SLO summary data [id: ${slo.id}, revision: ${slo.revision}]`, diff --git a/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts b/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts index 1c8340617648..8e0432ab05ba 100644 --- a/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts +++ b/x-pack/plugins/observability_solution/observability/server/routes/slo/route.ts @@ -94,6 +94,7 @@ const createSLORoute = createObservabilityServerRoute({ (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; const esClient = (await context.core).elasticsearch.client.asCurrentUser; + const basePath = dependencies.pluginsSetup.core.http.basePath; const soClient = (await context.core).savedObjects.client; const repository = new KibanaSavedObjectsSLORepository(soClient, logger); const transformManager = new DefaultTransformManager( @@ -114,7 +115,8 @@ const createSLORoute = createObservabilityServerRoute({ transformManager, summaryTransformManager, logger, - spaceId + spaceId, + basePath ); const response = await createSLO.execute(params.body); @@ -135,7 +137,7 @@ const inspectSLORoute = createObservabilityServerRoute({ const spaceId = (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; - + const basePath = dependencies.pluginsSetup.core.http.basePath; const esClient = (await context.core).elasticsearch.client.asCurrentUser; const soClient = (await context.core).savedObjects.client; const repository = new KibanaSavedObjectsSLORepository(soClient, logger); @@ -157,7 +159,8 @@ const inspectSLORoute = createObservabilityServerRoute({ transformManager, summaryTransformManager, logger, - spaceId + spaceId, + basePath ); return createSLO.inspect(params.body); @@ -176,6 +179,8 @@ const updateSLORoute = createObservabilityServerRoute({ const spaceId = (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; + + const basePath = dependencies.pluginsSetup.core.http.basePath; const esClient = (await context.core).elasticsearch.client.asCurrentUser; const soClient = (await context.core).savedObjects.client; @@ -198,7 +203,8 @@ const updateSLORoute = createObservabilityServerRoute({ summaryTransformManager, esClient, logger, - spaceId + spaceId, + basePath ); const response = await updateSLO.execute(params.path.id, params.body); @@ -360,6 +366,7 @@ const resetSLORoute = createObservabilityServerRoute({ (await dependencies.spaces?.spacesService?.getActiveSpace(request))?.id ?? 'default'; const soClient = (await context.core).savedObjects.client; const esClient = (await context.core).elasticsearch.client.asCurrentUser; + const basePath = dependencies.pluginsSetup.core.http.basePath; const repository = new KibanaSavedObjectsSLORepository(soClient, logger); const transformManager = new DefaultTransformManager( @@ -380,7 +387,8 @@ const resetSLORoute = createObservabilityServerRoute({ transformManager, summaryTransformManager, logger, - spaceId + spaceId, + basePath ); const response = await resetSLO.execute(params.path.id); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap index 7c0ea00b409c..0633b94da7bd 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/create_slo.test.ts.snap @@ -133,6 +133,38 @@ Array [ "value": "some-space", }, }, + Object { + "set": Object { + "field": "slo.indicator.params", + "ignore_failure": true, + "value": Object { + "environment": "irrelevant", + "index": "metrics-apm*", + "service": "irrelevant", + "transactionName": "irrelevant", + "transactionType": "irrelevant", + }, + }, + }, + Object { + "set": Object { + "field": "slo.createdAt", + "value": 2024-01-01T00:00:00.000Z, + }, + }, + Object { + "set": Object { + "field": "slo.updatedAt", + "value": 2024-01-01T00:00:00.000Z, + }, + }, + Object { + "set": Object { + "field": "kibanaUrl", + "ignore_failure": true, + "value": "http://myhost.com/mock-server-basepath", + }, + }, ], }, ] diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap index d70d8ebfc007..aa8eb458184a 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/__snapshots__/reset_slo.test.ts.snap @@ -331,6 +331,39 @@ exports[`ResetSLO resets all associated resources 8`] = ` "value": "some-space", }, }, + Object { + "set": Object { + "field": "slo.indicator.params", + "ignore_failure": true, + "value": Object { + "environment": "irrelevant", + "index": "metrics-apm*", + "service": "irrelevant", + "threshold": 500, + "transactionName": "irrelevant", + "transactionType": "irrelevant", + }, + }, + }, + Object { + "set": Object { + "field": "slo.createdAt", + "value": 2023-01-01T00:00:00.000Z, + }, + }, + Object { + "set": Object { + "field": "slo.updatedAt", + "value": 2023-01-01T00:00:00.000Z, + }, + }, + Object { + "set": Object { + "field": "kibanaUrl", + "ignore_failure": true, + "value": "http://myhost.com/mock-server-basepath", + }, + }, ], }, ], diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts index fe8de00589db..8f6bee0fe34c 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.test.ts @@ -8,6 +8,7 @@ import { ElasticsearchClientMock, elasticsearchServiceMock, + httpServiceMock, loggingSystemMock, } from '@kbn/core/server/mocks'; import { MockedLogger } from '@kbn/logging-mocks'; @@ -30,6 +31,8 @@ describe('CreateSLO', () => { let mockSummaryTransformManager: jest.Mocked; let createSLO: CreateSLO; + jest.useFakeTimers().setSystemTime(new Date('2024-01-01')); + beforeEach(() => { esClientMock = elasticsearchServiceMock.createElasticsearchClient(); loggerMock = loggingSystemMock.createLogger(); @@ -42,7 +45,8 @@ describe('CreateSLO', () => { mockTransformManager, mockSummaryTransformManager, loggerMock, - 'some-space' + 'some-space', + httpServiceMock.createStartContract().basePath ); }); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts index 89e8c7165f39..f46b868b4607 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/create_slo.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server'; import { ALL_VALUE, CreateSLOParams, CreateSLOResponse } from '@kbn/slo-schema'; import { v4 as uuidv4 } from 'uuid'; import { TransformPutTransformRequest } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; @@ -31,7 +31,8 @@ export class CreateSLO { private transformManager: TransformManager, private summaryTransformManager: TransformManager, private logger: Logger, - private spaceId: string + private spaceId: string, + private basePath: IBasePath ) {} public async execute(params: CreateSLOParams): Promise { @@ -46,7 +47,10 @@ export class CreateSLO { await this.transformManager.install(slo); await this.transformManager.start(rollupTransformId); await retryTransientEsErrors( - () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)), + () => + this.esClient.ingest.putPipeline( + getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath) + ), { logger: this.logger } ); @@ -95,7 +99,7 @@ export class CreateSLO { validateSLO(slo); const rollUpTransform = this.transformManager.inspect(slo); - const pipeline = getSLOSummaryPipelineTemplate(slo, this.spaceId); + const pipeline = getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath); const summaryTransform = this.summaryTransformManager.inspect(slo); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts index feae6695fbd3..775520192742 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.test.ts @@ -6,7 +6,11 @@ */ import { ElasticsearchClient } from '@kbn/core/server'; -import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { + elasticsearchServiceMock, + httpServiceMock, + loggingSystemMock, +} from '@kbn/core/server/mocks'; import { MockedLogger } from '@kbn/logging-mocks'; import { SLO_MODEL_VERSION } from '../../../common/slo/constants'; @@ -42,7 +46,8 @@ describe('ResetSLO', () => { mockTransformManager, mockSummaryTransformManager, loggerMock, - 'some-space' + 'some-space', + httpServiceMock.createStartContract().basePath ); jest.useFakeTimers().setSystemTime(TEST_DATE); }); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts index 8c4a37476197..9fabd255b70d 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/reset_slo.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server'; import { resetSLOResponseSchema } from '@kbn/slo-schema'; import { getSLOSummaryPipelineId, @@ -29,7 +29,8 @@ export class ResetSLO { private transformManager: TransformManager, private summaryTransformManager: TransformManager, private logger: Logger, - private spaceId: string + private spaceId: string, + private basePath: IBasePath ) {} public async execute(sloId: string) { @@ -49,7 +50,10 @@ export class ResetSLO { await this.transformManager.install(slo); await this.transformManager.start(rollupTransformId); await retryTransientEsErrors( - () => this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(slo, this.spaceId)), + () => + this.esClient.ingest.putPipeline( + getSLOSummaryPipelineTemplate(slo, this.spaceId, this.basePath) + ), { logger: this.logger } ); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts index a8642cfa921f..d93e4549ca3d 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.test.ts @@ -6,7 +6,11 @@ */ import { ElasticsearchClient } from '@kbn/core/server'; -import { elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { + elasticsearchServiceMock, + httpServiceMock, + loggingSystemMock, +} from '@kbn/core/server/mocks'; import { MockedLogger } from '@kbn/logging-mocks'; import { UpdateSLOParams } from '@kbn/slo-schema'; import { cloneDeep, omit, pick } from 'lodash'; @@ -54,7 +58,8 @@ describe('UpdateSLO', () => { mockSummaryTransformManager, mockEsClient, loggerMock, - 'some-space' + 'some-space', + httpServiceMock.createStartContract().basePath ); }); diff --git a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts index 1a73d54decbe..ac00fa9daa21 100644 --- a/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts +++ b/x-pack/plugins/observability_solution/observability/server/services/slo/update_slo.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ElasticsearchClient, IBasePath, Logger } from '@kbn/core/server'; import { UpdateSLOParams, UpdateSLOResponse, updateSLOResponseSchema } from '@kbn/slo-schema'; import { isEqual, pick } from 'lodash'; import { @@ -31,7 +31,8 @@ export class UpdateSLO { private summaryTransformManager: TransformManager, private esClient: ElasticsearchClient, private logger: Logger, - private spaceId: string + private spaceId: string, + private basePath: IBasePath ) {} public async execute(sloId: string, params: UpdateSLOParams): Promise { @@ -66,7 +67,9 @@ export class UpdateSLO { // At this point, we still need to update the summary pipeline to include the changes (name, desc, tags, ...) in the summary index await retryTransientEsErrors( () => - this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)), + this.esClient.ingest.putPipeline( + getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId, this.basePath) + ), { logger: this.logger } ); @@ -82,7 +85,9 @@ export class UpdateSLO { await retryTransientEsErrors( () => - this.esClient.ingest.putPipeline(getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId)), + this.esClient.ingest.putPipeline( + getSLOSummaryPipelineTemplate(updatedSlo, this.spaceId, this.basePath) + ), { logger: this.logger } ); diff --git a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts index 532e093d3d3f..61ae08864f30 100644 --- a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts @@ -575,7 +575,7 @@ export const uiSettings: Record = { name: i18n.translate('xpack.observability.apmEnableTransactionProfiling', { defaultMessage: 'Enable Universal Profiling on Transaction view', }), - value: false, + value: true, schema: schema.boolean(), requiresPageReload: true, }, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts index b082478bba10..b5588e70638d 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import { Message } from './types'; +import type { Message } from './types'; export enum StreamingChatResponseEventType { ChatCompletionChunk = 'chatCompletionChunk', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.ts new file mode 100644 index 000000000000..65adc60ae88f --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/function_visibility.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 FunctionVisibility { + AssistantOnly = 'assistantOnly', + UserOnly = 'userOnly', + Internal = 'internal', + All = 'all', +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts new file mode 100644 index 000000000000..ce07d3de0330 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/types.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { JSONSchema } from 'json-schema-to-ts'; +import type { Observable } from 'rxjs'; +import { ChatCompletionChunkEvent, MessageAddEvent } from '../conversation_complete'; +import { FunctionVisibility } from './function_visibility'; +export { FunctionVisibility }; + +export type CompatibleJSONSchema = Exclude; + +export interface ContextDefinition { + name: string; + description: string; +} + +export type FunctionResponse = + | { + content?: any; + data?: any; + } + | Observable; + +export interface FunctionDefinition< + TParameters extends CompatibleJSONSchema = CompatibleJSONSchema +> { + name: string; + description: string; + visibility?: FunctionVisibility; + descriptionForUser?: string; + parameters: TParameters; + contexts: string[]; +} + +export type RegisterContextDefinition = (options: ContextDefinition) => void; + +export type ContextRegistry = Map; +export type FunctionRegistry = Map; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts index 2973552bf8cf..d5881c4a36cc 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/visualize_esql.ts @@ -4,8 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { FromSchema } from 'json-schema-to-ts'; -import { FunctionVisibility } from '../types'; export enum VisualizeESQLUserIntention { generateQueryOnly = 'generateQueryOnly', @@ -26,27 +24,3 @@ export enum VisualizeESQLUserIntention { export const VISUALIZE_ESQL_USER_INTENTIONS: VisualizeESQLUserIntention[] = Object.values( VisualizeESQLUserIntention ); - -export const visualizeESQLFunction = { - name: 'visualize_query', - visibility: FunctionVisibility.UserOnly, - description: 'Use this function to visualize charts for ES|QL queries.', - descriptionForUser: 'Use this function to visualize charts for ES|QL queries.', - parameters: { - type: 'object', - additionalProperties: true, - properties: { - query: { - type: 'string', - }, - intention: { - type: 'string', - enum: VISUALIZE_ESQL_USER_INTENTIONS, - }, - }, - required: ['query', 'intention'], - } as const, - contexts: ['core'], -}; - -export type VisualizeESQLFunctionArguments = FromSchema; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts index b51e9a52ee8c..8b939e13627a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/index.ts @@ -6,5 +6,34 @@ */ export type { Message, Conversation, KnowledgeBaseEntry } from './types'; -export { KnowledgeBaseEntryRole } from './types'; -export { MessageRole } from './types'; +export type { ConversationCreateRequest } from './types'; +export { KnowledgeBaseEntryRole, MessageRole } from './types'; +export type { FunctionDefinition } from './functions/types'; +export { FunctionVisibility } from './functions/function_visibility'; +export { + VISUALIZE_ESQL_USER_INTENTIONS, + VisualizeESQLUserIntention, +} from './functions/visualize_esql'; + +export type { + ChatCompletionChunkEvent, + ConversationCreateEvent, + ConversationUpdateEvent, + MessageAddEvent, + ChatCompletionErrorEvent, + BufferFlushEvent, + StreamingChatResponseEvent, + StreamingChatResponseEventWithoutError, +} from './conversation_complete'; +export { + StreamingChatResponseEventType, + ChatCompletionErrorCode, + ChatCompletionError, + createTokenLimitReachedError, + createConversationNotFoundError, + createInternalServerError, + isTokenLimitReachedError, + isChatCompletionError, +} from './conversation_complete'; + +export { isSupportedConnectorType } from './connectors'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts index 563d5aa893df..b32161ca0195 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/types.ts @@ -5,19 +5,6 @@ * 2.0. */ -import type { JSONSchema } from 'json-schema-to-ts'; -import type OpenAI from 'openai'; -import type { Observable } from 'rxjs'; -import { ChatCompletionChunkEvent, MessageAddEvent } from './conversation_complete'; - -export type CreateChatCompletionResponseChunk = Omit & { - choices: Array< - Omit & { - delta: { content?: string; function_call?: { name?: string; arguments?: string } }; - } - >; -}; - export enum MessageRole { System = 'system', Assistant = 'assistant', @@ -90,43 +77,6 @@ export interface KnowledgeBaseEntry { role: KnowledgeBaseEntryRole; } -export type CompatibleJSONSchema = Exclude; - -export interface ContextDefinition { - name: string; - description: string; -} - -export type FunctionResponse = - | { - content?: any; - data?: any; - } - | Observable; - -export enum FunctionVisibility { - AssistantOnly = 'assistantOnly', - UserOnly = 'userOnly', - Internal = 'internal', - All = 'all', -} - -export interface FunctionDefinition< - TParameters extends CompatibleJSONSchema = CompatibleJSONSchema -> { - name: string; - description: string; - visibility?: FunctionVisibility; - descriptionForUser?: string; - parameters: TParameters; - contexts: string[]; -} - -export type RegisterContextDefinition = (options: ContextDefinition) => void; - -export type ContextRegistry = Map; -export type FunctionRegistry = Map; - export interface ObservabilityAIAssistantScreenContext { screenDescription?: string; data?: Array<{ diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts index 3de6c3bce248..63b7661ee105 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/filter_function_definitions.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { FunctionDefinition } from '../types'; +import type { FunctionDefinition } from '../functions/types'; export function filterFunctionDefinitions({ contexts, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts index 8b6ef27ee8eb..97a127abd0a9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/common/utils/process_openai_stream.ts @@ -4,6 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import OpenAI from 'openai'; import { filter, map, Observable, tap } from 'rxjs'; import { v4 } from 'uuid'; import { @@ -12,7 +13,14 @@ import { createTokenLimitReachedError, StreamingChatResponseEventType, } from '../conversation_complete'; -import type { CreateChatCompletionResponseChunk } from '../types'; + +export type CreateChatCompletionResponseChunk = Omit & { + choices: Array< + Omit & { + delta: { content?: string; function_call?: { name?: string; arguments?: string } }; + } + >; +}; export function processOpenAiStream() { return (source: Observable): Observable => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc b/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc index 35ac1eb25167..09b7fb7ec534 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/kibana.jsonc @@ -8,25 +8,15 @@ "browser": true, "configPath": ["xpack", "observabilityAIAssistant"], "requiredPlugins": [ - "alerting", "actions", - "data", - "dataViews", "features", - "lens", "licensing", - "observabilityShared", - "ruleRegistry", "security", - "share", "taskManager", - "triggersActionsUi", - "uiActions", - "dataViews", - "ml" ], "requiredBundles": ["kibanaReact", "kibanaUtils"], "optionalPlugins": ["cloud", "serverless"], - "extraPublicDirs": [] + "extraPublicDirs": [], + "runtimePluginDependencies": [ "ml" ] } } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts index c6b382f84db2..86b8f14bde9e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/index.ts @@ -7,33 +7,17 @@ import type { AnalyticsServiceSetup, AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { Message } from '../../common'; -import { - eventType as chatFeedbackEventType, - chatFeedbackEventSchema, - ChatFeedback, -} from './schemas/chat_feedback'; -import { - eventType as insightFeedbackEventType, - insightFeedbackEventSchema, - InsightFeedback, -} from './schemas/insight_feedback'; -import { - eventType as userSentPromptEventType, - userSentPromptEventSchema, -} from './schemas/user_sent_prompt'; +import { chatFeedbackEventSchema, ChatFeedback } from './schemas/chat_feedback'; +import { insightFeedbackEventSchema, InsightFeedback } from './schemas/insight_feedback'; +import { userSentPromptEventSchema } from './schemas/user_sent_prompt'; +import { ObservabilityAIAssistantTelemetryEventType } from './telemetry_event_type'; const schemas = [chatFeedbackEventSchema, insightFeedbackEventSchema, userSentPromptEventSchema]; -export const TELEMETRY = { - [chatFeedbackEventType]: chatFeedbackEventType, - [insightFeedbackEventType]: insightFeedbackEventType, - [userSentPromptEventType]: userSentPromptEventType, -} as const; - export type TelemetryEventTypeWithPayload = - | { type: typeof chatFeedbackEventType; payload: ChatFeedback } - | { type: typeof insightFeedbackEventType; payload: InsightFeedback } - | { type: typeof userSentPromptEventType; payload: Message }; + | { type: ObservabilityAIAssistantTelemetryEventType.ChatFeedback; payload: ChatFeedback } + | { type: ObservabilityAIAssistantTelemetryEventType.InsightFeedback; payload: InsightFeedback } + | { type: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat; payload: Message }; export const registerTelemetryEventTypes = (analytics: AnalyticsServiceSetup) => { schemas.forEach((schema) => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts index cd302ef68e75..be9c65a8e352 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/chat_feedback.ts @@ -7,7 +7,8 @@ import type { EventTypeOpts } from '@kbn/analytics-client'; import type { Message, Conversation } from '../../../common'; -import type { Feedback } from '../../components/feedback_buttons'; +import type { Feedback } from '../../components/buttons/feedback_buttons'; +import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type'; import { messageSchema } from './common'; export interface ChatFeedback { @@ -18,10 +19,8 @@ export interface ChatFeedback { conversation: Conversation; } -export const eventType = 'observability_ai_assistant_chat_feedback'; - export const chatFeedbackEventSchema: EventTypeOpts = { - eventType, + eventType: ObservabilityAIAssistantTelemetryEventType.ChatFeedback, schema: { messageWithFeedback: { properties: { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts index 5142beaa216a..7f8a37cf95ae 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/insight_feedback.ts @@ -7,7 +7,8 @@ import type { EventTypeOpts } from '@kbn/analytics-client'; import type { Message } from '../../../common'; -import type { Feedback } from '../../components/feedback_buttons'; +import type { Feedback } from '../../components/buttons/feedback_buttons'; +import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type'; import { messageSchema } from './common'; export interface InsightFeedback { @@ -15,10 +16,8 @@ export interface InsightFeedback { message: Message; } -export const eventType = 'observability_ai_assistant_insight_feedback'; - export const insightFeedbackEventSchema: EventTypeOpts = { - eventType, + eventType: ObservabilityAIAssistantTelemetryEventType.InsightFeedback, schema: { feedback: { type: 'text', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts index 4d24dd146573..b7ce5f2dacb3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/schemas/user_sent_prompt.ts @@ -7,10 +7,10 @@ import type { EventTypeOpts } from '@kbn/analytics-client'; import type { Message } from '../../../common'; +import { ObservabilityAIAssistantTelemetryEventType } from '../telemetry_event_type'; import { messageSchema } from './common'; -export const eventType = 'observability_ai_assistant_user_sent_prompt_in_chat'; export const userSentPromptEventSchema: EventTypeOpts = { - eventType, + eventType: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat, schema: messageSchema, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts new file mode 100644 index 000000000000..e15ae317a773 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/analytics/telemetry_event_type.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum ObservabilityAIAssistantTelemetryEventType { + ChatFeedback = 'observability_ai_assistant_chat_feedback', + InsightFeedback = 'observability_ai_assistant_insight_feedback', + UserSentPromptInChat = 'observability_ai_assistant_user_sent_prompt_in_chat', +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx deleted file mode 100644 index e0f77f598594..000000000000 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/action_menu_item/action_menu_item.tsx +++ /dev/null @@ -1,117 +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, { useEffect, useMemo, useState } from 'react'; -import datemath from '@elastic/datemath'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiHeaderLink, - EuiLoadingSpinner, - useCurrentEuiBreakpoint, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { css } from '@emotion/css'; -import moment from 'moment'; -import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; -import { useAbortableAsync } from '../../hooks/use_abortable_async'; -import { useObservabilityAIAssistant } from '../../hooks/use_observability_ai_assistant'; -import { AssistantAvatar } from '../assistant_avatar'; -import { ChatFlyout } from '../chat/chat_flyout'; -import { useKibana } from '../../hooks/use_kibana'; - -const buttonLabelClassName = css` - display: none; -`; - -export function ObservabilityAIAssistantActionMenuItem() { - const service = useObservabilityAIAssistant(); - const breakpoint = useCurrentEuiBreakpoint(); - - const { plugins } = useKibana().services; - - const [isOpen, setIsOpen] = useState(false); - - const chatService = useAbortableAsync( - ({ signal }) => { - if (!isOpen) { - return Promise.resolve(undefined); - } - return service.start({ signal }); - }, - [service, isOpen] - ); - - const initialMessages = useMemo(() => [], []); - - useEffect(() => { - const keyboardListener = (event: KeyboardEvent) => { - if (event.ctrlKey && event.code === 'Semicolon') { - setIsOpen(true); - } - }; - - window.addEventListener('keypress', keyboardListener); - - return () => { - window.removeEventListener('keypress', keyboardListener); - }; - }, []); - - const { from, to } = plugins.start.data.query.timefilter.timefilter.getTime(); - useEffect(() => { - const start = datemath.parse(from)?.format() ?? moment().subtract(1, 'day').toISOString(); - const end = datemath.parse(to)?.format() ?? moment().toISOString(); - - return service.setScreenContext({ - screenDescription: `The user is looking at ${window.location.href}. The current time range is ${start} - ${end}.`, - }); - }, [service, from, to]); - - if (!service.isEnabled()) { - return null; - } - - return ( - <> - { - setIsOpen(() => true); - }} - > - - - {!isOpen || chatService.value ? ( - - ) : ( - - )} - - - {i18n.translate('xpack.observabilityAiAssistant.actionMenuItemLabel', { - defaultMessage: 'AI Assistant', - })} - - - - {chatService.value ? ( - - { - setIsOpen(false); - }} - /> - - ) : null} - - ); -} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx index 422bd42f16c3..64ac351bad0a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/assistant_avatar.tsx @@ -9,6 +9,7 @@ import React, { ReactNode } from 'react'; export interface AssistantAvatarProps { size?: keyof typeof sizeMap; children?: ReactNode; + css?: React.SVGProps['css']; } export const sizeMap = { @@ -19,14 +20,16 @@ export const sizeMap = { xs: 16, }; -export function AssistantAvatar({ size = 's' }: AssistantAvatarProps) { +export function AssistantAvatar({ size = 's', css }: AssistantAvatarProps) { + const sizePx = sizeMap[size]; return ( diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/feedback_buttons.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/feedback_buttons.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx index 6315d493078c..ecaa9143b1c5 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/feedback_buttons.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/feedback_buttons.tsx @@ -8,7 +8,7 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonEmpty, EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; -import { useKibana } from '../hooks/use_kibana'; +import { useKibana } from '../../hooks/use_kibana'; export type Feedback = 'positive' | 'negative'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx index 2d2743488f76..2b8487fa45c9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_controls.tsx @@ -8,9 +8,9 @@ import React from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiPanel, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/css'; -import { Feedback, FeedbackButtons } from '../feedback_buttons'; -import { RegenerateResponseButton } from '../buttons/regenerate_response_button'; +import { Feedback, FeedbackButtons } from '../buttons/feedback_buttons'; import { StopGeneratingButton } from '../buttons/stop_generating_button'; +import { RegenerateResponseButton } from '../buttons/regenerate_response_button'; const containerClassName = css` padding-top: 4px; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx index 575cf1d5a444..93f2e4c41307 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight.tsx @@ -18,8 +18,7 @@ import { i18n } from '@kbn/i18n'; import { cloneDeep, last } from 'lodash'; import React, { useEffect, useRef, useState } from 'react'; import { MessageRole, type Message } from '../../../common/types'; -import { sendEvent, TELEMETRY } from '../../analytics'; -import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; +import { ObservabilityAIAssistantChatServiceContext } from '../../context/observability_ai_assistant_chat_service_context'; import { useAbortableAsync } from '../../hooks/use_abortable_async'; import { ChatState, useChat } from '../../hooks/use_chat'; import { useGenAIConnectors } from '../../hooks/use_genai_connectors'; @@ -30,13 +29,13 @@ import { getConnectorsManagementHref } from '../../utils/get_connectors_manageme import { RegenerateResponseButton } from '../buttons/regenerate_response_button'; import { StartChatButton } from '../buttons/start_chat_button'; import { StopGeneratingButton } from '../buttons/stop_generating_button'; -import { ChatFlyout } from '../chat/chat_flyout'; -import { FeedbackButtons } from '../feedback_buttons'; +import { FeedbackButtons } from '../buttons/feedback_buttons'; import { MessagePanel } from '../message_panel/message_panel'; import { MessageText } from '../message_panel/message_text'; import { MissingCredentialsCallout } from '../missing_credentials_callout'; import { InsightBase } from './insight_base'; import { ActionsMenu } from './actions_menu'; +import { ObservabilityAIAssistantTelemetryEventType } from '../../analytics/telemetry_event_type'; function getLastMessageOfType(messages: Message[], role: MessageRole) { return last(messages.filter((msg) => msg.message.role === role)); @@ -64,14 +63,15 @@ function ChatContent({ persist: false, }); - const lastAssistantResponse = getLastMessageOfType(messages, MessageRole.Assistant); + const lastAssistantResponse = getLastMessageOfType( + messages.slice(initialMessagesRef.current.length + 1), + MessageRole.Assistant + ); useEffect(() => { next(initialMessagesRef.current); }, [next]); - const [isOpen, setIsOpen] = useState(false); - return ( <> { if (lastAssistantResponse) { - sendEvent(chatService.analytics, { - type: TELEMETRY.observability_ai_assistant_insight_feedback, + chatService.sendAnalyticsEvent({ + type: ObservabilityAIAssistantTelemetryEventType.InsightFeedback, payload: { feedback, message: lastAssistantResponse, @@ -115,7 +115,10 @@ function ChatContent({ { - setIsOpen(() => true); + service.conversations.openNewConversation({ + messages, + title: defaultTitle, + }); }} /> @@ -123,15 +126,6 @@ function ChatContent({ ) } /> - { - setIsOpen(false); - }} - initialMessages={messages} - initialTitle={defaultTitle} - startedFrom="contextualInsight" - /> ); } @@ -328,9 +322,9 @@ export function Insight({ messages, title, dataTestSubj }: InsightProps) { isOpen={isInsightOpen} > {chatService.value ? ( - + {children} - + ) : null} ); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight_base.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight_base.stories.tsx index b0a09caa805a..eb1065a0d86f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight_base.stories.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/insight/insight_base.stories.tsx @@ -14,7 +14,7 @@ import { InsightBase as Component, InsightBaseProps } from './insight_base'; import { KibanaReactStorybookDecorator } from '../../utils/storybook_decorator'; import { MessagePanel } from '../message_panel/message_panel'; import { MessageText } from '../message_panel/message_text'; -import { FeedbackButtons } from '../feedback_buttons'; +import { FeedbackButtons } from '../buttons/feedback_buttons'; import { RegenerateResponseButton } from '../buttons/regenerate_response_button'; import { StartChatButton } from '../buttons/start_chat_button'; import { ActionsMenu } from './actions_menu'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_panel.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_panel.stories.tsx index 9af3e3cf285b..c80004b54ff2 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_panel.stories.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/message_panel/message_panel.stories.tsx @@ -8,7 +8,7 @@ import { EuiPanel } from '@elastic/eui'; import { ComponentMeta, ComponentStoryObj } from '@storybook/react'; import dedent from 'dedent'; import React from 'react'; -import { FeedbackButtons } from '../feedback_buttons'; +import { FeedbackButtons } from '../buttons/feedback_buttons'; import { MessagePanel as Component } from './message_panel'; import { MessageText } from './message_text'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_provider.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_context.tsx similarity index 81% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_provider.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_context.tsx index 9f14464461fa..33f45b953799 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_provider.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_chat_service_context.tsx @@ -11,6 +11,3 @@ import type { ObservabilityAIAssistantChatService } from '../types'; export const ObservabilityAIAssistantChatServiceContext = createContext< ObservabilityAIAssistantChatService | undefined >(undefined); - -export const ObservabilityAIAssistantChatServiceProvider = - ObservabilityAIAssistantChatServiceContext.Provider; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_provider.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_context.tsx similarity index 80% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_provider.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_context.tsx index 4ec1faa18b27..ad3befa1f81e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_provider.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/context/observability_ai_assistant_multipane_flyout_context.tsx @@ -11,6 +11,3 @@ import type { ChatFlyoutSecondSlotHandler } from '../components/chat/types'; export const ObservabilityAIAssistantMultipaneFlyoutContext = createContext< ChatFlyoutSecondSlotHandler | undefined >(undefined); - -export const ObservabilityAIAssistantMultipaneFlyoutProvider = - ObservabilityAIAssistantMultipaneFlyoutContext.Provider; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts index 2cc37ea2780f..d120bab32b1c 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.test.ts @@ -6,15 +6,17 @@ */ import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; import { act, renderHook, type RenderHookResult } from '@testing-library/react-hooks'; -import { Observable, Subject } from 'rxjs'; -import { MessageRole } from '../../common'; +import { Subject } from 'rxjs'; +import { + MessageRole, + type ObservabilityAIAssistantChatService, + type ObservabilityAIAssistantService, +} from '..'; import { createInternalServerError, StreamingChatResponseEventType, - StreamingChatResponseEventWithoutError, -} from '../../common/conversation_complete'; -import { mockService } from '../mock'; -import type { ObservabilityAIAssistantChatService } from '../types'; + type StreamingChatResponseEventWithoutError, +} from '../../common'; import { ChatState, useChat, type UseChatProps, type UseChatResult } from './use_chat'; import * as useKibanaModule from './use_kibana'; @@ -23,11 +25,7 @@ type MockedChatService = DeeplyMockedKeys; const mockChatService: MockedChatService = { chat: jest.fn(), complete: jest.fn(), - analytics: { - optIn: jest.fn(), - reportEvent: jest.fn(), - telemetryCounter$: new Observable() as any, - }, + sendAnalyticsEvent: jest.fn(), getContexts: jest.fn().mockReturnValue([{ name: 'core', description: '' }]), getFunctions: jest.fn().mockReturnValue([]), hasFunction: jest.fn().mockReturnValue(false), @@ -70,7 +68,9 @@ describe('useChat', () => { }, ], persist: false, - service: mockService, + service: { + getScreenContexts: () => [], + } as unknown as ObservabilityAIAssistantService, } as UseChatProps, }); }); @@ -97,7 +97,9 @@ describe('useChat', () => { chatService: mockChatService, initialMessages: [], persist: false, - service: mockService, + service: { + getScreenContexts: () => [], + } as unknown as ObservabilityAIAssistantService, } as UseChatProps, }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts index b99d87df1bd9..1ccc48ddb393 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_chat.ts @@ -9,18 +9,20 @@ import { i18n } from '@kbn/i18n'; import { merge } from 'lodash'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { AbortError } from '@kbn/kibana-utils-plugin/common'; -import { MessageRole, type Message } from '../../common'; +import type { NotificationsStart } from '@kbn/core/public'; import { + MessageRole, + type Message, ConversationCreateEvent, ConversationUpdateEvent, isTokenLimitReachedError, StreamingChatResponseEventType, -} from '../../common/conversation_complete'; -import { getAssistantSetupMessage } from '../service/get_assistant_setup_message'; -import type { - ObservabilityAIAssistantChatService, - ObservabilityAIAssistantService, -} from '../types'; +} from '../../common'; +import { + getAssistantSystemMessage, + type ObservabilityAIAssistantChatService, + type ObservabilityAIAssistantService, +} from '..'; import { useKibana } from './use_kibana'; import { useOnce } from './use_once'; import { useUserPreferredLanguage } from './use_user_preferred_language'; @@ -47,7 +49,8 @@ export interface UseChatResult { stop: () => void; } -export interface UseChatProps { +interface UseChatPropsWithoutContext { + notifications: NotificationsStart; initialMessages: Message[]; initialConversationId?: string; service: ObservabilityAIAssistantService; @@ -58,20 +61,23 @@ export interface UseChatProps { onChatComplete?: (messages: Message[]) => void; } -export function useChat({ +export type UseChatProps = Omit; + +function useChatWithoutContext({ initialMessages, initialConversationId, + notifications, service, chatService, connectorId, onConversationUpdate, onChatComplete, persist, -}: UseChatProps): UseChatResult { +}: UseChatPropsWithoutContext): UseChatResult { const [chatState, setChatState] = useState(ChatState.Ready); const systemMessage = useMemo(() => { - return getAssistantSetupMessage({ contexts: chatService.getContexts() }); + return getAssistantSystemMessage({ contexts: chatService.getContexts() }); }, [chatService]); useOnce(initialMessages); @@ -86,10 +92,6 @@ export function useChat({ const abortControllerRef = useRef(new AbortController()); - const { - services: { notifications }, - } = useKibana(); - const { getPreferredLanguage } = useUserPreferredLanguage(); const onChatCompleteRef = useRef(onChatComplete); @@ -294,3 +296,23 @@ export function useChat({ }, }; } + +export function useChat(props: UseChatProps) { + const { + services: { notifications }, + } = useKibana(); + + return useChatWithoutContext({ + ...props, + notifications, + }); +} + +export function createUseChat({ notifications }: { notifications: NotificationsStart }) { + return (parameters: Omit) => { + return useChatWithoutContext({ + ...parameters, + notifications, + }); + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_chat_service.ts index c0e0301741a3..4959a1cfeb9b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_chat_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_chat_service.ts @@ -5,16 +5,22 @@ * 2.0. */ import { useContext } from 'react'; -import { ObservabilityAIAssistantChatServiceContext } from '../context/observability_ai_assistant_chat_service_provider'; +import { ObservabilityAIAssistantChatServiceContext } from '../context/observability_ai_assistant_chat_service_context'; +import type { ObservabilityAIAssistantChatService } from '../types'; export function useObservabilityAIAssistantChatService() { - const services = useContext(ObservabilityAIAssistantChatServiceContext); - - if (!services) { + const service = useContext(ObservabilityAIAssistantChatServiceContext); + if (!service) { throw new Error( - 'ObservabilityAIAssistantChatServiceContext not set. Did you wrap your component in ``?' + 'ObservabilityAIAssistantChatServiceContext not set. Did you wrap your component in ``?' ); } - return services; + return useObservabilityAIAssistantChatServiceWithService(service); +} + +function useObservabilityAIAssistantChatServiceWithService( + service: ObservabilityAIAssistantChatService +) { + return service; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts index a5e33a843386..a3bb72746a86 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/index.ts @@ -7,20 +7,60 @@ import type { PluginInitializer, PluginInitializerContext } from '@kbn/core/public'; import { ObservabilityAIAssistantPlugin } from './plugin'; import type { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantPluginSetupDependencies, ObservabilityAIAssistantPluginStartDependencies, ConfigSchema, ObservabilityAIAssistantService, + ObservabilityAIAssistantChatService, + RegisterRenderFunctionDefinition, + RenderFunction, } from './types'; export type { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantService, + ObservabilityAIAssistantChatService, + RegisterRenderFunctionDefinition, + RenderFunction, }; +export { AssistantAvatar } from './components/assistant_avatar'; +export { ConnectorSelectorBase } from './components/connector_selector/connector_selector_base'; +export { useAbortableAsync, type AbortableAsyncState } from './hooks/use_abortable_async'; + +export { createStorybookChatService, createStorybookService } from './storybook_mock'; + +export { ChatState } from './hooks/use_chat'; + +export { FeedbackButtons, type Feedback } from './components/buttons/feedback_buttons'; +export { ChatItemControls } from './components/chat/chat_item_controls'; + +export { FailedToLoadResponse } from './components/message_panel/failed_to_load_response'; + +export { MessageText } from './components/message_panel/message_text'; + +export { + type ChatActionClickHandler, + ChatActionClickType, + type ChatActionClickPayload, +} from './components/chat/types'; + +export { + VisualizeESQLUserIntention, + VISUALIZE_ESQL_USER_INTENTIONS, +} from '../common/functions/visualize_esql'; + +export { getAssistantSystemMessage } from './service/get_assistant_system_message'; + +export { isSupportedConnectorType } from '../common'; +export { FunctionVisibility } from '../common'; + +export type { TelemetryEventTypeWithPayload } from './analytics'; +export { ObservabilityAIAssistantTelemetryEventType } from './analytics/telemetry_event_type'; + export type { Conversation, Message, KnowledgeBaseEntry } from '../common'; export { MessageRole, KnowledgeBaseEntryRole } from '../common'; @@ -30,9 +70,11 @@ export type { APIReturnType, } from './api'; +export type { UseChatResult } from './hooks/use_chat'; + export const plugin: PluginInitializer< - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantPluginSetupDependencies, ObservabilityAIAssistantPluginStartDependencies > = (pluginInitializerContext: PluginInitializerContext) => diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx index 6a0f725173a7..fb6438dbe858 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/mock.tsx @@ -5,8 +5,6 @@ * 2.0. */ import { i18n } from '@kbn/i18n'; -import type { AuthenticatedUser } from '@kbn/security-plugin-types-common'; -import type { SharePluginStart } from '@kbn/share-plugin/public'; import { noop } from 'lodash'; import React from 'react'; import { Observable } from 'rxjs'; @@ -14,18 +12,14 @@ import type { StreamingChatResponseEventWithoutError } from '../common/conversat import type { ObservabilityAIAssistantAPIClient } from './api'; import type { ObservabilityAIAssistantChatService, - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantService, } from './types'; import { buildFunctionElasticsearch, buildFunctionServiceSummary } from './utils/builders'; export const mockChatService: ObservabilityAIAssistantChatService = { - analytics: { - optIn: () => {}, - reportEvent: () => {}, - telemetryCounter$: new Observable(), - }, + sendAnalyticsEvent: noop, chat: (options) => new Observable(), complete: (options) => new Observable(), getContexts: () => [], @@ -48,43 +42,27 @@ export const mockService: ObservabilityAIAssistantService = { return mockChatService; }, callApi: {} as ObservabilityAIAssistantAPIClient, - getCurrentUser: async (): Promise => ({ - username: 'user', - roles: [], - enabled: true, - authentication_realm: { name: 'foo', type: '' }, - lookup_realm: { name: 'foo', type: '' }, - authentication_provider: { name: '', type: '' }, - authentication_type: '', - elastic_cloud_user: false, - }), - getLicense: () => new Observable(), - getLicenseManagementLocator: () => - ({ - url: {}, - navigate: () => {}, - } as unknown as SharePluginStart), register: () => {}, setScreenContext: () => noop, getScreenContexts: () => [], + conversations: { + openNewConversation: noop, + predefinedConversation$: new Observable(), + }, }; -function createSetupContract(): ObservabilityAIAssistantPluginSetup { +function createSetupContract(): ObservabilityAIAssistantPublicSetup { return {}; } -function createStartContract(): ObservabilityAIAssistantPluginStart { +function createStartContract(): ObservabilityAIAssistantPublicStart { return { service: mockService, - - ObservabilityAIAssistantActionMenuItem: (() => ( - // eslint-disable-next-line @kbn/i18n/strings_should_be_translated_with_i18n -
Im a button
- )) as unknown as ObservabilityAIAssistantPluginStart['ObservabilityAIAssistantActionMenuItem'], - ObservabilityAIAssistantContextualInsight: ( - // eslint-disable-next-line @kbn/i18n/strings_should_be_translated_with_i18n -
I give insight
- ) as unknown as ObservabilityAIAssistantPluginStart['ObservabilityAIAssistantContextualInsight'], + ObservabilityAIAssistantContextualInsight: (() => <>) as any, + ObservabilityAIAssistantChatServiceContext: React.createContext(undefined), + ObservabilityAIAssistantMultipaneFlyoutContext: React.createContext(undefined), + useChat: () => ({} as any), + useObservabilityAIAssistantChatService: () => mockChatService, useGenAIConnectors: () => ({ loading: false, selectConnector: () => {}, @@ -96,6 +74,7 @@ function createStartContract(): ObservabilityAIAssistantPluginStart { setSelectedLanguage: () => {}, getPreferredLanguage: () => 'English', }), + getContextualInsightMessages: () => [], }; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/plugin.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/plugin.tsx index e00302653906..1e82b135a837 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/plugin.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/plugin.tsx @@ -4,39 +4,36 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { ComponentType, lazy, Ref } from 'react'; -import ReactDOM from 'react-dom'; -import { - DEFAULT_APP_CATEGORIES, - type AppMountParameters, - type CoreSetup, - type CoreStart, - type Plugin, - type PluginInitializerContext, -} from '@kbn/core/public'; -import { i18n } from '@kbn/i18n'; -import type { Logger } from '@kbn/logging'; + +import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import type { Logger } from '@kbn/logging'; import { withSuspense } from '@kbn/shared-ux-utility'; -import { createService } from './service/create_service'; +import React, { type ComponentType, lazy, type Ref } from 'react'; +import { registerTelemetryEventTypes } from './analytics'; +import { ObservabilityAIAssistantChatServiceContext } from './context/observability_ai_assistant_chat_service_context'; +import { ObservabilityAIAssistantMultipaneFlyoutContext } from './context/observability_ai_assistant_multipane_flyout_context'; +import { ObservabilityAIAssistantProvider } from './context/observability_ai_assistant_provider'; +import { createUseChat } from './hooks/use_chat'; import { useGenAIConnectorsWithoutContext } from './hooks/use_genai_connectors'; +import { useObservabilityAIAssistantChatService } from './hooks/use_observability_ai_assistant_chat_service'; +import { createService } from './service/create_service'; import type { ConfigSchema, - ObservabilityAIAssistantPluginSetup, ObservabilityAIAssistantPluginSetupDependencies, - ObservabilityAIAssistantPluginStart, ObservabilityAIAssistantPluginStartDependencies, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantService, } from './types'; -import { registerTelemetryEventTypes } from './analytics'; -import { ObservabilityAIAssistantProvider } from './context/observability_ai_assistant_provider'; import { useUserPreferredLanguage } from './hooks/use_user_preferred_language'; +import { getContextualInsightMessages } from './utils/get_contextual_insight_messages'; export class ObservabilityAIAssistantPlugin implements Plugin< - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, ObservabilityAIAssistantPluginSetupDependencies, ObservabilityAIAssistantPluginStartDependencies > @@ -50,48 +47,7 @@ export class ObservabilityAIAssistantPlugin setup( coreSetup: CoreSetup, pluginsSetup: ObservabilityAIAssistantPluginSetupDependencies - ): ObservabilityAIAssistantPluginSetup { - coreSetup.application.register({ - id: 'observabilityAIAssistant', - title: i18n.translate('xpack.observabilityAiAssistant.appTitle', { - defaultMessage: 'Observability AI Assistant', - }), - euiIconType: 'logoObservability', - appRoute: '/app/observabilityAIAssistant', - category: DEFAULT_APP_CATEGORIES.observability, - visibleIn: [], - deepLinks: [ - { - id: 'conversations', - title: i18n.translate('xpack.observabilityAiAssistant.conversationsDeepLinkTitle', { - defaultMessage: 'Conversations', - }), - path: '/conversations/new', - }, - ], - mount: async (appMountParameters: AppMountParameters) => { - // Load application bundle and Get start services - const [{ Application }, [coreStart, pluginsStart]] = await Promise.all([ - import('./application'), - coreSetup.getStartServices(), - ]); - - ReactDOM.render( - , - appMountParameters.element - ); - - return () => { - ReactDOM.unmountComponentAtNode(appMountParameters.element); - }; - }, - }); - + ): ObservabilityAIAssistantPublicSetup { registerTelemetryEventTypes(coreSetup.analytics); return {}; @@ -100,26 +56,13 @@ export class ObservabilityAIAssistantPlugin start( coreStart: CoreStart, pluginsStart: ObservabilityAIAssistantPluginStartDependencies - ): ObservabilityAIAssistantPluginStart { + ): ObservabilityAIAssistantPublicStart { const service = (this.service = createService({ analytics: coreStart.analytics, coreStart, enabled: coreStart.application.capabilities.observabilityAIAssistant.show === true, - licenseStart: pluginsStart.licensing, - securityStart: pluginsStart.security, - shareStart: pluginsStart.share, })); - service.register(async ({ registerRenderFunction }) => { - const mod = await import('./functions'); - - return mod.registerFunctions({ - service, - pluginsStart, - registerRenderFunction, - }); - }); - const withProviders =

( Component: ComponentType

, services: Omit & { @@ -146,7 +89,13 @@ export class ObservabilityAIAssistantPlugin return { service, useGenAIConnectors: () => useGenAIConnectorsWithoutContext(service), + useChat: createUseChat({ + notifications: coreStart.notifications, + }), useUserPreferredLanguage, + ObservabilityAIAssistantMultipaneFlyoutContext, + ObservabilityAIAssistantChatServiceContext, + useObservabilityAIAssistantChatService, ObservabilityAIAssistantContextualInsight: isEnabled ? withSuspense( withProviders( @@ -157,18 +106,7 @@ export class ObservabilityAIAssistantPlugin ) ) : null, - ObservabilityAIAssistantActionMenuItem: isEnabled - ? withSuspense( - withProviders( - lazy(() => - import('./components/action_menu_item/action_menu_item').then((m) => ({ - default: m.ObservabilityAIAssistantActionMenuItem, - })) - ), - services - ) - ) - : null, + getContextualInsightMessages, }; } } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts index 919662acad8b..257a657ce648 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_chat_service.ts @@ -17,13 +17,14 @@ import { type StreamingChatResponseEvent, } from '../../common/conversation_complete'; import { + FunctionRegistry, + FunctionResponse, FunctionVisibility, - type FunctionRegistry, - type FunctionResponse, - type Message, -} from '../../common/types'; +} from '../../common/functions/types'; +import { type Message } from '../../common/types'; import { filterFunctionDefinitions } from '../../common/utils/filter_function_definitions'; import { throwSerializedChatCompletionErrors } from '../../common/utils/throw_serialized_chat_completion_errors'; +import { sendEvent } from '../analytics'; import type { ObservabilityAIAssistantAPIClient } from '../api'; import type { ChatRegistrationRenderFunction, @@ -117,7 +118,9 @@ export async function createChatService({ }; return { - analytics, + sendAnalyticsEvent: (event) => { + sendEvent(analytics, event); + }, renderFunction: (name, args, response, onActionClick) => { const fn = renderFunctionRegistry.get(name); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts index 64946cc862d5..caef109f237f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_mock_chat_service.ts @@ -5,9 +5,7 @@ * 2.0. */ -import type { TelemetryCounter } from '@kbn/analytics-client'; import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; -import { Observable } from 'rxjs'; import type { ObservabilityAIAssistantChatService } from '../types'; type MockedChatService = DeeplyMockedKeys; @@ -16,11 +14,7 @@ export const createMockChatService = (): MockedChatService => { const mockChatService: MockedChatService = { chat: jest.fn(), complete: jest.fn(), - analytics: { - optIn: jest.fn(), - reportEvent: jest.fn(), - telemetryCounter$: new Observable() as any, - }, + sendAnalyticsEvent: jest.fn(), getContexts: jest.fn().mockReturnValue([{ name: 'core', description: '' }]), getFunctions: jest.fn().mockReturnValue([]), hasFunction: jest.fn().mockReturnValue(false), diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_service.ts index 1b6c68e6a1f6..0db5b9cf8b5b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_service.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/create_service.ts @@ -6,11 +6,9 @@ */ import type { AnalyticsServiceStart, CoreStart } from '@kbn/core/public'; -import type { LicensingPluginStart } from '@kbn/licensing-plugin/public'; -import type { SecurityPluginStart } from '@kbn/security-plugin/public'; -import type { SharePluginStart } from '@kbn/share-plugin/public'; -import { remove } from 'lodash'; -import { ObservabilityAIAssistantScreenContext } from '../../common/types'; +import { without } from 'lodash'; +import { BehaviorSubject, Subject } from 'rxjs'; +import type { Message, ObservabilityAIAssistantScreenContext } from '../../common/types'; import { createCallObservabilityAIAssistantAPI } from '../api'; import type { ChatRegistrationRenderFunction, ObservabilityAIAssistantService } from '../types'; @@ -18,22 +16,17 @@ export function createService({ analytics, coreStart, enabled, - licenseStart, - securityStart, - shareStart, }: { analytics: AnalyticsServiceStart; coreStart: CoreStart; enabled: boolean; - licenseStart: LicensingPluginStart; - securityStart: SecurityPluginStart; - shareStart: SharePluginStart; }): ObservabilityAIAssistantService { const client = createCallObservabilityAIAssistantAPI(coreStart); const registrations: ChatRegistrationRenderFunction[] = []; - const screenContexts: ObservabilityAIAssistantScreenContext[] = []; + const screenContexts$ = new BehaviorSubject([]); + const predefinedConversation$ = new Subject<{ messages: Message[]; title?: string }>(); return { isEnabled: () => { @@ -47,17 +40,20 @@ export function createService({ return await mod.createChatService({ analytics, client, signal, registrations }); }, callApi: client, - getCurrentUser: () => securityStart.authc.getCurrentUser(), - getLicense: () => licenseStart.license$, - getLicenseManagementLocator: () => shareStart, + getScreenContexts() { + return screenContexts$.value; + }, setScreenContext: (context: ObservabilityAIAssistantScreenContext) => { - screenContexts.push(context); + screenContexts$.next(screenContexts$.value.concat(context)); return () => { - remove(screenContexts, context); + screenContexts$.next(without(screenContexts$.value, context)); }; }, - getScreenContexts: () => { - return screenContexts; + conversations: { + openNewConversation: ({ messages, title }: { messages: Message[]; title?: string }) => { + predefinedConversation$.next({ messages, title }); + }, + predefinedConversation$: predefinedConversation$.asObservable(), }, }; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_setup_message.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts similarity index 75% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_setup_message.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts index c7e865606aaf..b1050b8caa4a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_setup_message.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/service/get_assistant_system_message.ts @@ -7,9 +7,14 @@ import { without } from 'lodash'; import { MessageRole } from '../../common'; -import type { ContextDefinition, Message } from '../../common/types'; +import { ContextDefinition } from '../../common/functions/types'; +import type { Message } from '../../common/types'; -export function getAssistantSetupMessage({ contexts }: { contexts: ContextDefinition[] }): Message { +export function getAssistantSystemMessage({ + contexts, +}: { + contexts: ContextDefinition[]; +}): Message { const coreContext = contexts.find((context) => context.name === 'core')!; const otherContexts = without(contexts.concat(), coreContext); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx new file mode 100644 index 000000000000..1b2d71a71b34 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/storybook_mock.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { noop } from 'lodash'; +import React from 'react'; +import { Observable } from 'rxjs'; +import type { StreamingChatResponseEventWithoutError } from '../common/conversation_complete'; +import type { ObservabilityAIAssistantAPIClient } from './api'; +import type { ObservabilityAIAssistantChatService, ObservabilityAIAssistantService } from './types'; +import { buildFunctionElasticsearch, buildFunctionServiceSummary } from './utils/builders'; + +export const createStorybookChatService = (): ObservabilityAIAssistantChatService => ({ + sendAnalyticsEvent: () => {}, + chat: (options) => new Observable(), + complete: (options) => new Observable(), + getContexts: () => [], + getFunctions: () => [buildFunctionElasticsearch(), buildFunctionServiceSummary()], + renderFunction: (name) => ( +

+ {i18n.translate('xpack.observabilityAiAssistant.chatService.div.helloLabel', { + defaultMessage: 'Hello', + })} + {name} +
+ ), + hasFunction: () => true, + hasRenderFunction: () => true, +}); + +export const createStorybookService = (): ObservabilityAIAssistantService => ({ + isEnabled: () => true, + start: async () => { + return createStorybookChatService(); + }, + callApi: {} as ObservabilityAIAssistantAPIClient, + register: () => {}, + setScreenContext: () => noop, + getScreenContexts: () => [], + conversations: { + openNewConversation: noop, + predefinedConversation$: new Observable(), + }, +}); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts index e21dd5d37b73..d8c719dfa036 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/types.ts @@ -5,56 +5,38 @@ * 2.0. */ -import type { ForwardRefExoticComponent, RefAttributes } from 'react'; +import type { LicensingPluginStart } from '@kbn/licensing-plugin/public'; +import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public'; +import type { SecurityPluginSetup, SecurityPluginStart } from '@kbn/security-plugin/public'; import type { Observable } from 'rxjs'; -import type { AnalyticsServiceStart } from '@kbn/core/public'; -import type { FeaturesPluginStart, FeaturesPluginSetup } from '@kbn/features-plugin/public'; -import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; -import type { - DataViewsPublicPluginSetup, - DataViewsPublicPluginStart, -} from '@kbn/data-views-plugin/public'; -import type { LensPublicSetup, LensPublicStart } from '@kbn/lens-plugin/public'; -import type { ILicense, LicensingPluginStart } from '@kbn/licensing-plugin/public'; -import { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public'; -import type { - ObservabilitySharedPluginSetup, - ObservabilitySharedPluginStart, -} from '@kbn/observability-shared-plugin/public'; -import type { - AuthenticatedUser, - SecurityPluginSetup, - SecurityPluginStart, -} from '@kbn/security-plugin/public'; -import type { SharePluginStart } from '@kbn/share-plugin/public'; -import { WithSuspenseExtendedDeps } from '@kbn/shared-ux-utility'; -import type { - TriggersAndActionsUIPublicPluginSetup, - TriggersAndActionsUIPublicPluginStart, -} from '@kbn/triggers-actions-ui-plugin/public'; -import { DataPublicPluginSetup, DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { StreamingChatResponseEventWithoutError } from '../common/conversation_complete'; import type { ContextDefinition, FunctionDefinition, FunctionResponse, +} from '../common/functions/types'; +import type { Message, ObservabilityAIAssistantScreenContext, PendingMessage, } from '../common/types'; -import type { ChatActionClickHandler } from './components/chat/types'; +import type { TelemetryEventTypeWithPayload } from './analytics'; import type { ObservabilityAIAssistantAPIClient } from './api'; +import type { ChatActionClickHandler } from './components/chat/types'; import type { InsightProps } from './components/insight/insight'; +import { ObservabilityAIAssistantChatServiceContext } from './context/observability_ai_assistant_chat_service_context'; +import { ObservabilityAIAssistantMultipaneFlyoutContext } from './context/observability_ai_assistant_multipane_flyout_context'; +import { useChat } from './hooks/use_chat'; import type { UseGenAIConnectorsResult } from './hooks/use_genai_connectors'; +import { useObservabilityAIAssistantChatService } from './hooks/use_observability_ai_assistant_chat_service'; import type { UseUserPreferredLanguageResult } from './hooks/use_user_preferred_language'; /* eslint-disable @typescript-eslint/no-empty-interface*/ -export type { CreateChatCompletionResponseChunk } from '../common/types'; export type { PendingMessage }; export interface ObservabilityAIAssistantChatService { - analytics: AnalyticsServiceStart; + sendAnalyticsEvent: (event: TelemetryEventTypeWithPayload) => void; chat: ( name: string, options: { @@ -85,16 +67,19 @@ export interface ObservabilityAIAssistantChatService { ) => React.ReactNode; } +export interface ObservabilityAIAssistantConversationService { + openNewConversation: ({}: { messages: Message[]; title?: string }) => void; + predefinedConversation$: Observable<{ messages: Message[]; title?: string }>; +} + export interface ObservabilityAIAssistantService { - isEnabled: () => boolean; callApi: ObservabilityAIAssistantAPIClient; - getCurrentUser: () => Promise; - getLicense: () => Observable; - getLicenseManagementLocator: () => SharePluginStart; + isEnabled: () => boolean; start: ({}: { signal: AbortSignal }) => Promise; register: (fn: ChatRegistrationRenderFunction) => void; setScreenContext: (screenContext: ObservabilityAIAssistantScreenContext) => () => void; getScreenContexts: () => ObservabilityAIAssistantScreenContext[]; + conversations: ObservabilityAIAssistantConversationService; } export type RenderFunction = (options: { @@ -115,39 +100,27 @@ export type ChatRegistrationRenderFunction = ({}: { export interface ConfigSchema {} export interface ObservabilityAIAssistantPluginSetupDependencies { - data: DataPublicPluginSetup; - dataViews: DataViewsPublicPluginSetup; - features: FeaturesPluginSetup; - lens: LensPublicSetup; - observabilityShared: ObservabilitySharedPluginSetup; + licensing: {}; security: SecurityPluginSetup; - triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; ml: MlPluginSetup; } export interface ObservabilityAIAssistantPluginStartDependencies { - data: DataPublicPluginStart; - dataViews: DataViewsPublicPluginStart; - features: FeaturesPluginStart; - lens: LensPublicStart; licensing: LicensingPluginStart; - observabilityShared: ObservabilitySharedPluginStart; security: SecurityPluginStart; - share: SharePluginStart; - triggersActionsUi: TriggersAndActionsUIPublicPluginStart; - uiActions: UiActionsStart; ml: MlPluginStart; } -export interface ObservabilityAIAssistantPluginSetup {} +export interface ObservabilityAIAssistantPublicSetup {} -export interface ObservabilityAIAssistantPluginStart { +export interface ObservabilityAIAssistantPublicStart { service: ObservabilityAIAssistantService; ObservabilityAIAssistantContextualInsight: React.ForwardRefExoticComponent | null; - ObservabilityAIAssistantActionMenuItem: ForwardRefExoticComponent< - Pick & WithSuspenseExtendedDeps, 'css' | 'key' | 'analytics'> & - RefAttributes<{}> - > | null; + ObservabilityAIAssistantMultipaneFlyoutContext: typeof ObservabilityAIAssistantMultipaneFlyoutContext; + ObservabilityAIAssistantChatServiceContext: typeof ObservabilityAIAssistantChatServiceContext; + useObservabilityAIAssistantChatService: typeof useObservabilityAIAssistantChatService; useGenAIConnectors: () => UseGenAIConnectorsResult; + useChat: typeof useChat; useUserPreferredLanguage: () => UseUserPreferredLanguageResult; + getContextualInsightMessages: ({}: { message: string; instructions: string }) => Message[]; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/builders.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/builders.ts index 6ba40e8bc692..a7f9df09b47a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/builders.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/builders.ts @@ -5,124 +5,7 @@ * 2.0. */ -import { merge, uniqueId } from 'lodash'; -import { DeepPartial } from 'utility-types'; -import { - type Conversation, - type FunctionDefinition, - type Message, - MessageRole, -} from '../../common/types'; -import { getAssistantSetupMessage } from '../service/get_assistant_setup_message'; - -type BuildMessageProps = DeepPartial & { - message: { - role: MessageRole; - function_call?: { - name: string; - trigger: MessageRole.Assistant | MessageRole.User | MessageRole.Elastic; - }; - }; -}; - -export function buildMessage(params: BuildMessageProps): Message { - return merge( - { - '@timestamp': new Date().toISOString(), - }, - params - ); -} - -export function buildSystemMessage( - params?: Omit & { - message: DeepPartial>; - } -) { - return buildMessage( - merge({}, params, { - message: { role: MessageRole.System }, - }) - ); -} - -export function buildUserMessage( - params?: Omit & { - message?: DeepPartial>; - } -) { - return buildMessage( - merge( - { - message: { - content: "What's a function?", - }, - }, - params, - { - message: { role: MessageRole.User }, - } - ) - ); -} - -export function buildAssistantMessage( - params?: Omit & { - message: DeepPartial>; - } -) { - return buildMessage( - merge( - { - message: { - content: `In computer programming and mathematics, a function is a fundamental concept that represents a relationship between input values and output values. It takes one or more input values (also known as arguments or parameters) and processes them to produce a result, which is the output of the function. The input values are passed to the function, and the function performs a specific set of operations or calculations on those inputs to produce the desired output. - A function is often defined with a name, which serves as an identifier to call and use the function in the code. It can be thought of as a reusable block of code that can be executed whenever needed, and it helps in organizing code and making it more modular and maintainable.`, - }, - }, - params, - { - message: { role: MessageRole.Assistant }, - } - ) - ); -} - -export function buildFunctionResponseMessage( - params?: Omit & { - message: DeepPartial>; - } -) { - return buildUserMessage( - merge( - {}, - { - message: { - name: 'leftpad', - }, - ...params, - } - ) - ); -} - -export function buildConversation(params?: Partial) { - return { - '@timestamp': '', - user: { - name: 'foo', - }, - conversation: { - id: uniqueId(), - title: '', - last_updated: '', - }, - messages: [getAssistantSetupMessage({ contexts: [] })], - labels: {}, - numeric_labels: {}, - namespace: '', - ...params, - }; -} +import type { FunctionDefinition } from '../../common/functions/types'; export function buildFunction(): FunctionDefinition { return { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_contextual_insight_messages.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_contextual_insight_messages.ts new file mode 100644 index 000000000000..782ac3fddbee --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_contextual_insight_messages.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 { type Message, MessageRole } from '../../common'; + +export function getContextualInsightMessages({ + message, + instructions, +}: { + message: string; + instructions: string; +}): Message[] { + return [ + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: message, + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.Assistant, + function_call: { + name: 'get_contextual_insight_instructions', + trigger: MessageRole.Assistant, + arguments: JSON.stringify({}), + }, + }, + }, + { + '@timestamp': new Date().toISOString(), + message: { + role: MessageRole.User, + content: JSON.stringify({ + instructions, + }), + name: 'get_contextual_insight_instructions', + }, + }, + ]; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/storybook_decorator.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/storybook_decorator.tsx index 0914bedbf82f..55af1a4ee71f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/storybook_decorator.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/storybook_decorator.tsx @@ -6,29 +6,20 @@ */ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import React, { ComponentType } from 'react'; -import { ObservabilityAIAssistantChatServiceProvider } from '../context/observability_ai_assistant_chat_service_provider'; +import { ObservabilityAIAssistantChatServiceContext } from '../context/observability_ai_assistant_chat_service_context'; import { ObservabilityAIAssistantProvider } from '../context/observability_ai_assistant_provider'; -// eslint-disable-next-line @kbn/imports/no_boundary_crossing -import { mockChatService, mockService } from '../mock'; +import { createStorybookService, createStorybookChatService } from '../storybook_mock'; + +const mockService = createStorybookService(); +const mockChatService = createStorybookChatService(); export function KibanaReactStorybookDecorator(Story: ComponentType) { return ( - { - if (setting === 'dateFormat') { - return 'MMM D, YYYY HH:mm'; - } - }, - }, - }} - > + - + - + ); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/scripts/evaluation/kibana_client.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/scripts/evaluation/kibana_client.ts index 4d4220721cd2..89c74661b972 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/scripts/evaluation/kibana_client.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/scripts/evaluation/kibana_client.ts @@ -22,13 +22,14 @@ import { StreamingChatResponseEvent, StreamingChatResponseEventType, } from '../../common/conversation_complete'; -import { FunctionDefinition, ObservabilityAIAssistantScreenContext } from '../../common/types'; +import { ObservabilityAIAssistantScreenContext } from '../../common/types'; import { concatenateChatCompletionChunks } from '../../common/utils/concatenate_chat_completion_chunks'; import { throwSerializedChatCompletionErrors } from '../../common/utils/throw_serialized_chat_completion_errors'; import { APIReturnType, ObservabilityAIAssistantAPIClientRequestParamsOf } from '../../public'; -import { getAssistantSetupMessage } from '../../public/service/get_assistant_setup_message'; +import { getAssistantSystemMessage } from '../../public/service/get_assistant_system_message'; import { streamIntoObservable } from '../../server/service/util/stream_into_observable'; import { EvaluationResult } from './types'; +import { FunctionDefinition } from '../../common/functions/types'; // eslint-disable-next-line spaced-comment /// @@ -260,7 +261,7 @@ export class KibanaClient { chat: async (message) => { const { functionDefinitions, contextDefinitions } = await getFunctions(); const messages = [ - getAssistantSetupMessage({ contexts: contextDefinitions }), + getAssistantSystemMessage({ contexts: contextDefinitions }), ...getMessages(message).map((msg) => ({ message: msg, '@timestamp': new Date().toISOString(), @@ -297,7 +298,7 @@ export class KibanaClient { const { contextDefinitions } = await getFunctions(); const messages = [ - getAssistantSetupMessage({ contexts: contextDefinitions }), + getAssistantSystemMessage({ contexts: contextDefinitions }), ...getMessages(messagesArg!).map((msg) => ({ message: msg, '@timestamp': new Date().toISOString(), diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts index d255397d21c6..225a248b160a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/context.ts @@ -15,7 +15,8 @@ import { compact, last, omit } from 'lodash'; import { lastValueFrom, Observable } from 'rxjs'; import { FunctionRegistrationParameters } from '.'; import { MessageAddEvent } from '../../common/conversation_complete'; -import { FunctionVisibility, MessageRole, type Message } from '../../common/types'; +import { FunctionVisibility } from '../../common/functions/types'; +import { MessageRole, type Message } from '../../common/types'; import { concatenateChatCompletionChunks } from '../../common/utils/concatenate_chat_completion_chunks'; import type { ObservabilityAIAssistantClient } from '../service/client'; import { createFunctionResponseMessage } from '../service/util/create_function_response_message'; @@ -25,11 +26,11 @@ const MAX_TOKEN_COUNT_FOR_DATA_ON_SCREEN = 1000; export function registerContextFunction({ client, - registerFunction, + functions, resources, isKnowledgeBaseAvailable, }: FunctionRegistrationParameters & { isKnowledgeBaseAvailable: boolean }) { - registerFunction( + functions.registerFunction( { name: 'context', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts index 44cb30233504..05900a2d4755 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/elasticsearch.ts @@ -8,10 +8,10 @@ import type { FunctionRegistrationParameters } from '.'; export function registerElasticsearchFunction({ - registerFunction, + functions, resources, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( { name: 'elasticsearch', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts index f1e95c37fdb8..0fc17d894830 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/get_dataset_info.ts @@ -8,15 +8,16 @@ import { chunk, groupBy, uniq } from 'lodash'; import { lastValueFrom } from 'rxjs'; import { FunctionRegistrationParameters } from '.'; -import { FunctionVisibility, MessageRole } from '../../common/types'; +import { FunctionVisibility } from '../../common/functions/types'; +import { MessageRole } from '../../common/types'; import { concatenateChatCompletionChunks } from '../../common/utils/concatenate_chat_completion_chunks'; export function registerGetDatasetInfoFunction({ client, resources, - registerFunction, + functions, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( { name: 'get_dataset_info', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts index 196f6ceb081e..232ea71fed75 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/index.ts @@ -8,31 +8,25 @@ import dedent from 'dedent'; import { registerContextFunction } from './context'; import { registerSummarizationFunction } from './summarize'; -import { ChatRegistrationFunction } from '../service/types'; -import { registerAlertsFunction } from './alerts'; +import type { RegistrationCallback } from '../service/types'; import { registerElasticsearchFunction } from './elasticsearch'; -import { registerQueryFunction } from './query'; import { registerGetDatasetInfoFunction } from './get_dataset_info'; -import { registerLensFunction } from './lens'; import { registerKibanaFunction } from './kibana'; -import { registerVisualizeESQLFunction } from './visualize_esql'; export type FunctionRegistrationParameters = Omit< - Parameters[0], + Parameters[0], 'registerContext' | 'hasFunction' >; -export const registerFunctions: ChatRegistrationFunction = async ({ +export const registerFunctions: RegistrationCallback = async ({ client, - registerContext, - registerFunction, - hasFunction, + functions, resources, signal, }) => { const registrationParameters: FunctionRegistrationParameters = { client, - registerFunction, + functions, resources, signal, }; @@ -79,7 +73,7 @@ export const registerFunctions: ChatRegistrationFunction = async ({ If the "get_dataset_info" function returns no data, and the user asks for a query, generate a query anyway with the "query" function, but be explicit about it potentially being incorrect. ${ - hasFunction('get_data_on_screen') + functions.hasFunction('get_data_on_screen') ? `You have access to data on the screen by calling the "get_data_on_screen" function. Use it to help the user understand what they are looking at. A short summary of what they are looking at is available in the return of the "context" function. Data that is compact enough automatically gets included in the response for the "context" function. @@ -103,7 +97,6 @@ export const registerFunctions: ChatRegistrationFunction = async ({ `; registerSummarizationFunction(registrationParameters); - registerLensFunction(registrationParameters); } else { description += `You do not have a working memory. If the user expects you to remember the previous conversations, tell them they can set up the knowledge base.`; } @@ -111,13 +104,20 @@ export const registerFunctions: ChatRegistrationFunction = async ({ registerContextFunction({ ...registrationParameters, isKnowledgeBaseAvailable: isReady }); registerElasticsearchFunction(registrationParameters); - registerKibanaFunction(registrationParameters); - registerQueryFunction(registrationParameters); - registerVisualizeESQLFunction(registrationParameters); - registerAlertsFunction(registrationParameters); + const request = registrationParameters.resources.request; + + if ('id' in request) { + registerKibanaFunction({ + ...registrationParameters, + resources: { + ...registrationParameters.resources, + request, + }, + }); + } registerGetDatasetInfoFunction(registrationParameters); - registerContext({ + functions.registerContext({ name: 'core', description: dedent(description), }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/kibana.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/kibana.ts index 3fab9cd7aeb5..e40f8229a223 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/kibana.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/kibana.ts @@ -8,13 +8,16 @@ import axios from 'axios'; import { format, parse } from 'url'; import { castArray, first, pick, pickBy } from 'lodash'; +import type { KibanaRequest } from '@kbn/core/server'; import type { FunctionRegistrationParameters } from '.'; export function registerKibanaFunction({ - registerFunction, + functions, resources, -}: FunctionRegistrationParameters) { - registerFunction( +}: FunctionRegistrationParameters & { + resources: { request: KibanaRequest }; +}) { + functions.registerFunction( { name: 'kibana', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/summarize.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/summarize.ts index 8d15ecc03317..612e923318a8 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/summarize.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/summarize.ts @@ -10,9 +10,9 @@ import { KnowledgeBaseEntryRole } from '../../common'; export function registerSummarizationFunction({ client, - registerFunction, + functions, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( { name: 'summarize', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts index d8ab28e94412..dd263d29d59b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/index.ts @@ -11,9 +11,10 @@ import type { ObservabilityAIAssistantConfig } from './config'; export type { ObservabilityAIAssistantServerRouteRepository } from './routes/get_global_observability_ai_assistant_route_repository'; import { config as configSchema } from './config'; +export type { RegistrationCallback } from './service/types'; export type { - ObservabilityAIAssistantPluginStart, - ObservabilityAIAssistantPluginSetup, + ObservabilityAIAssistantServerStart, + ObservabilityAIAssistantServerSetup, } from './types'; export const config: PluginConfigDescriptor = { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts index e62a80619c6e..94e07a06926c 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/plugin.ts @@ -26,8 +26,8 @@ import { registerServerRoutes } from './routes/register_routes'; import { ObservabilityAIAssistantRouteHandlerResources } from './routes/types'; import { ObservabilityAIAssistantService } from './service'; import { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantServerSetup, + ObservabilityAIAssistantServerStart, ObservabilityAIAssistantPluginSetupDependencies, ObservabilityAIAssistantPluginStartDependencies, } from './types'; @@ -37,8 +37,8 @@ import { registerFunctions } from './functions'; export class ObservabilityAIAssistantPlugin implements Plugin< - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantServerSetup, + ObservabilityAIAssistantServerStart, ObservabilityAIAssistantPluginSetupDependencies, ObservabilityAIAssistantPluginStartDependencies > @@ -52,10 +52,10 @@ export class ObservabilityAIAssistantPlugin public setup( core: CoreSetup< ObservabilityAIAssistantPluginStartDependencies, - ObservabilityAIAssistantPluginStart + ObservabilityAIAssistantServerStart >, plugins: ObservabilityAIAssistantPluginSetupDependencies - ): ObservabilityAIAssistantPluginSetup { + ): ObservabilityAIAssistantServerSetup { plugins.features.registerKibanaFeature({ id: OBSERVABILITY_AI_ASSISTANT_FEATURE_ID, name: i18n.translate('xpack.observabilityAiAssistant.featureRegistry.featureName', { @@ -113,10 +113,23 @@ export class ObservabilityAIAssistantPlugin // Wait for the ML plugin's dependency on the internal saved objects client to be ready const [_, pluginsStart] = await core.getStartServices(); + const { ml } = await core.plugins.onSetup('ml'); + + if (!ml.found) { + throw new Error('Could not find ML plugin'); + } + // Wait for the license to be available so the ML plugin's guards pass once we ask for ELSER stats await firstValueFrom(pluginsStart.licensing.license$); - const elserModelDefinition = await plugins.ml + const elserModelDefinition = await ( + ml.contract as { + trainedModelsProvider: ( + request: {}, + soClient: {} + ) => { getELSER: () => Promise<{ model_id: string }> }; + } + ) .trainedModelsProvider({} as any, {} as any) // request, savedObjectsClient (but we fake it to use the internal user) .getELSER(); @@ -154,7 +167,7 @@ export class ObservabilityAIAssistantPlugin }; } - public start(): ObservabilityAIAssistantPluginStart { + public start(): ObservabilityAIAssistantServerStart { return { service: this.service!, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts index b9c3e176cf22..9b48dc3f472d 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts @@ -7,11 +7,8 @@ import { notImplemented } from '@hapi/boom'; import { nonEmptyStringRt, toBooleanRt } from '@kbn/io-ts-utils'; import * as t from 'io-ts'; -import { - ContextDefinition, - FunctionDefinition, - KnowledgeBaseEntryRole, -} from '../../../common/types'; +import { ContextDefinition, FunctionDefinition } from '../../../common/functions/types'; +import { KnowledgeBaseEntryRole } from '../../../common/types'; import type { RecalledEntry } from '../../service/knowledge_base_service'; import { createObservabilityAIAssistantServerRoute } from '../create_observability_ai_assistant_server_route'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts index 26753874d322..1985695aa035 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts @@ -7,9 +7,9 @@ import type { CustomRequestHandlerContext, KibanaRequest } from '@kbn/core/server'; import type { Logger } from '@kbn/logging'; -import type { RacApiRequestHandlerContext } from '@kbn/rule-registry-plugin/server'; import type { LicensingApiRequestHandlerContext } from '@kbn/licensing-plugin/server/types'; -import type { AlertingApiRequestHandlerContext } from '@kbn/alerting-plugin/server/types'; +import type { RacApiRequestHandlerContext } from '@kbn/rule-registry-plugin/server'; +import type { AlertingApiRequestHandlerContext } from '@kbn/alerting-plugin/server'; import type { ObservabilityAIAssistantService } from '../service'; import type { ObservabilityAIAssistantPluginSetupDependencies, @@ -17,8 +17,9 @@ import type { } from '../types'; export type ObservabilityAIAssistantRequestHandlerContext = CustomRequestHandlerContext<{ - rac: RacApiRequestHandlerContext; licensing: LicensingApiRequestHandlerContext; + // these two are here for compatibility with APM functions + rac: RacApiRequestHandlerContext; alerting: AlertingApiRequestHandlerContext; }>; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.test.ts index 9ad808a13425..1b1ba0d474df 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.test.ts @@ -4,11 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import Ajv, { type ValidateFunction } from 'ajv'; import dedent from 'dedent'; import { ChatFunctionClient } from '.'; -import { ContextRegistry, FunctionVisibility } from '../../../common/types'; -import type { FunctionHandlerRegistry } from '../types'; +import { FunctionVisibility } from '../../../common/functions/types'; describe('chatFunctionClient', () => { describe('when executing a function with invalid arguments', () => { @@ -17,43 +15,10 @@ describe('chatFunctionClient', () => { let respondFn: jest.Mock; beforeEach(() => { - const contextRegistry: ContextRegistry = new Map(); - contextRegistry.set('core', { - description: '', - name: 'core', - }); - respondFn = jest.fn().mockImplementationOnce(async () => { return {}; }); - const functionRegistry: FunctionHandlerRegistry = new Map(); - functionRegistry.set('myFunction', { - respond: respondFn, - definition: { - contexts: ['core'], - description: '', - name: 'myFunction', - parameters: { - properties: { - foo: { - type: 'string', - }, - }, - required: ['foo'], - }, - }, - }); - - const validators = new Map(); - - validators.set( - 'myFunction', - new Ajv({ strict: false }).compile( - functionRegistry.get('myFunction')!.definition.parameters - ) - ); - client = new ChatFunctionClient([]); client.registerContext({ description: '', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.ts index bc74f2046c5d..618f7eef0027 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/chat_function_client/index.ts @@ -10,14 +10,13 @@ import Ajv, { type ErrorObject, type ValidateFunction } from 'ajv'; import dedent from 'dedent'; import { compact, keyBy } from 'lodash'; import { - ContextDefinition, - ContextRegistry, - FunctionResponse, + type ContextRegistry, FunctionVisibility, - Message, - ObservabilityAIAssistantScreenContext, - RegisterContextDefinition, -} from '../../../common/types'; + type RegisterContextDefinition, + type ContextDefinition, + type FunctionResponse, +} from '../../../common/functions/types'; +import type { Message, ObservabilityAIAssistantScreenContext } from '../../../common/types'; import { filterFunctionDefinitions } from '../../../common/utils/filter_function_definitions'; import type { FunctionHandler, FunctionHandlerRegistry, RegisterFunction } from '../types'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/types.ts index 6ef3611bb4aa..fff3edeccb7d 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/adapters/types.ts @@ -10,7 +10,7 @@ import type { Observable } from 'rxjs'; import type { Logger } from '@kbn/logging'; import type { Message } from '../../../../common'; import type { ChatCompletionChunkEvent } from '../../../../common/conversation_complete'; -import type { CompatibleJSONSchema } from '../../../../common/types'; +import { CompatibleJSONSchema } from '../../../../common/functions/types'; export type LlmApiAdapterFactory = (options: { logger: Logger; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts index 9eb7449ce768..96ef44adfee6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.test.ts @@ -23,7 +23,7 @@ import { MessageAddEvent, StreamingChatResponseEventType, } from '../../../common/conversation_complete'; -import type { CreateChatCompletionResponseChunk } from '../../../public/types'; +import type { CreateChatCompletionResponseChunk } from '../../../common/utils/process_openai_stream'; import type { ChatFunctionClient } from '../chat_function_client'; import type { KnowledgeBaseService } from '../knowledge_base_service'; import { createFunctionResponseMessage } from '../util/create_function_response_message'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts index 881ad5c13ec8..cec07bc949ca 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/index.ts @@ -35,10 +35,12 @@ import { type StreamingChatResponseEvent, } from '../../../common/conversation_complete'; import { + CompatibleJSONSchema, FunctionResponse, FunctionVisibility, +} from '../../../common/functions/types'; +import { MessageRole, - type CompatibleJSONSchema, type Conversation, type ConversationCreateRequest, type ConversationUpdateRequest, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts index dcd0cb95de7c..1df243fc2ba3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/index.ts @@ -21,7 +21,7 @@ import { conversationComponentTemplate } from './conversation_component_template import { kbComponentTemplate } from './kb_component_template'; import { KnowledgeBaseEntryOperationType, KnowledgeBaseService } from './knowledge_base_service'; import type { - ChatRegistrationFunction, + RegistrationCallback, ObservabilityAIAssistantResourceNames, RespondFunctionResources, } from './types'; @@ -76,7 +76,7 @@ export class ObservabilityAIAssistantService { private readonly resourceNames: ObservabilityAIAssistantResourceNames = createResourceNamesMap(); - private readonly registrations: ChatRegistrationFunction[] = []; + private readonly registrations: RegistrationCallback[] = []; constructor({ logger, @@ -300,9 +300,7 @@ export class ObservabilityAIAssistantService { const params = { signal, - registerContext: fnClient.registerContext.bind(fnClient), - registerFunction: fnClient.registerFunction.bind(fnClient), - hasFunction: fnClient.hasFunction.bind(fnClient), + functions: fnClient, resources, client, }; @@ -373,7 +371,7 @@ export class ObservabilityAIAssistantService { ); } - register(fn: ChatRegistrationFunction) { - this.registrations.push(fn); + register(cb: RegistrationCallback) { + this.registrations.push(cb); } } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts index 2215f565886b..1ade4fc0e179 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/types.ts @@ -10,10 +10,8 @@ import type { CompatibleJSONSchema, FunctionDefinition, FunctionResponse, - Message, - ObservabilityAIAssistantScreenContext, - RegisterContextDefinition, -} from '../../common/types'; +} from '../../common/functions/types'; +import type { Message, ObservabilityAIAssistantScreenContext } from '../../common/types'; import type { ObservabilityAIAssistantRouteHandlerResources } from '../routes/types'; import { ChatFunctionClient } from './chat_function_client'; import type { ObservabilityAIAssistantClient } from './client'; @@ -48,13 +46,11 @@ export type RegisterFunction = < ) => void; export type FunctionHandlerRegistry = Map; -export type ChatRegistrationFunction = ({}: { +export type RegistrationCallback = ({}: { signal: AbortSignal; resources: RespondFunctionResources; client: ObservabilityAIAssistantClient; - registerFunction: RegisterFunction; - registerContext: RegisterContextDefinition; - hasFunction: ChatFunctionClient['hasFunction']; + functions: ChatFunctionClient; }) => Promise; export interface ObservabilityAIAssistantResourceNames { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts index 861a88f1a967..fc6f38d4d9f0 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/types.ts @@ -21,20 +21,19 @@ import type { DataViewsServerPluginSetup, DataViewsServerPluginStart, } from '@kbn/data-views-plugin/server'; -import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/server'; import type { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/server'; import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/server'; import type { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/server'; import type { ObservabilityAIAssistantService } from './service'; -export interface ObservabilityAIAssistantPluginSetup { +export interface ObservabilityAIAssistantServerSetup { /** * Returns a Observability AI Assistant service instance */ service: ObservabilityAIAssistantService; } -export interface ObservabilityAIAssistantPluginStart { +export interface ObservabilityAIAssistantServerStart { /** * Returns a Observability AI Assistant service instance */ @@ -47,18 +46,17 @@ export interface ObservabilityAIAssistantPluginSetupDependencies { features: FeaturesPluginSetup; taskManager: TaskManagerSetupContract; dataViews: DataViewsServerPluginSetup; - ml: MlPluginSetup; licensing: LicensingPluginSetup; cloud?: CloudSetup; serverless?: ServerlessPluginSetup; } + export interface ObservabilityAIAssistantPluginStartDependencies { actions: ActionsPluginStart; security: SecurityPluginStart; features: FeaturesPluginStart; taskManager: TaskManagerStartContract; dataViews: DataViewsServerPluginStart; - ml: MlPluginStart; licensing: LicensingPluginStart; cloud?: CloudStart; serverless?: ServerlessPluginStart; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/tsconfig.json b/x-pack/plugins/observability_solution/observability_ai_assistant/tsconfig.json index 802226ee30d8..90fde8a283d9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/tsconfig.json @@ -18,7 +18,6 @@ "@kbn/utility-types", "@kbn/server-route-repository", "@kbn/logging", - "@kbn/triggers-actions-ui-plugin", "@kbn/config-schema", "@kbn/security-plugin", "@kbn/i18n", @@ -26,50 +25,28 @@ "@kbn/kibana-react-plugin", "@kbn/shared-ux-utility", "@kbn/alerting-plugin", - "@kbn/shared-ux-link-redirect-app", - "@kbn/typed-react-router-config", - "@kbn/ui-theme", - "@kbn/user-profile-components", - "@kbn/observability-shared-plugin", "@kbn/kibana-utils-plugin", - "@kbn/monaco", "@kbn/io-ts-utils", "@kbn/std", "@kbn/alerting-plugin", "@kbn/features-plugin", - "@kbn/react-kibana-context-theme", - "@kbn/lens-embeddable-utils", - "@kbn/i18n-react", - "@kbn/field-formats-plugin", "@kbn/lens-plugin", "@kbn/data-views-plugin", "@kbn/task-manager-plugin", - "@kbn/es-query", "@kbn/rule-registry-plugin", "@kbn/licensing-plugin", - "@kbn/share-plugin", "@kbn/utility-types-jest", "@kbn/analytics-client", "@kbn/tooling-log", "@kbn/babel-register", "@kbn/dev-cli-runner", "@kbn/core-analytics-browser", - "@kbn/core-http-browser", - "@kbn/security-plugin-types-common", "@kbn/ml-plugin", "@kbn/expect", "@kbn/apm-synthtrace-client", "@kbn/apm-synthtrace", - "@kbn/code-editor", "@kbn/safer-lodash-set", "@kbn/cloud-plugin", - "@kbn/ui-actions-plugin", - "@kbn/expressions-plugin", - "@kbn/visualization-utils", - "@kbn/field-types", - "@kbn/es-types", - "@kbn/esql-utils", - "@kbn/data-plugin", "@kbn/serverless" ], "exclude": ["target/**/*"] diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/jest_setup.js b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/jest_setup.js new file mode 100644 index 000000000000..32071b8aa3f6 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/jest_setup.js @@ -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 { setGlobalConfig } from '@storybook/testing-react'; +import * as globalStorybookConfig from './preview'; + +setGlobalConfig(globalStorybookConfig); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/main.js b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/main.js new file mode 100644 index 000000000000..86b48c32f103 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/main.js @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = require('@kbn/storybook').defaultConfig; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/preview.js b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/preview.js new file mode 100644 index 000000000000..3200746243d4 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/preview.js @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiThemeProviderDecorator } from '@kbn/kibana-react-plugin/common'; + +export const decorators = [EuiThemeProviderDecorator]; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md b/x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md new file mode 100644 index 000000000000..1cfb2aa0da7d --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/README.md @@ -0,0 +1,3 @@ +#### Observability AI Assistant App + +This app registers defaults functions. It exists as a separate plugin to avoid cyclical dependencies. diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/lens.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/lens.ts similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/lens.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/lens.ts index 5184eeacc0c7..eec95db1845f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/common/functions/lens.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/lens.ts @@ -7,7 +7,7 @@ import { FromSchema } from 'json-schema-to-ts'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; -import { FunctionVisibility } from '../types'; +import { FunctionVisibility } from '@kbn/observability-ai-assistant-plugin/common'; export enum SeriesType { Bar = 'bar', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/visualize_esql.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/visualize_esql.ts new file mode 100644 index 000000000000..49a3e49f5e73 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/common/functions/visualize_esql.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { FromSchema } from 'json-schema-to-ts'; +import { FunctionVisibility } from '@kbn/observability-ai-assistant-plugin/common'; +import { VISUALIZE_ESQL_USER_INTENTIONS } from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql'; + +export const visualizeESQLFunction = { + name: 'visualize_query', + visibility: FunctionVisibility.UserOnly, + description: 'Use this function to visualize charts for ES|QL queries.', + descriptionForUser: 'Use this function to visualize charts for ES|QL queries.', + parameters: { + type: 'object', + additionalProperties: true, + properties: { + query: { + type: 'string', + }, + intention: { + type: 'string', + enum: VISUALIZE_ESQL_USER_INTENTIONS, + }, + }, + required: ['query', 'intention'], + } as const, + contexts: ['core'], +}; + +export type VisualizeESQLFunctionArguments = FromSchema; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/jest.config.js b/x-pack/plugins/observability_solution/observability_ai_assistant_app/jest.config.js new file mode 100644 index 000000000000..7e3fb9e75044 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/jest.config.js @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../..', + roots: [ + '/x-pack/plugins/observability_solution/observability_ai_assistant_app/public', + '/x-pack/plugins/observability_solution/observability_ai_assistant_app/common', + '/x-pack/plugins/observability_solution/observability_ai_assistant_app/server', + ], + setupFiles: [ + '/x-pack/plugins/observability_solution/observability_ai_assistant_app/.storybook/jest_setup.js', + ], + collectCoverage: true, + collectCoverageFrom: [ + '/x-pack/plugins/observability_solution/observability_ai_assistant_app/{common,public,server}/**/*.{js,ts,tsx}', + ], + + coverageReporters: ['html'], +}; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/kibana.jsonc b/x-pack/plugins/observability_solution/observability_ai_assistant_app/kibana.jsonc new file mode 100644 index 000000000000..801de5f1e386 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/kibana.jsonc @@ -0,0 +1,30 @@ +{ + "type": "plugin", + "id": "@kbn/observability-ai-assistant-app-plugin", + "owner": "@elastic/obs-knowledge-team", + "plugin": { + "id": "observabilityAIAssistantApp", + "server": true, + "browser": true, + "configPath": ["xpack", "observabilityAIAssistantApp"], + "requiredPlugins": [ + "observabilityAIAssistant", + "observabilityShared", + "actions", + "data", + "dataViews", + "lens", + "ruleRegistry", + "uiActions", + "dataViews", + "triggersActionsUi", + "share", + "security", + "licensing", + "ml" + ], + "requiredBundles": [ "kibanaReact" ], + "optionalPlugins": ["cloud"], + "extraPublicDirs": [] + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/application.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/application.tsx new file mode 100644 index 000000000000..c554fc81d5de --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/application.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { CoreStart, CoreTheme } from '@kbn/core/public'; +import { RouteRenderer, RouterProvider } from '@kbn/typed-react-router-config'; +import type { History } from 'history'; +import React from 'react'; +import type { Observable } from 'rxjs'; +import { observabilityAIAssistantRouter } from './routes/config'; +import type { ObservabilityAIAssistantAppService } from './service/create_app_service'; +import type { ObservabilityAIAssistantAppPluginStartDependencies } from './types'; +import { SharedProviders } from './utils/shared_providers'; + +// This is the Conversation application. + +export function Application({ + coreStart, + history, + pluginsStart, + service, + theme$, +}: { + coreStart: CoreStart; + history: History; + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; + service: ObservabilityAIAssistantAppService; + theme$: Observable; +}) { + return ( + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/assets/elastic_ai_assistant.png b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/assets/elastic_ai_assistant.png similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/assets/elastic_ai_assistant.png rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/assets/elastic_ai_assistant.png diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/ask_assistant_button.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/ask_assistant_button.stories.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/ask_assistant_button.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/ask_assistant_button.stories.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/ask_assistant_button.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/ask_assistant_button.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/ask_assistant_button.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/ask_assistant_button.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/hide_expand_conversation_list_button.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/hide_expand_conversation_list_button.stories.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/hide_expand_conversation_list_button.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/hide_expand_conversation_list_button.stories.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/hide_expand_conversation_list_button.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/hide_expand_conversation_list_button.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/hide_expand_conversation_list_button.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/hide_expand_conversation_list_button.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/new_chat_button.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/new_chat_button.stories.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/new_chat_button.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/new_chat_button.stories.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/new_chat_button.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/new_chat_button.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/buttons/new_chat_button.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/buttons/new_chat_button.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_actions_menu.tsx similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_actions_menu.tsx index f9635f580807..ecf32865e425 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_actions_menu.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_actions_menu.tsx @@ -8,11 +8,11 @@ import React, { useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonIcon, EuiContextMenu, EuiPanel, EuiPopover, EuiToolTip } from '@elastic/eui'; +import { ConnectorSelectorBase } from '@kbn/observability-ai-assistant-plugin/public'; import { useKibana } from '../../hooks/use_kibana'; import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router'; import { getSettingsHref } from '../../utils/get_settings_href'; import { getSettingsKnowledgeBaseHref } from '../../utils/get_settings_kb_href'; -import { ConnectorSelectorBase } from '../connector_selector/connector_selector_base'; import type { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors'; export function ChatActionsMenu({ diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.stories.tsx similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.stories.tsx index 69910bf74950..c49450f896e6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.stories.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.stories.tsx @@ -7,8 +7,10 @@ import { ComponentMeta, ComponentStoryObj } from '@storybook/react'; import React from 'react'; -import { MessageRole } from '../../../common'; -import { getAssistantSetupMessage } from '../../service/get_assistant_setup_message'; +import { + getAssistantSystemMessage, + MessageRole, +} from '@kbn/observability-ai-assistant-plugin/public'; import { KibanaReactStorybookDecorator } from '../../utils/storybook_decorator'; import { ChatBody as Component } from './chat_body'; @@ -23,7 +25,7 @@ const defaultProps: ComponentStoryObj = { args: { initialTitle: 'My Conversation', initialMessages: [ - getAssistantSetupMessage({ contexts: [] }), + getAssistantSystemMessage({ contexts: [] }), { '@timestamp': new Date().toISOString(), message: { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.test.tsx similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.test.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.test.tsx index 6db880f536e8..cfb85f794524 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.test.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { type Message } from '../../../common/types'; +import { Message } from '@kbn/observability-ai-assistant-plugin/common'; import { reverseToLastUserMessage } from './chat_body'; describe('', () => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.tsx similarity index 92% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.tsx index 0b97e5378fae..261e32865650 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_body.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_body.tsx @@ -5,41 +5,46 @@ * 2.0. */ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { css, keyframes } from '@emotion/css'; import { EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiHorizontalRule, EuiPanel, + euiScrollBarStyles, EuiSpacer, useEuiTheme, - euiScrollBarStyles, } from '@elastic/eui'; +import { css, keyframes } from '@emotion/css'; +import { i18n } from '@kbn/i18n'; +import type { Conversation, Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { + MessageRole, + type Feedback, + VisualizeESQLUserIntention, + ObservabilityAIAssistantTelemetryEventType, +} from '@kbn/observability-ai-assistant-plugin/public'; +import { + ChatActionClickType, + ChatState, + type ChatActionClickPayload, +} from '@kbn/observability-ai-assistant-plugin/public'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; import { euiThemeVars } from '@kbn/ui-theme'; -import { i18n } from '@kbn/i18n'; import { findLastIndex } from 'lodash'; -import { VisualizeESQLUserIntention } from '../../../common/functions/visualize_esql'; -import { ChatState } from '../../hooks/use_chat'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import { useConversation } from '../../hooks/use_conversation'; +import { useGenAIConnectors } from '../../hooks/use_genai_connectors'; +import type { UseKnowledgeBaseResult } from '../../hooks/use_knowledge_base'; import { useLicense } from '../../hooks/use_license'; import { useObservabilityAIAssistantChatService } from '../../hooks/use_observability_ai_assistant_chat_service'; -import type { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors'; -import type { UseKnowledgeBaseResult } from '../../hooks/use_knowledge_base'; -import { type Conversation, type Message, MessageRole } from '../../../common/types'; -import { ChatHeader } from './chat_header'; +import { ASSISTANT_SETUP_TITLE, EMPTY_CONVERSATION_TITLE, UPGRADE_LICENSE_TITLE } from '../../i18n'; import { PromptEditor } from '../prompt_editor/prompt_editor'; +import { FlyoutWidthMode } from './chat_flyout'; +import { ChatHeader } from './chat_header'; import { ChatTimeline } from './chat_timeline'; -import { Feedback } from '../feedback_buttons'; import { IncorrectLicensePanel } from './incorrect_license_panel'; import { WelcomeMessage } from './welcome_message'; -import { ChatActionClickPayload, ChatActionClickType } from './types'; -import { ASSISTANT_SETUP_TITLE, EMPTY_CONVERSATION_TITLE, UPGRADE_LICENSE_TITLE } from '../../i18n'; -import type { StartedFrom } from '../../utils/get_timeline_items_from_conversation'; -import { TELEMETRY, sendEvent } from '../../analytics'; -import { FlyoutWidthMode } from './chat_flyout'; const fullHeightClassName = css` height: 100%; @@ -98,11 +103,10 @@ export function ChatBody({ initialTitle, knowledgeBase, showLinkToConversationsApp, - startedFrom, onConversationUpdate, onToggleFlyoutWidthMode, }: { - connectors: UseGenAIConnectorsResult; + connectors: ReturnType; currentUser?: Pick; flyoutWidthMode?: FlyoutWidthMode; initialTitle?: string; @@ -110,7 +114,6 @@ export function ChatBody({ initialConversationId?: string; knowledgeBase: UseKnowledgeBaseResult; showLinkToConversationsApp: boolean; - startedFrom?: StartedFrom; onConversationUpdate: (conversation: { conversation: Conversation['conversation'] }) => void; onToggleFlyoutWidthMode?: (flyoutWidthMode: FlyoutWidthMode) => void; }) { @@ -157,9 +160,6 @@ export function ChatBody({ background: white; min-width: 0; max-height: 100%; - max-width: ${startedFrom === 'conversationView' - ? 1200 - 250 + 'px' // page template max width - conversation list width. - : '100%'}; `; const headerContainerClassName = css` @@ -175,8 +175,8 @@ export function ChatBody({ const handleFeedback = (message: Message, feedback: Feedback) => { if (conversation.value?.conversation && 'user' in conversation.value) { - sendEvent(chatService.analytics, { - type: TELEMETRY.observability_ai_assistant_chat_feedback, + chatService.sendAnalyticsEvent({ + type: ObservabilityAIAssistantTelemetryEventType.ChatFeedback, payload: { messageWithFeedback: { message, feedback }, conversation: conversation.value, @@ -318,7 +318,7 @@ export function ChatBody({ next(messages.concat(message)); }} onSendTelemetry={(eventWithPayload) => - sendEvent(chatService.analytics, eventWithPayload) + chatService.sendAnalyticsEvent(eventWithPayload) } /> @@ -344,7 +344,6 @@ export function ChatBody({ ) : ( - sendEvent(chatService.analytics, eventWithPayload) + chatService.sendAnalyticsEvent(eventWithPayload) } onStopGenerating={() => { stop(); @@ -392,7 +391,7 @@ export function ChatBody({ loading={isLoading} onChangeHeight={handleChangeHeight} onSendTelemetry={(eventWithPayload) => - sendEvent(chatService.analytics, eventWithPayload) + chatService.sendAnalyticsEvent(eventWithPayload) } onSubmit={(message) => { setStickToBottom(true); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_consolidated_items.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_consolidated_items.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_consolidated_items.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_consolidated_items.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.stories.tsx similarity index 85% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.stories.tsx index bf54e20c3ec5..827c15ed44be 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.stories.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.stories.tsx @@ -7,7 +7,7 @@ import { ComponentStory } from '@storybook/react'; import React from 'react'; -import { getAssistantSetupMessage } from '../../service/get_assistant_setup_message'; +import { getAssistantSystemMessage } from '@kbn/observability-ai-assistant-plugin/public'; import { KibanaReactStorybookDecorator } from '../../utils/storybook_decorator'; import { ChatFlyout as Component } from './chat_flyout'; @@ -30,8 +30,7 @@ const Template: ComponentStory = (props: ChatFlyoutProps) => { const defaultProps: ChatFlyoutProps = { isOpen: true, initialTitle: 'How is this working', - initialMessages: [getAssistantSetupMessage({ contexts: [] })], - startedFrom: 'appTopNavbar', + initialMessages: [getAssistantSystemMessage({ contexts: [] })], onClose: () => {}, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.tsx similarity index 95% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.tsx index 520428c63b02..90aedc079690 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_flyout.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_flyout.tsx @@ -4,10 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useState } from 'react'; -import ReactDOM from 'react-dom'; -import { i18n } from '@kbn/i18n'; -import { css } from '@emotion/css'; import { EuiButtonIcon, EuiFlexGroup, @@ -18,18 +14,21 @@ import { useCurrentEuiBreakpoint, useEuiTheme, } from '@elastic/eui'; -import { ObservabilityAIAssistantMultipaneFlyoutProvider } from '../../context/observability_ai_assistant_multipane_flyout_provider'; +import { css } from '@emotion/css'; +import { i18n } from '@kbn/i18n'; +import { Message } from '@kbn/observability-ai-assistant-plugin/common'; +import React, { useState } from 'react'; +import ReactDOM from 'react-dom'; +import { useConversationKey } from '../../hooks/use_conversation_key'; +import { useConversationList } from '../../hooks/use_conversation_list'; import { useCurrentUser } from '../../hooks/use_current_user'; import { useGenAIConnectors } from '../../hooks/use_genai_connectors'; +import { useKibana } from '../../hooks/use_kibana'; import { useKnowledgeBase } from '../../hooks/use_knowledge_base'; -import { StartedFrom } from '../../utils/get_timeline_items_from_conversation'; +import { NewChatButton } from '../buttons/new_chat_button'; import { ChatBody } from './chat_body'; -import { ConversationList } from './conversation_list'; -import type { Message } from '../../../common/types'; import { ChatInlineEditingContent } from './chat_inline_edit'; -import { NewChatButton } from '../buttons/new_chat_button'; -import { useConversationList } from '../../hooks/use_conversation_list'; -import { useConversationKey } from '../../hooks/use_conversation_key'; +import { ConversationList } from './conversation_list'; const CONVERSATIONS_SIDEBAR_WIDTH = 260; const CONVERSATIONS_SIDEBAR_WIDTH_COLLAPSED = 34; @@ -43,12 +42,10 @@ export function ChatFlyout({ initialMessages, onClose, isOpen, - startedFrom, }: { initialTitle: string; initialMessages: Message[]; isOpen: boolean; - startedFrom: StartedFrom; onClose: () => void; }) { const { euiTheme } = useEuiTheme(); @@ -69,6 +66,15 @@ export function ChatFlyout({ const [secondSlotContainer, setSecondSlotContainer] = useState(null); const [isSecondSlotVisible, setIsSecondSlotVisible] = useState(false); + const { + services: { + plugins: { + start: { + observabilityAIAssistant: { ObservabilityAIAssistantMultipaneFlyoutContext }, + }, + }, + }, + } = useKibana(); const conversationList = useConversationList(); const { key: bodyKey, updateConversationIdInPlace } = useConversationKey(conversationId); @@ -127,7 +133,7 @@ export function ChatFlyout({ }; return isOpen ? ( - { if (!conversationId) { updateConversationIdInPlace(conversation.conversation.id); @@ -276,7 +281,7 @@ export function ChatFlyout({
- + ) : null; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.stories.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.stories.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx similarity index 98% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx index 8a9b1458adf4..55ad14e9bfdd 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_header.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_header.tsx @@ -19,7 +19,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/css'; -import { AssistantAvatar } from '../assistant_avatar'; +import { AssistantAvatar } from '@kbn/observability-ai-assistant-plugin/public'; import { ChatActionsMenu } from './chat_actions_menu'; import type { UseGenAIConnectorsResult } from '../../hooks/use_genai_connectors'; import type { FlyoutWidthMode } from './chat_flyout'; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_inline_edit.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_inline_edit.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_inline_edit.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_inline_edit.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx similarity index 93% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx index ea8cc1eb1791..a1f5d5eb88d2 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item.tsx @@ -14,17 +14,19 @@ import { EuiPanel, useGeneratedHtmlId, } from '@elastic/eui'; +import { Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { + ChatActionClickHandler, + ChatItemControls, + FailedToLoadResponse, + Feedback, + TelemetryEventTypeWithPayload, +} from '@kbn/observability-ai-assistant-plugin/public'; import { ChatItemActions } from './chat_item_actions'; import { ChatItemAvatar } from './chat_item_avatar'; import { ChatItemContentInlinePromptEditor } from './chat_item_content_inline_prompt_editor'; -import { ChatItemControls } from './chat_item_controls'; import { ChatTimelineItem } from './chat_timeline'; import { getRoleTranslation } from '../../utils/get_role_translation'; -import { FailedToLoadResponse } from '../message_panel/failed_to_load_response'; -import type { Message } from '../../../common'; -import type { Feedback } from '../feedback_buttons'; -import type { ChatActionClickHandler } from './types'; -import type { TelemetryEventTypeWithPayload } from '../../analytics'; export interface ChatItemProps extends Omit { onActionClick: ChatActionClickHandler; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_actions.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_actions.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_actions.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_actions.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx similarity index 92% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx index d04f818bb204..d286fb7e3917 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_avatar.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_avatar.tsx @@ -9,8 +9,7 @@ import React from 'react'; import { UserAvatar } from '@kbn/user-profile-components'; import { EuiAvatar, EuiLoadingSpinner } from '@elastic/eui'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; -import { AssistantAvatar } from '../assistant_avatar'; -import { MessageRole } from '../../../common/types'; +import { AssistantAvatar, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; interface ChatAvatarProps { currentUser?: Pick | undefined; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx similarity index 88% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx index 2b69514fd471..47c0d6d7ec16 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_content_inline_prompt_editor.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_content_inline_prompt_editor.tsx @@ -9,11 +9,13 @@ import React from 'react'; import { noop } from 'lodash'; import { css } from '@emotion/css'; import { EuiPanel } from '@elastic/eui'; -import { MessageText } from '../message_panel/message_text'; +import { Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { + ChatActionClickHandler, + MessageText, + TelemetryEventTypeWithPayload, +} from '@kbn/observability-ai-assistant-plugin/public'; import { PromptEditor } from '../prompt_editor/prompt_editor'; -import type { Message } from '../../../common'; -import type { ChatActionClickHandler } from './types'; -import type { TelemetryEventTypeWithPayload } from '../../analytics'; interface Props { editing: boolean; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_title.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_title.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_item_title.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_item_title.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx similarity index 91% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx index cb7e9366ea92..88354f41ba29 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.stories.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.stories.tsx @@ -6,18 +6,20 @@ */ import { EuiButton, EuiSpacer } from '@elastic/eui'; -import { ComponentStory } from '@storybook/react'; -import React, { ComponentProps, useState } from 'react'; -import { MessageRole } from '../../../common'; -import { ChatState } from '../../hooks/use_chat'; -import { ObservabilityAIAssistantChatService } from '../../types'; +import type { ComponentStory } from '@storybook/react'; +import React, { type ComponentProps, useState } from 'react'; +import { + MessageRole, + type ObservabilityAIAssistantChatService, +} from '@kbn/observability-ai-assistant-plugin/public'; +import { ChatState } from '@kbn/observability-ai-assistant-plugin/public'; import { buildAssistantMessage, buildFunctionResponseMessage, buildSystemMessage, buildUserMessage, } from '../../utils/builders'; -import { ChatTimeline as Component, ChatTimelineProps } from './chat_timeline'; +import { ChatTimeline as Component, type ChatTimelineProps } from './chat_timeline'; export default { component: Component, diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx similarity index 86% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx index 05a188e005f9..ec2cf2ca68e7 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/chat/chat_timeline.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/chat/chat_timeline.tsx @@ -5,24 +5,23 @@ * 2.0. */ -import React, { ReactNode, useMemo } from 'react'; +import React, { type ReactNode, useMemo } from 'react'; import { css } from '@emotion/css'; import { EuiCommentList } from '@elastic/eui'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; import { omit } from 'lodash'; -import type { Feedback } from '../feedback_buttons'; -import type { Message } from '../../../common'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { + ChatActionClickPayload, + ChatState, + type Feedback, + type ObservabilityAIAssistantChatService, + type TelemetryEventTypeWithPayload, +} from '@kbn/observability-ai-assistant-plugin/public'; import type { UseKnowledgeBaseResult } from '../../hooks/use_knowledge_base'; -import type { ChatActionClickPayload } from './types'; -import type { ObservabilityAIAssistantChatService } from '../../types'; -import type { TelemetryEventTypeWithPayload } from '../../analytics'; import { ChatItem } from './chat_item'; import { ChatConsolidatedItems } from './chat_consolidated_items'; -import { ChatState } from '../../hooks/use_chat'; -import { - getTimelineItemsfromConversation, - StartedFrom, -} from '../../utils/get_timeline_items_from_conversation'; +import { getTimelineItemsfromConversation } from '../../utils/get_timeline_items_from_conversation'; export interface ChatTimelineItem extends Pick { @@ -53,7 +52,6 @@ export interface ChatTimelineProps { hasConnector: boolean; chatState: ChatState; currentUser?: Pick; - startedFrom?: StartedFrom; onEdit: (message: Message, messageAfterEdit: Message) => void; onFeedback: (message: Message, feedback: Feedback) => void; onRegenerate: (message: Message) => void; @@ -73,7 +71,6 @@ export function ChatTimeline({ chatService, hasConnector, currentUser, - startedFrom, onEdit, onFeedback, onRegenerate, @@ -88,7 +85,6 @@ export function ChatTimeline({ hasConnector, messages, currentUser, - startedFrom, chatState, onActionClick, }); @@ -113,7 +109,7 @@ export function ChatTimeline({ } return consolidatedChatItems; - }, [chatService, hasConnector, messages, currentUser, startedFrom, chatState, onActionClick]); + }, [chatService, hasConnector, messages, currentUser, chatState, onActionClick]); return ( { + return hasBeenOpened ? service.start({ signal }) : undefined; + }, + [service, hasBeenOpened] + ); + + const [isOpen, setIsOpen] = useState(false); + + const keyRef = useRef(v4()); + + const { isVisible } = useIsNavControlVisible(); + + useEffect(() => { + const conversationSubscription = service.conversations.predefinedConversation$.subscribe(() => { + setHasBeenOpened(true); + setIsOpen(true); + }); + + return () => { + conversationSubscription.unsubscribe(); + }; + }, [service.conversations.predefinedConversation$]); + + const { messages, title } = useObservable(service.conversations.predefinedConversation$) ?? { + messages: [], + title: undefined, + }; + + const theme = useTheme(); + + const buttonCss = css` + padding: 0px 8px; + + svg path { + fill: ${theme.colors.darkestShade}; + } + `; + + if (!isVisible) { + return null; + } + + return ( + <> + { + service.conversations.openNewConversation({ + messages: [], + }); + }} + color="primary" + size="s" + fullWidth={false} + minWidth={0} + > + + + {chatService.value ? ( + + { + setIsOpen(false); + }} + /> + + ) : undefined} + + ); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx new file mode 100644 index 000000000000..77086a9bf73a --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/lazy_nav_control.tsx @@ -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. + */ + +import { withSuspense } from '@kbn/shared-ux-utility'; +import { lazy } from 'react'; + +export const LazyNavControl = withSuspense( + lazy(() => import('.').then((m) => ({ default: m.NavControl }))) +); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/page_template.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/page_template.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/page_template.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/page_template.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.stories.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.stories.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.stories.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.stories.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx similarity index 95% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx index 9110649b4b9b..9066c72278be 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx @@ -8,9 +8,13 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, keys } from '@elastic/eui'; -import { MessageRole, type Message } from '../../../common'; +import { + type Message, + MessageRole, + type TelemetryEventTypeWithPayload, + ObservabilityAIAssistantTelemetryEventType, +} from '@kbn/observability-ai-assistant-plugin/public'; import { FunctionListPopover } from '../chat/function_list_popover'; -import { TelemetryEventTypeWithPayload, TELEMETRY } from '../../analytics'; import { PromptEditorFunction } from './prompt_editor_function'; import { PromptEditorNaturalLanguage } from './prompt_editor_natural_language'; @@ -112,7 +116,7 @@ export function PromptEditor({ setMode('prompt'); onSendTelemetry({ - type: TELEMETRY.observability_ai_assistant_user_sent_prompt_in_chat, + type: ObservabilityAIAssistantTelemetryEventType.UserSentPromptInChat, payload: message, }); } catch (_) { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx similarity index 96% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx index c828843ee717..6691200845ff 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_function.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_function.tsx @@ -11,8 +11,9 @@ import { CodeEditor } from '@kbn/code-editor'; import { monaco } from '@kbn/monaco'; import { i18n } from '@kbn/i18n'; import { EuiCode, EuiPanel } from '@elastic/eui'; +import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; import { useJsonEditorModel } from '../../hooks/use_json_editor_model'; -import { type Message, MessageRole } from '../../../common'; export interface Props { functionName: string; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx similarity index 93% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx index 6d752ce95e1f..bba80817566f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/prompt_editor/prompt_editor_natural_language.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx @@ -7,7 +7,8 @@ import React, { useCallback, useEffect, useRef } from 'react'; import { EuiTextArea } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { type Message, MessageRole } from '../../../common'; +import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; interface Props { disabled: boolean; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx similarity index 87% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx index eded1c30e59e..c9aaac67e1fb 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/render_function.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/render_function.tsx @@ -5,9 +5,11 @@ * 2.0. */ import React from 'react'; -import { Message } from '../../common'; +import type { + ChatActionClickHandler, + Message, +} from '@kbn/observability-ai-assistant-plugin/public'; import { useObservabilityAIAssistantChatService } from '../hooks/use_observability_ai_assistant_chat_service'; -import type { ChatActionClickHandler } from './chat/types'; interface Props { name: string; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/components/technical_preview_badge.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/technical_preview_badge.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/components/technical_preview_badge.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/technical_preview_badge.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx new file mode 100644 index 000000000000..9de7f023b4d1 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/context/observability_ai_assistant_app_service_provider.tsx @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createContext } from 'react'; +import type { ObservabilityAIAssistantAppService } from '../service/create_app_service'; + +export const ObservabilityAIAssistantAppServiceContext = createContext< + ObservabilityAIAssistantAppService | undefined +>(undefined); + +export const ObservabilityAIAssistantAppServiceProvider = + ObservabilityAIAssistantAppServiceContext.Provider; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts similarity index 54% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts index 056744fa101a..f60007a29284 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/index.ts @@ -5,23 +5,18 @@ * 2.0. */ -import type { - ObservabilityAIAssistantPluginStartDependencies, - ObservabilityAIAssistantService, - RegisterRenderFunctionDefinition, -} from '../types'; +import type { RegisterRenderFunctionDefinition } from '@kbn/observability-ai-assistant-plugin/public/types'; +import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; import { registerLensRenderFunction } from './lens'; import { registerVisualizeQueryRenderFunction } from './visualize_esql'; export async function registerFunctions({ registerRenderFunction, - service, pluginsStart, }: { registerRenderFunction: RegisterRenderFunctionDefinition; - service: ObservabilityAIAssistantService; - pluginsStart: ObservabilityAIAssistantPluginStartDependencies; + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; }) { - registerLensRenderFunction({ service, pluginsStart, registerRenderFunction }); - registerVisualizeQueryRenderFunction({ service, pluginsStart, registerRenderFunction }); + registerLensRenderFunction({ pluginsStart, registerRenderFunction }); + registerVisualizeQueryRenderFunction({ pluginsStart, registerRenderFunction }); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx similarity index 95% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx index 22d4b91a5f90..cd2a522755f6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/lens.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/lens.tsx @@ -12,13 +12,12 @@ import type { LensEmbeddableInput, LensPublicStart } from '@kbn/lens-plugin/publ import React, { useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { Assign } from 'utility-types'; -import type { LensFunctionArguments } from '../../common/functions/lens'; -import type { - ObservabilityAIAssistantPluginStartDependencies, - ObservabilityAIAssistantService, +import { RegisterRenderFunctionDefinition, RenderFunction, -} from '../types'; +} from '@kbn/observability-ai-assistant-plugin/public/types'; +import type { LensFunctionArguments } from '../../common/functions/lens'; +import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; export enum SeriesType { Bar = 'bar', @@ -139,13 +138,11 @@ function Lens({ } export function registerLensRenderFunction({ - service, registerRenderFunction, pluginsStart, }: { - service: ObservabilityAIAssistantService; registerRenderFunction: RegisterRenderFunctionDefinition; - pluginsStart: ObservabilityAIAssistantPluginStartDependencies; + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; }) { registerRenderFunction( 'lens', diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx similarity index 91% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx index de7c4f04f241..dc17678741c1 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.test.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.test.tsx @@ -12,7 +12,6 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public'; import { lensPluginMock } from '@kbn/lens-plugin/public/mocks/lens_plugin_mock'; import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; -import { ObservabilityAIAssistantMultipaneFlyoutProvider } from '../context/observability_ai_assistant_multipane_flyout_provider'; import { VisualizeESQL } from './visualize_esql'; describe('VisualizeESQL', () => { @@ -50,8 +49,11 @@ describe('VisualizeESQL', () => { }, }, ] as DatatableColumn[]; + + const ObservabilityAIAssistantMultipaneFlyoutContext = React.createContext(undefined); + render( - { query={'from foo | keep bytes, destination'} onActionClick={jest.fn()} userOverrides={userOverrides} + ObservabilityAIAssistantMultipaneFlyoutContext={ + ObservabilityAIAssistantMultipaneFlyoutContext + } /> - + ); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx similarity index 92% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx index 9544459a3519..eb302811d96a 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/functions/visualize_esql.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/functions/visualize_esql.tsx @@ -4,40 +4,40 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { v4 as uuidv4 } from 'uuid'; -import { i18n } from '@kbn/i18n'; import { + EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiToolTip, - EuiButtonIcon, } from '@elastic/eui'; import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types'; -import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import { getESQLAdHocDataview, getIndexPatternFromESQLQuery } from '@kbn/esql-utils'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import { getLensAttributesFromSuggestion } from '@kbn/visualization-utils'; +import { i18n } from '@kbn/i18n'; import type { + InlineEditLensEmbeddableContext, LensPublicStart, TypedLensByValueInput, - InlineEditLensEmbeddableContext, } from '@kbn/lens-plugin/public'; -import React, { useState, useEffect, useCallback, useMemo, useContext } from 'react'; -import ReactDOM from 'react-dom'; -import useAsync from 'react-use/lib/useAsync'; -import { getIndexPatternFromESQLQuery, getESQLAdHocDataview } from '@kbn/esql-utils'; -import { - VisualizeESQLFunctionArguments, - VisualizeESQLUserIntention, -} from '../../common/functions/visualize_esql'; -import { ObservabilityAIAssistantMultipaneFlyoutContext } from '../context/observability_ai_assistant_multipane_flyout_provider'; import type { - ObservabilityAIAssistantPluginStartDependencies, - ObservabilityAIAssistantService, + ChatActionClickHandler, + ObservabilityAIAssistantPublicStart, RegisterRenderFunctionDefinition, RenderFunction, -} from '../types'; -import { type ChatActionClickHandler, ChatActionClickType } from '../components/chat/types'; +} from '@kbn/observability-ai-assistant-plugin/public'; +import { + ChatActionClickType, + VisualizeESQLUserIntention, +} from '@kbn/observability-ai-assistant-plugin/public'; +import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import { getLensAttributesFromSuggestion } from '@kbn/visualization-utils'; +import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import ReactDOM from 'react-dom'; +import useAsync from 'react-use/lib/useAsync'; +import { v4 as uuidv4 } from 'uuid'; +import { VisualizeESQLFunctionArguments } from '../../common/functions/visualize_esql'; +import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; enum ChartType { XY = 'XY', @@ -87,6 +87,7 @@ interface VisualizeESQLProps { userOverrides?: unknown; /** User's preferation chart type as it comes from the model */ preferredChartType?: ChartType; + ObservabilityAIAssistantMultipaneFlyoutContext: ObservabilityAIAssistantPublicStart['ObservabilityAIAssistantMultipaneFlyoutContext']; } function generateId() { @@ -102,6 +103,7 @@ export function VisualizeESQL({ onActionClick, userOverrides, preferredChartType, + ObservabilityAIAssistantMultipaneFlyoutContext, }: VisualizeESQLProps) { // fetch the pattern from the query const indexPattern = getIndexPatternFromESQLQuery(query); @@ -158,6 +160,7 @@ export function VisualizeESQL({ [], preferredChartType ); + if (chartSuggestions?.length) { const [suggestion] = chartSuggestions; @@ -301,13 +304,11 @@ export function VisualizeESQL({ } export function registerVisualizeQueryRenderFunction({ - service, registerRenderFunction, pluginsStart, }: { - service: ObservabilityAIAssistantService; registerRenderFunction: RegisterRenderFunctionDefinition; - pluginsStart: ObservabilityAIAssistantPluginStartDependencies; + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; }) { registerRenderFunction( 'visualize_query', @@ -377,6 +378,9 @@ export function registerVisualizeQueryRenderFunction({ return ( { + const appSubscription = combineLatest([currentAppId$, applications$]).subscribe({ + next: ([appId, applications]) => { + const isObservabilityApp = + appId && + applications.get(appId)?.category?.id === DEFAULT_APP_CATEGORIES.observability.id; + + setIsVisible(!!isObservabilityApp); + }, + }); + + return appSubscription.unsubscribe; + }, [currentAppId$, applications$]); + + return { + isVisible, + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_confirm_modal.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_confirm_modal.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_confirm_modal.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_confirm_modal.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx similarity index 91% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx index 74bd34c3d593..2f7d872d191d 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.test.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.test.tsx @@ -13,38 +13,47 @@ import { } from '@testing-library/react-hooks'; import { merge } from 'lodash'; import React from 'react'; -import { Subject } from 'rxjs'; -import { MessageRole } from '../../common'; +import { Observable, Subject } from 'rxjs'; import { + MessageRole, StreamingChatResponseEventType, StreamingChatResponseEventWithoutError, -} from '../../common/conversation_complete'; -import { ObservabilityAIAssistantProvider } from '../context/observability_ai_assistant_provider'; +} from '@kbn/observability-ai-assistant-plugin/common'; +import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider'; import { EMPTY_CONVERSATION_TITLE } from '../i18n'; -import { createMockChatService } from '../service/create_mock_chat_service'; -import type { ObservabilityAIAssistantService } from '../types'; -import { ChatState } from './use_chat'; +import type { ObservabilityAIAssistantAppService } from '../service/create_app_service'; import { useConversation, type UseConversationProps, type UseConversationResult, } from './use_conversation'; import * as useKibanaModule from './use_kibana'; +import { ChatState } from '@kbn/observability-ai-assistant-plugin/public'; +import { createMockChatService } from '../utils/create_mock_chat_service'; +import { createUseChat } from '@kbn/observability-ai-assistant-plugin/public/hooks/use_chat'; +import type { NotificationsStart } from '@kbn/core/public'; let hookResult: RenderHookResult; -type MockedService = DeeplyMockedKeys; +type MockedService = DeeplyMockedKeys> & { + conversations: DeeplyMockedKeys< + Omit + > & { + predefinedConversation$: Observable; + }; +}; const mockService: MockedService = { callApi: jest.fn(), - getCurrentUser: jest.fn(), - getLicense: jest.fn(), - getLicenseManagementLocator: jest.fn(), isEnabled: jest.fn(), start: jest.fn(), register: jest.fn(), setScreenContext: jest.fn(), getScreenContexts: jest.fn(), + conversations: { + openNewConversation: jest.fn(), + predefinedConversation$: new Observable(), + }, }; const mockChatService = createMockChatService(); @@ -53,9 +62,17 @@ const addErrorMock = jest.fn(); jest.spyOn(useKibanaModule, 'useKibana').mockReturnValue({ services: { - notifications: { - toasts: { - addError: addErrorMock, + plugins: { + start: { + observabilityAIAssistant: { + useChat: createUseChat({ + notifications: { + toasts: { + addError: addErrorMock, + }, + } as unknown as NotificationsStart, + }), + }, }, }, }, @@ -67,9 +84,9 @@ describe('useConversation', () => { beforeEach(() => { jest.clearAllMocks(); wrapper = ({ children }) => ( - + {children} - + ); }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts similarity index 87% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts index df3c59a316ad..9dd5dc66c1ef 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation.ts @@ -7,15 +7,21 @@ import { i18n } from '@kbn/i18n'; import { merge, omit } from 'lodash'; import { useState } from 'react'; -import type { Conversation, Message } from '../../common'; -import type { ConversationCreateRequest } from '../../common/types'; +import type { + Conversation, + ConversationCreateRequest, + Message, +} from '@kbn/observability-ai-assistant-plugin/common'; +import { + ObservabilityAIAssistantChatService, + useAbortableAsync, +} from '@kbn/observability-ai-assistant-plugin/public'; +import type { AbortableAsyncState } from '@kbn/observability-ai-assistant-plugin/public'; +import type { UseChatResult } from '@kbn/observability-ai-assistant-plugin/public'; import { EMPTY_CONVERSATION_TITLE } from '../i18n'; -import type { ObservabilityAIAssistantChatService } from '../types'; -import { useAbortableAsync, type AbortableAsyncState } from './use_abortable_async'; -import { useChat, UseChatResult } from './use_chat'; import { useKibana } from './use_kibana'; -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; import { useOnce } from './use_once'; +import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service'; function createNewConversation({ title = EMPTY_CONVERSATION_TITLE, @@ -56,10 +62,17 @@ export function useConversation({ connectorId, onConversationUpdate, }: UseConversationProps): UseConversationResult { - const service = useObservabilityAIAssistant(); + const service = useObservabilityAIAssistantAppService(); const { - services: { notifications }, + services: { + notifications, + plugins: { + start: { + observabilityAIAssistant: { useChat }, + }, + }, + }, } = useKibana(); const initialConversationId = useOnce(initialConversationIdFromProps); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_key.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_key.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_key.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_key.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts similarity index 87% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts index f3b251fc2cdf..6fa6bc02e7b3 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_conversation_list.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_conversation_list.ts @@ -7,10 +7,13 @@ import { useEffect, useState } from 'react'; import { i18n } from '@kbn/i18n'; -import { Conversation } from '../../common'; -import { AbortableAsyncState, useAbortableAsync } from './use_abortable_async'; +import { + type AbortableAsyncState, + type Conversation, + useAbortableAsync, +} from '@kbn/observability-ai-assistant-plugin/public'; import { useKibana } from './use_kibana'; -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; +import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service'; export interface UseConversationListResult { isLoading: boolean; @@ -19,7 +22,7 @@ export interface UseConversationListResult { } export function useConversationList(): UseConversationListResult { - const service = useObservabilityAIAssistant(); + const service = useObservabilityAIAssistantAppService(); const [isUpdatingList, setIsUpdatingList] = useState(false); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts similarity index 73% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts index 6414e7f604f6..1ca539eb8837 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_current_user.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_current_user.ts @@ -7,24 +7,30 @@ import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { useEffect, useState } from 'react'; -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; +import { useKibana } from './use_kibana'; export function useCurrentUser() { - const service = useObservabilityAIAssistant(); + const { + services: { + plugins: { + start: { security }, + }, + }, + } = useKibana(); const [user, setUser] = useState(); useEffect(() => { const getCurrentUser = async () => { try { - const authenticatedUser = await service.getCurrentUser(); + const authenticatedUser = await security.authc.getCurrentUser(); setUser(authenticatedUser); } catch { setUser(undefined); } }; getCurrentUser(); - }, [service]); + }, [security]); return user; } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_force_update.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_force_update.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_force_update.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_force_update.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts new file mode 100644 index 000000000000..1b105513a232 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_genai_connectors.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useKibana } from './use_kibana'; + +export function useGenAIConnectors() { + const { + services: { + plugins: { + start: { observabilityAIAssistant }, + }, + }, + } = useKibana(); + + return observabilityAIAssistant.useGenAIConnectors(); +} + +export type UseGenAIConnectorsResult = ReturnType; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_json_editor_model.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_json_editor_model.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_json_editor_model.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_json_editor_model.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts new file mode 100644 index 000000000000..2366fb5275c9 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_kibana.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import type { CoreStart } from '@kbn/core/public'; +import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; + +export type StartServices = CoreStart & { + plugins: { start: ObservabilityAIAssistantAppPluginStartDependencies }; +} & TAdditionalServices & {}; + +const useTypedKibana = () => + useKibana>(); + +export { useTypedKibana as useKibana }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx similarity index 89% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx index 026de6b9ea1c..0df3ab16c421 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_knowledge_base.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_knowledge_base.tsx @@ -10,9 +10,12 @@ import type { MlDeploymentState, } from '@elastic/elasticsearch/lib/api/types'; import { useMemo, useState } from 'react'; -import { AbortableAsyncState, useAbortableAsync } from './use_abortable_async'; +import { + type AbortableAsyncState, + useAbortableAsync, +} from '@kbn/observability-ai-assistant-plugin/public'; import { useKibana } from './use_kibana'; -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; +import { useObservabilityAIAssistantAppService } from './use_observability_ai_assistant_app_service'; export interface UseKnowledgeBaseResult { status: AbortableAsyncState<{ @@ -34,7 +37,7 @@ export function useKnowledgeBase(): UseKnowledgeBaseResult { start: { ml }, }, } = useKibana().services; - const service = useObservabilityAIAssistant(); + const service = useObservabilityAIAssistantAppService(); const status = useAbortableAsync(({ signal }) => { return service.callApi('GET /internal/observability_ai_assistant/kb/status', { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts similarity index 74% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts index c28e7da13256..58f074a4e71c 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license.ts @@ -5,11 +5,10 @@ * 2.0. */ +import type { ILicense, LicenseType } from '@kbn/licensing-plugin/public'; import { useCallback } from 'react'; -import { Observable } from 'rxjs'; import useObservable from 'react-use/lib/useObservable'; -import type { ILicense, LicenseType } from '@kbn/licensing-plugin/public'; -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; +import { useKibana } from './use_kibana'; interface UseLicenseReturnValue { getLicense: () => ILicense | null; @@ -17,12 +16,18 @@ interface UseLicenseReturnValue { } export const useLicense = (): UseLicenseReturnValue => { - const service = useObservabilityAIAssistant(); + const { + services: { + plugins: { + start: { licensing }, + }, + }, + } = useKibana(); - const license = useObservable(service.getLicense() ?? new Observable(), null); + const license = useObservable(licensing.license$); return { - getLicense: () => license, + getLicense: () => license ?? null, hasAtLeast: useCallback( (level: LicenseType) => { if (!license) return; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts similarity index 66% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts index fe6c636e5286..1d5dd0420335 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_license_management_locator.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_license_management_locator.ts @@ -5,16 +5,20 @@ * 2.0. */ -import { useObservabilityAIAssistant } from './use_observability_ai_assistant'; +import { useKibana } from './use_kibana'; const LICENSE_MANAGEMENT_LOCATOR = 'LICENSE_MANAGEMENT_LOCATOR'; export const useLicenseManagementLocator = () => { - const service = useObservabilityAIAssistant(); + const { + services: { + plugins: { + start: { share }, + }, + }, + } = useKibana(); - const locators = service.getLicenseManagementLocator(); - - const locator = locators.url.locators.get(LICENSE_MANAGEMENT_LOCATOR); + const locator = share.url.locators.get(LICENSE_MANAGEMENT_LOCATOR); // license management does not exist on serverless if (!locator) return; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts new file mode 100644 index 000000000000..9c86f29565f4 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_app_service.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useContext } from 'react'; +import { ObservabilityAIAssistantAppServiceContext } from '../context/observability_ai_assistant_app_service_provider'; + +export function useObservabilityAIAssistantAppService() { + const services = useContext(ObservabilityAIAssistantAppServiceContext); + + if (!services) { + throw new Error( + 'ObservabilityAIAssistantContext not set. Did you wrap your component in ``?' + ); + } + + return services; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts new file mode 100644 index 000000000000..b03fbe942f3e --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_chat_service.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useKibana } from './use_kibana'; + +export function useObservabilityAIAssistantChatService() { + const { + services: { + plugins: { + start: { observabilityAIAssistant }, + }, + }, + } = useKibana(); + + return observabilityAIAssistant.useObservabilityAIAssistantChatService(); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_params.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_params.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_params.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_params.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_router.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/hooks/use_observability_ai_assistant_router.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_observability_ai_assistant_router.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.ts new file mode 100644 index 000000000000..00dab01456af --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_once.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 { useRef } from 'react'; + +export function useOnce(variable: T): T { + const ref = useRef(variable); + + if (ref.current !== variable) { + // eslint-disable-next-line no-console + console.trace( + `Variable changed from ${ref.current} to ${variable}, but only the initial value will be taken into account` + ); + } + + return ref.current; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts new file mode 100644 index 000000000000..d0b4ce61edef --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_theme.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEuiTheme } from '@elastic/eui'; + +export function useTheme() { + return useEuiTheme().euiTheme; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/i18n.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/i18n.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/i18n.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/i18n.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.ts new file mode 100644 index 000000000000..5de1c30de7c4 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/index.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 type { PluginInitializer, PluginInitializerContext } from '@kbn/core/public'; +import { ConfigSchema, ObservabilityAIAssistantAppPlugin } from './plugin'; +import type { + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies, + ObservabilityAIAssistantAppPublicSetup, + ObservabilityAIAssistantAppPublicStart, +} from './types'; + +export const plugin: PluginInitializer< + ObservabilityAIAssistantAppPublicSetup, + ObservabilityAIAssistantAppPublicStart, + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies +> = (pluginInitializerContext: PluginInitializerContext) => + new ObservabilityAIAssistantAppPlugin(pluginInitializerContext); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx new file mode 100644 index 000000000000..bfc1f288ffcb --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/plugin.tsx @@ -0,0 +1,134 @@ +/* + * Copyright 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 ReactDOM from 'react-dom'; +import { + type AppMountParameters, + DEFAULT_APP_CATEGORIES, + type CoreSetup, + type CoreStart, + type Plugin, + type PluginInitializerContext, +} from '@kbn/core/public'; +import type { Logger } from '@kbn/logging'; +import { i18n } from '@kbn/i18n'; +import type { + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies, + ObservabilityAIAssistantAppPublicSetup, + ObservabilityAIAssistantAppPublicStart, +} from './types'; +import { createAppService, ObservabilityAIAssistantAppService } from './service/create_app_service'; +import { SharedProviders } from './utils/shared_providers'; +import { LazyNavControl } from './components/nav_control/lazy_nav_control'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ConfigSchema {} + +export class ObservabilityAIAssistantAppPlugin + implements + Plugin< + ObservabilityAIAssistantAppPublicSetup, + ObservabilityAIAssistantAppPublicStart, + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies + > +{ + logger: Logger; + appService: ObservabilityAIAssistantAppService | undefined; + + constructor(context: PluginInitializerContext) { + this.logger = context.logger.get(); + } + setup( + coreSetup: CoreSetup, + pluginsSetup: ObservabilityAIAssistantAppPluginSetupDependencies + ): ObservabilityAIAssistantAppPublicSetup { + coreSetup.application.register({ + id: 'observabilityAIAssistant', + title: i18n.translate('xpack.observabilityAiAssistant.appTitle', { + defaultMessage: 'Observability AI Assistant', + }), + euiIconType: 'logoObservability', + appRoute: '/app/observabilityAIAssistant', + category: DEFAULT_APP_CATEGORIES.observability, + visibleIn: [], + deepLinks: [ + { + id: 'conversations', + title: i18n.translate('xpack.observabilityAiAssistant.conversationsDeepLinkTitle', { + defaultMessage: 'Conversations', + }), + path: '/conversations/new', + }, + ], + mount: async (appMountParameters: AppMountParameters) => { + // Load application bundle and Get start services + const [{ Application }, [coreStart, pluginsStart]] = await Promise.all([ + import('./application'), + coreSetup.getStartServices() as Promise< + [CoreStart, ObservabilityAIAssistantAppPluginStartDependencies, unknown] + >, + ]); + + ReactDOM.render( + , + appMountParameters.element + ); + + return () => { + ReactDOM.unmountComponentAtNode(appMountParameters.element); + }; + }, + }); + + return {}; + } + + start( + coreStart: CoreStart, + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies + ): ObservabilityAIAssistantAppPublicStart { + const appService = (this.appService = createAppService({ + pluginsStart, + })); + + coreStart.chrome.navControls.registerRight({ + mount: (element) => { + ReactDOM.render( + + + , + element, + () => {} + ); + + return () => {}; + }, + // right before the user profile + order: 1001, + }); + + pluginsStart.observabilityAIAssistant.service.register(async ({ registerRenderFunction }) => { + const { registerFunctions } = await import('./functions'); + + await registerFunctions({ pluginsStart, registerRenderFunction }); + }); + + return {}; + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/config.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/config.tsx similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/config.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/config.tsx diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx similarity index 89% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx index 7c70672f1b54..3ac7df9f0fcd 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/routes/conversations/conversation_view.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/routes/conversations/conversation_view.tsx @@ -9,19 +9,19 @@ import { css } from '@emotion/css'; import { euiThemeVars } from '@kbn/ui-theme'; import React, { useEffect, useState } from 'react'; import ReactDOM from 'react-dom'; +import { useAbortableAsync } from '@kbn/observability-ai-assistant-plugin/public'; import { ChatBody } from '../../components/chat/chat_body'; import { ChatInlineEditingContent } from '../../components/chat/chat_inline_edit'; import { ConversationList } from '../../components/chat/conversation_list'; -import { ObservabilityAIAssistantChatServiceProvider } from '../../context/observability_ai_assistant_chat_service_provider'; -import { useAbortableAsync } from '../../hooks/use_abortable_async'; -import { useConversationKey } from '../../hooks/use_conversation_key'; -import { useConversationList } from '../../hooks/use_conversation_list'; import { useCurrentUser } from '../../hooks/use_current_user'; import { useGenAIConnectors } from '../../hooks/use_genai_connectors'; import { useKnowledgeBase } from '../../hooks/use_knowledge_base'; -import { useObservabilityAIAssistant } from '../../hooks/use_observability_ai_assistant'; import { useObservabilityAIAssistantParams } from '../../hooks/use_observability_ai_assistant_params'; import { useObservabilityAIAssistantRouter } from '../../hooks/use_observability_ai_assistant_router'; +import { useObservabilityAIAssistantAppService } from '../../hooks/use_observability_ai_assistant_app_service'; +import { useKibana } from '../../hooks/use_kibana'; +import { useConversationKey } from '../../hooks/use_conversation_key'; +import { useConversationList } from '../../hooks/use_conversation_list'; const SECOND_SLOT_CONTAINER_WIDTH = 400; @@ -30,7 +30,7 @@ export function ConversationView() { const currentUser = useCurrentUser(); - const service = useObservabilityAIAssistant(); + const service = useObservabilityAIAssistantAppService(); const connectors = useGenAIConnectors(); @@ -40,6 +40,16 @@ export function ConversationView() { const { path } = useObservabilityAIAssistantParams('/conversations/*'); + const { + services: { + plugins: { + start: { + observabilityAIAssistant: { ObservabilityAIAssistantChatServiceContext }, + }, + }, + }, + } = useKibana(); + const chatService = useAbortableAsync( ({ signal }) => { return service.start({ signal }); @@ -152,7 +162,7 @@ export function ConversationView() { ) : null} {chatService.value && ( - + @@ -171,7 +180,7 @@ export function ConversationView() { style={{ width: '100%' }} />
- + )}
); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.ts new file mode 100644 index 000000000000..dfb9b703bc4e --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/service/create_app_service.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 { ObservabilityAIAssistantService } from '@kbn/observability-ai-assistant-plugin/public'; +import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; + +export type ObservabilityAIAssistantAppService = ObservabilityAIAssistantService; + +export function createAppService({ + pluginsStart, +}: { + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; +}): ObservabilityAIAssistantAppService { + return { + ...pluginsStart.observabilityAIAssistant.service, + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts new file mode 100644 index 000000000000..5bce062b9eec --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/types.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { LensPublicSetup, LensPublicStart } from '@kbn/lens-plugin/public'; +import type { + DataViewsPublicPluginSetup, + DataViewsPublicPluginStart, +} from '@kbn/data-views-plugin/public'; +import type { UiActionsSetup, UiActionsStart } from '@kbn/ui-actions-plugin/public'; +import type { + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, +} from '@kbn/observability-ai-assistant-plugin/public'; +import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; +import type { SecurityPluginStart, SecurityPluginSetup } from '@kbn/security-plugin/public'; +import type { LicensingPluginSetup, LicensingPluginStart } from '@kbn/licensing-plugin/public'; +import type { + ObservabilitySharedPluginSetup, + ObservabilitySharedPluginStart, +} from '@kbn/observability-shared-plugin/public'; +import type { MlPluginSetup, MlPluginStart } from '@kbn/ml-plugin/public'; +import type { + TriggersAndActionsUIPublicPluginSetup, + TriggersAndActionsUIPublicPluginStart, +} from '@kbn/triggers-actions-ui-plugin/public'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ObservabilityAIAssistantAppPublicStart {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ObservabilityAIAssistantAppPublicSetup {} + +export interface ObservabilityAIAssistantAppPluginStartDependencies { + licensing: LicensingPluginStart; + share: SharePluginStart; + security: SecurityPluginStart; + lens: LensPublicStart; + dataViews: DataViewsPublicPluginStart; + uiActions: UiActionsStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; + observabilityShared: ObservabilitySharedPluginStart; + ml: MlPluginStart; + triggersActionsUi: TriggersAndActionsUIPublicPluginStart; +} + +export interface ObservabilityAIAssistantAppPluginSetupDependencies { + licensing: LicensingPluginSetup; + share: SharePluginSetup; + security: SecurityPluginSetup; + lens: LensPublicSetup; + dataViews: DataViewsPublicPluginSetup; + uiActions: UiActionsSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; + observabilityShared: ObservabilitySharedPluginSetup; + ml: MlPluginSetup; + triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts new file mode 100644 index 000000000000..57bdf17bd9a7 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/builders.ts @@ -0,0 +1,124 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { merge, uniqueId } from 'lodash'; +import type { DeepPartial } from 'utility-types'; +import { + type Conversation, + type Message, + MessageRole, +} from '@kbn/observability-ai-assistant-plugin/common'; +import { getAssistantSystemMessage } from '@kbn/observability-ai-assistant-plugin/public'; + +type BuildMessageProps = DeepPartial & { + message: { + role: MessageRole; + function_call?: { + name: string; + trigger: MessageRole.Assistant | MessageRole.User | MessageRole.Elastic; + }; + }; +}; + +export function buildMessage(params: BuildMessageProps): Message { + return merge( + { + '@timestamp': new Date().toISOString(), + }, + params + ); +} + +export function buildSystemMessage( + params?: Omit & { + message: DeepPartial>; + } +) { + return buildMessage( + merge({}, params, { + message: { role: MessageRole.System }, + }) + ); +} + +export function buildUserMessage( + params?: Omit & { + message?: DeepPartial>; + } +) { + return buildMessage( + merge( + { + message: { + content: "What's a function?", + }, + }, + params, + { + message: { role: MessageRole.User }, + } + ) + ); +} + +export function buildAssistantMessage( + params?: Omit & { + message: DeepPartial>; + } +) { + return buildMessage( + merge( + { + message: { + content: `In computer programming and mathematics, a function is a fundamental concept that represents a relationship between input values and output values. It takes one or more input values (also known as arguments or parameters) and processes them to produce a result, which is the output of the function. The input values are passed to the function, and the function performs a specific set of operations or calculations on those inputs to produce the desired output. + A function is often defined with a name, which serves as an identifier to call and use the function in the code. It can be thought of as a reusable block of code that can be executed whenever needed, and it helps in organizing code and making it more modular and maintainable.`, + }, + }, + params, + { + message: { role: MessageRole.Assistant }, + } + ) + ); +} + +export function buildFunctionResponseMessage( + params?: Omit & { + message: DeepPartial>; + } +) { + return buildUserMessage( + merge( + {}, + { + message: { + name: 'leftpad', + }, + ...params, + } + ) + ); +} + +export function buildConversation(params?: Partial) { + return { + '@timestamp': '', + user: { + name: 'foo', + }, + conversation: { + id: uniqueId(), + title: '', + last_updated: '', + }, + messages: [getAssistantSystemMessage({ contexts: [] })], + labels: {}, + numeric_labels: {}, + namespace: '', + ...params, + }; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.test.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.test.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.test.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts similarity index 92% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts index 6ae23042a63e..ecd3554e4923 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/create_initialized_object.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { FunctionDefinition } from '../../common/types'; +import type { FunctionDefinition } from '@kbn/observability-ai-assistant-plugin/common'; type Params = FunctionDefinition['parameters']; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts new file mode 100644 index 000000000000..07fde4462abb --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_mock_chat_service.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DeeplyMockedKeys } from '@kbn/utility-types-jest'; +import type { ObservabilityAIAssistantChatService } from '@kbn/observability-ai-assistant-plugin/public'; + +type MockedChatService = DeeplyMockedKeys; + +export const createMockChatService = (): MockedChatService => { + const mockChatService: MockedChatService = { + chat: jest.fn(), + complete: jest.fn(), + sendAnalyticsEvent: jest.fn(), + getContexts: jest.fn().mockReturnValue([{ name: 'core', description: '' }]), + getFunctions: jest.fn().mockReturnValue([]), + hasFunction: jest.fn().mockReturnValue(false), + hasRenderFunction: jest.fn().mockReturnValue(true), + renderFunction: jest.fn(), + }; + return mockChatService; +}; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts similarity index 91% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts index 390c0cfd0321..f74c9f842e40 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_role_translation.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_role_translation.ts @@ -6,7 +6,7 @@ */ import { i18n } from '@kbn/i18n'; -import { MessageRole } from '../../common'; +import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; export function getRoleTranslation(role: MessageRole) { if (role === MessageRole.User) { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_href.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_href.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_href.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_href.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_kb_href.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_kb_href.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_settings_kb_href.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_settings_kb_href.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx similarity index 89% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx index 4bc2d2812333..e73555540b1e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.test.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.test.tsx @@ -7,17 +7,36 @@ import React from 'react'; import { last, pick } from 'lodash'; import { render } from '@testing-library/react'; -import { Message, MessageRole } from '../../common'; -import { createMockChatService } from '../service/create_mock_chat_service'; import { getTimelineItemsfromConversation } from './get_timeline_items_from_conversation'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; -import { ObservabilityAIAssistantChatServiceProvider } from '../context/observability_ai_assistant_chat_service_provider'; -import { ChatState } from '../hooks/use_chat'; +import { ChatState, Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import { createMockChatService } from './create_mock_chat_service'; +import { KibanaContextProvider } from '@kbn/triggers-actions-ui-plugin/public/common/lib/kibana'; const mockChatService = createMockChatService(); let items: ReturnType; +function Providers({ children }: { children: React.ReactElement }) { + return ( + + mockChatService, + }, + }, + }, + }} + > + {children} + + + ); +} + describe('getTimelineItemsFromConversation', () => { describe('returns an opening message only', () => { items = getTimelineItemsfromConversation({ @@ -151,11 +170,7 @@ describe('getTimelineItemsFromConversation', () => { }); const { container } = render(items[2].title as React.ReactElement, { - wrapper: ({ children }) => ( - - {children} - - ), + wrapper: ({ children }) => {children}, }); expect(container.textContent).toBe('requested the function context'); @@ -177,11 +192,7 @@ describe('getTimelineItemsFromConversation', () => { }); const { container } = render(items[3].title as React.ReactElement, { - wrapper: ({ children }) => ( - - {children} - - ), + wrapper: ({ children }) => {children}, }); expect(container.textContent).toBe('executed the function context'); @@ -253,13 +264,7 @@ describe('getTimelineItemsFromConversation', () => { expect(items[3].element).toBeTruthy(); const { container } = render(items[3].element as React.ReactElement, { - wrapper: ({ children }) => ( - - - {children} - - - ), + wrapper: ({ children }) => {children}, }); expect(mockChatService.renderFunction).toHaveBeenCalledWith( @@ -405,42 +410,6 @@ describe('getTimelineItemsFromConversation', () => { }); }); - describe('when starting from a contextual insight', () => { - beforeEach(() => { - items = getTimelineItemsfromConversation({ - chatService: mockChatService, - hasConnector: true, - currentUser: { - username: 'johndoe', - full_name: 'John Doe', - }, - chatState: ChatState.Ready, - startedFrom: 'contextualInsight', - messages: [ - { - '@timestamp': new Date().toISOString(), - message: { - role: MessageRole.System, - content: 'System', - }, - }, - { - '@timestamp': new Date().toISOString(), - message: { - role: MessageRole.User, - content: 'Test', - }, - }, - ], - onActionClick: jest.fn(), - }); - }); - - it('hides the first user message', () => { - expect(items[1].display.collapsed).toBe(true); - }); - }); - describe('with function calling suggested by the user', () => { beforeEach(() => { mockChatService.hasRenderFunction.mockImplementation(() => false); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx similarity index 93% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx index 2268e6ed31fa..9a3fed770b94 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/get_timeline_items_from_conversation.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/get_timeline_items_from_conversation.tsx @@ -11,13 +11,16 @@ import { useEuiTheme } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { AuthenticatedUser } from '@kbn/security-plugin/common'; -import { Message, MessageRole } from '../../common'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; +import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import { + ChatState, + ObservabilityAIAssistantChatService, +} from '@kbn/observability-ai-assistant-plugin/public'; +import type { ChatActionClickPayload } from '@kbn/observability-ai-assistant-plugin/public'; import type { ChatTimelineItem } from '../components/chat/chat_timeline'; import { RenderFunction } from '../components/render_function'; -import type { ObservabilityAIAssistantChatService } from '../types'; -import { ChatState } from '../hooks/use_chat'; import { safeJsonParse } from './safe_json_parse'; -import type { ChatActionClickPayload } from '../components/chat/types'; function convertMessageToMarkdownCodeBlock(message: Message['message']) { let value: object; @@ -56,14 +59,11 @@ function FunctionName({ name: functionName }: { name: string }) { return {functionName}; } -export type StartedFrom = 'contextualInsight' | 'appTopNavbar' | 'conversationView'; - export function getTimelineItemsfromConversation({ chatService, currentUser, hasConnector, messages, - startedFrom, chatState, onActionClick, }: { @@ -71,7 +71,6 @@ export function getTimelineItemsfromConversation({ currentUser?: Pick; hasConnector: boolean; messages: Message[]; - startedFrom?: StartedFrom; chatState: ChatState; onActionClick: ({ message, @@ -209,14 +208,6 @@ export function getTimelineItemsfromConversation({ actions.canEdit = hasConnector; display.collapsed = false; - - if (startedFrom === 'contextualInsight') { - const firstUserMessageIndex = messagesWithoutSystem.findIndex( - (el) => el.message.role === MessageRole.User - ); - - display.collapsed = index === firstUserMessageIndex; - } } break; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/safe_json_parse.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/safe_json_parse.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/utils/safe_json_parse.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/safe_json_parse.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx similarity index 60% rename from x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx index 10e5403bba43..eaa441b34a00 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/public/application.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/shared_providers.tsx @@ -4,35 +4,28 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useMemo } from 'react'; -import type { History } from 'history'; -import type { Observable } from 'rxjs'; import { EuiErrorBoundary } from '@elastic/eui'; import type { CoreStart, CoreTheme } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; -import { RouteRenderer, RouterProvider } from '@kbn/typed-react-router-config'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; -import { ObservabilityAIAssistantProvider } from './context/observability_ai_assistant_provider'; -import { observabilityAIAssistantRouter } from './routes/config'; -import type { - ObservabilityAIAssistantPluginStartDependencies, - ObservabilityAIAssistantService, -} from './types'; - -// This is the Conversation application. +import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; +import React, { useMemo } from 'react'; +import type { Observable } from 'rxjs'; +import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider'; +import type { ObservabilityAIAssistantAppService } from '../service/create_app_service'; +import type { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; -export function Application({ +export function SharedProviders({ + children, coreStart, - history, pluginsStart, service, theme$, }: { + children: React.ReactElement; coreStart: CoreStart; - history: History; - pluginsStart: ObservabilityAIAssistantPluginStartDependencies; - service: ObservabilityAIAssistantService; + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; + service: ObservabilityAIAssistantAppService; theme$: Observable; }) { const theme = useMemo(() => { @@ -53,11 +46,9 @@ export function Application({ > - - - - - + + {children} + diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx new file mode 100644 index 000000000000..9651baf0d909 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/storybook_decorator.tsx @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import React, { ComponentType } from 'react'; +import { + createStorybookChatService, + createStorybookService, + type ObservabilityAIAssistantChatService, +} from '@kbn/observability-ai-assistant-plugin/public'; +import { ObservabilityAIAssistantAppService } from '../service/create_app_service'; +import { ObservabilityAIAssistantAppServiceProvider } from '../context/observability_ai_assistant_app_service_provider'; + +const mockService: ObservabilityAIAssistantAppService = { + ...createStorybookService(), +}; + +const mockChatService: ObservabilityAIAssistantChatService = createStorybookChatService(); + +export function KibanaReactStorybookDecorator(Story: ComponentType) { + const ObservabilityAIAssistantChatServiceContext = React.createContext(mockChatService); + return ( + { + if (setting === 'dateFormat') { + return 'MMM D, YYYY HH:mm'; + } + }, + }, + observabilityAIAssistant: { + ObservabilityAIAssistantChatServiceContext, + }, + }} + > + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.ts new file mode 100644 index 000000000000..f1e9daaa5d12 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/config.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 { schema, type TypeOf } from '@kbn/config-schema'; + +export const config = schema.object({ + enabled: schema.boolean({ defaultValue: true }), +}); + +export type ObservabilityAIAssistantAppConfig = TypeOf; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts similarity index 94% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts index e58d75c52cf7..750e735c8560 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/alerts.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/alerts.ts @@ -13,6 +13,7 @@ import { ALERT_STATUS_ACTIVE, } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; import { omit } from 'lodash'; +import { KibanaRequest } from '@kbn/core/server'; import { FunctionRegistrationParameters } from '.'; const OMITTED_ALERT_FIELDS = [ @@ -39,11 +40,11 @@ const DEFAULT_FEATURE_IDS = [ ] as const; export function registerAlertsFunction({ - client, - registerFunction, + functions, resources, + pluginsStart, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( { name: 'alerts', contexts: ['core'], @@ -98,8 +99,9 @@ export function registerAlertsFunction({ }, signal ) => { - const racContext = await resources.context.rac; - const alertsClient = await racContext.getAlertsClient(); + const alertsClient = await pluginsStart.ruleRegistry.getRacClientWithRequest( + resources.request as KibanaRequest + ); const start = datemath.parse(startAsDatemath)!.valueOf(); const end = datemath.parse(endAsDatemath)!.valueOf(); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts new file mode 100644 index 000000000000..059dd00819d2 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RegistrationCallback } from '@kbn/observability-ai-assistant-plugin/server'; +import { registerAlertsFunction } from './alerts'; +import { registerQueryFunction } from './query'; +import { registerLensFunction } from './lens'; +import { registerVisualizeESQLFunction } from './visualize_esql'; +import { ObservabilityAIAssistantAppPluginStartDependencies } from '../types'; + +export type FunctionRegistrationParameters = Omit< + Parameters[0], + 'registerContext' | 'hasFunction' +> & { pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies }; + +export const registerFunctions = async (registrationParameters: FunctionRegistrationParameters) => { + registerLensFunction(registrationParameters); + registerQueryFunction(registrationParameters); + registerVisualizeESQLFunction(registrationParameters); + registerAlertsFunction(registrationParameters); +}; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts similarity index 57% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts index 62e0f98c1b65..dbae57c08c9e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/lens.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/lens.ts @@ -4,11 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import type { ChatFunctionClient } from '@kbn/observability-ai-assistant-plugin/server/service/chat_function_client'; import { lensFunctionDefinition } from '../../common/functions/lens'; -import { RegisterFunction } from '../service/types'; -export function registerLensFunction({ registerFunction }: { registerFunction: RegisterFunction }) { - registerFunction(lensFunctionDefinition, async () => { +export function registerLensFunction({ functions }: { functions: ChatFunctionClient }) { + functions.registerFunction(lensFunctionDefinition, async () => { return { content: {}, }; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.test.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.test.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.test.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.ts similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/correct_common_esql_mistakes.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/correct_common_esql_mistakes.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-abs.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-abs.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-abs.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-abs.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-acos.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-acos.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-acos.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-acos.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-asin.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-asin.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-asin.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-asin.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan2.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan2.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-atan2.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-atan2.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-auto_bucket.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-auto_bucket.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-auto_bucket.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-auto_bucket.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-avg.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-avg.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-avg.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-avg.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-case.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-case.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-case.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-case.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ceil.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ceil.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ceil.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ceil.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-coalesce.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-coalesce.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-coalesce.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-coalesce.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-concat.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-concat.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-concat.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-concat.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cos.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cos.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cos.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cos.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cosh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cosh.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-cosh.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-cosh.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count_distinct.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count_distinct.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-count_distinct.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-count_distinct.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_extract.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_extract.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_extract.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_extract.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_format.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_format.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_format.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_format.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_parse.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_parse.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_parse.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_parse.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_trunc.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_trunc.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-date_trunc.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-date_trunc.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-dissect.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-dissect.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-dissect.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-dissect.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-drop.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-drop.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-drop.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-drop.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-e.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-e.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-e.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-e.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-enrich.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-enrich.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-enrich.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-enrich.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-eval.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-eval.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-eval.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-eval.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-floor.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-floor.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-floor.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-floor.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-from.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-from.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-greatest.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-greatest.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-greatest.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-greatest.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-grok.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-grok.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-grok.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-grok.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-keep.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-keep.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-keep.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-keep.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-least.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-least.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-least.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-least.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-left.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-left.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-left.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-left.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-length.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-length.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-length.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-length.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limit.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limit.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limit.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limit.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limitations.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limitations.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-limitations.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-limitations.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-log10.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-log10.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-log10.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-log10.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ltrim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ltrim.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-ltrim.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-ltrim.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-max.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-max.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-max.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-max.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median_absolute_deviation.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median_absolute_deviation.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-median_absolute_deviation.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-median_absolute_deviation.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-min.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-min.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-min.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-min.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_avg.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_avg.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_avg.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_avg.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_concat.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_concat.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_concat.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_concat.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_count.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_count.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_count.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_count.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_dedupe.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_dedupe.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_dedupe.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_dedupe.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_expand.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_expand.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_expand.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_expand.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_max.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_max.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_max.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_max.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_median.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_median.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_median.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_median.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_min.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_min.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_min.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_min.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_sum.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_sum.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-mv_sum.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-mv_sum.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-now.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-now.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-now.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-now.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-operators.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-operators.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-operators.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-operators.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-overview.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-overview.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-overview.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-overview.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-percentile.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-percentile.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-percentile.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-percentile.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pi.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pi.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pi.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pi.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pow.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pow.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-pow.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-pow.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-processing-commands.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-processing-commands.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-processing-commands.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-processing-commands.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rename.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rename.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rename.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rename.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-replace.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-replace.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-replace.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-replace.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-right.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-right.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-right.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-right.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-round.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-round.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-round.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-round.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-row.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-row.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-row.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-row.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rtrim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rtrim.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-rtrim.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-rtrim.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-show.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-show.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-show.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-show.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sin.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sin.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sin.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sin.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sinh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sinh.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sinh.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sinh.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sort.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sort.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sort.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sort.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-source-commands.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-source-commands.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-source-commands.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-source-commands.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-split.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-split.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-split.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-split.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sqrt.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sqrt.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sqrt.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sqrt.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-stats.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-stats.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-stats.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-stats.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-substring.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-substring.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-substring.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-substring.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sum.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sum.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-sum.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-sum.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-syntax.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-syntax.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-syntax.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-syntax.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tan.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tan.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tan.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tan.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tanh.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tanh.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tanh.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tanh.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tau.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tau.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-tau.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-tau.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_boolean.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_boolean.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_boolean.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_boolean.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_cartesianpoint.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_cartesianpoint.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_cartesianpoint.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_cartesianpoint.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_datetime.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_datetime.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_datetime.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_datetime.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_degrees.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_degrees.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_degrees.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_degrees.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_double.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_double.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_double.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_double.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_geopoint.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_geopoint.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_geopoint.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_geopoint.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_integer.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_integer.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_integer.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_integer.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_ip.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_ip.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_ip.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_ip.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_long.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_long.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_long.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_long.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_radians.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_radians.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_radians.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_radians.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_string.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_string.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_string.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_string.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_unsigned_long.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_unsigned_long.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_unsigned_long.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_unsigned_long.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_version.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_version.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-to_version.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-to_version.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-trim.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-trim.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-trim.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-trim.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-where.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-where.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/esql_docs/esql-where.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-where.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts similarity index 95% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts index 3245a15ff36c..ff36484381b2 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/index.ts @@ -11,19 +11,19 @@ import pLimit from 'p-limit'; import Path from 'path'; import { lastValueFrom, startWith, type Observable } from 'rxjs'; import { promisify } from 'util'; -import type { FunctionRegistrationParameters } from '..'; -import type { ChatCompletionChunkEvent } from '../../../common/conversation_complete'; +import { FunctionVisibility, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; import { VisualizeESQLUserIntention, VISUALIZE_ESQL_USER_INTENTIONS, -} from '../../../common/functions/visualize_esql'; -import { FunctionVisibility, MessageRole } from '../../../common/types'; +} from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql'; import { concatenateChatCompletionChunks, - type ConcatenatedMessage, -} from '../../../common/utils/concatenate_chat_completion_chunks'; -import { emitWithConcatenatedMessage } from '../../../common/utils/emit_with_concatenated_message'; -import { createFunctionResponseMessage } from '../../service/util/create_function_response_message'; + ConcatenatedMessage, +} from '@kbn/observability-ai-assistant-plugin/common/utils/concatenate_chat_completion_chunks'; +import { ChatCompletionChunkEvent } from '@kbn/observability-ai-assistant-plugin/common/conversation_complete'; +import { emitWithConcatenatedMessage } from '@kbn/observability-ai-assistant-plugin/common/utils/emit_with_concatenated_message'; +import { createFunctionResponseMessage } from '@kbn/observability-ai-assistant-plugin/server/service/util/create_function_response_message'; +import type { FunctionRegistrationParameters } from '..'; import { correctCommonEsqlMistakes } from './correct_common_esql_mistakes'; const readFile = promisify(Fs.readFile); @@ -69,10 +69,10 @@ const loadEsqlDocs = once(async () => { export function registerQueryFunction({ client, - registerFunction, + functions, resources, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( { name: 'execute_query', contexts: ['core'], @@ -103,7 +103,7 @@ export function registerQueryFunction({ return { content: response }; } ); - registerFunction( + functions.registerFunction( { name: 'query', contexts: ['core'], diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/system_message.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/system_message.txt similarity index 100% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/query/system_message.txt rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/system_message.txt diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts similarity index 84% rename from x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts rename to x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts index 3bf5beabbb02..be1e73a8039f 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/functions/visualize_esql.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/visualize_esql.ts @@ -6,18 +6,15 @@ */ import { esFieldTypeToKibanaFieldType } from '@kbn/field-types'; import type { ESQLSearchReponse } from '@kbn/es-types'; -import { - visualizeESQLFunction, - VisualizeESQLUserIntention, -} from '../../common/functions/visualize_esql'; -import type { FunctionRegistrationParameters } from '.'; +import { VisualizeESQLUserIntention } from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql'; +import { visualizeESQLFunction } from '../../common/functions/visualize_esql'; +import { FunctionRegistrationParameters } from '.'; export function registerVisualizeESQLFunction({ - client, - registerFunction, + functions, resources, }: FunctionRegistrationParameters) { - registerFunction( + functions.registerFunction( visualizeESQLFunction, async ({ arguments: { query, intention }, connectorId, messages }, signal) => { // With limit 0 I get only the columns, it is much more performant diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts new file mode 100644 index 000000000000..36217f5a762e --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; +import type { ObservabilityAIAssistantAppConfig } from './config'; + +import { config as configSchema } from './config'; +export type { + ObservabilityAIAssistantAppServerStart, + ObservabilityAIAssistantAppServerSetup, +} from './types'; + +export const config: PluginConfigDescriptor = { + exposeToBrowser: {}, + schema: configSchema, +}; + +export const plugin = async (ctx: PluginInitializerContext) => { + const { ObservabilityAIAssistantAppPlugin } = await import('./plugin'); + return new ObservabilityAIAssistantAppPlugin(ctx); +}; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts new file mode 100644 index 000000000000..097c50bad0bd --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/plugin.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + type CoreSetup, + type Logger, + Plugin, + type PluginInitializerContext, + type CoreStart, +} from '@kbn/core/server'; +import type { ObservabilityAIAssistantAppConfig } from './config'; +import { registerFunctions } from './functions'; +import type { + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies, + ObservabilityAIAssistantAppServerSetup, + ObservabilityAIAssistantAppServerStart, +} from './types'; + +export class ObservabilityAIAssistantAppPlugin + implements + Plugin< + ObservabilityAIAssistantAppServerSetup, + ObservabilityAIAssistantAppServerStart, + ObservabilityAIAssistantAppPluginSetupDependencies, + ObservabilityAIAssistantAppPluginStartDependencies + > +{ + logger: Logger; + + constructor(context: PluginInitializerContext) { + this.logger = context.logger.get(); + } + public setup( + core: CoreSetup< + ObservabilityAIAssistantAppPluginStartDependencies, + ObservabilityAIAssistantAppServerStart + >, + plugins: ObservabilityAIAssistantAppPluginSetupDependencies + ): ObservabilityAIAssistantAppServerSetup { + return {}; + } + + public start( + core: CoreStart, + pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies + ): ObservabilityAIAssistantAppServerStart { + pluginsStart.observabilityAIAssistant.service.register((params) => { + return registerFunctions({ + ...params, + pluginsStart, + }); + }); + return {}; + } +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.ts new file mode 100644 index 000000000000..996279329ab9 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/types.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 type { + ObservabilityAIAssistantServerSetup, + ObservabilityAIAssistantServerStart, +} from '@kbn/observability-ai-assistant-plugin/server'; +import type { + RuleRegistryPluginSetupContract, + RuleRegistryPluginStartContract, +} from '@kbn/rule-registry-plugin/server'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ObservabilityAIAssistantAppServerStart {} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface ObservabilityAIAssistantAppServerSetup {} + +export interface ObservabilityAIAssistantAppPluginStartDependencies { + observabilityAIAssistant: ObservabilityAIAssistantServerStart; + ruleRegistry: RuleRegistryPluginStartContract; +} + +export interface ObservabilityAIAssistantAppPluginSetupDependencies { + observabilityAIAssistant: ObservabilityAIAssistantServerSetup; + ruleRegistry: RuleRegistryPluginSetupContract; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json b/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json new file mode 100644 index 000000000000..ac80f9b74f1c --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/tsconfig.json @@ -0,0 +1,54 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": [ + "../../../typings/**/*", + "common/**/*", + "public/**/*", + "scripts/**/*", + "typings/**/*", + "public/**/*.json", + "server/**/*" + ], + "kbn_references": [ + "@kbn/core", + "@kbn/logging", + "@kbn/config-schema", + "@kbn/security-plugin", + "@kbn/i18n", + "@kbn/kibana-react-plugin", + "@kbn/observability-shared-plugin", + "@kbn/lens-embeddable-utils", + "@kbn/field-formats-plugin", + "@kbn/lens-plugin", + "@kbn/data-views-plugin", + "@kbn/es-query", + "@kbn/rule-registry-plugin", + "@kbn/licensing-plugin", + "@kbn/share-plugin", + "@kbn/ui-actions-plugin", + "@kbn/expressions-plugin", + "@kbn/visualization-utils", + "@kbn/field-types", + "@kbn/es-types", + "@kbn/esql-utils", + "@kbn/observability-ai-assistant-plugin", + "@kbn/typed-react-router-config", + "@kbn/ui-theme", + "@kbn/actions-plugin", + "@kbn/user-profile-components", + "@kbn/i18n-react", + "@kbn/triggers-actions-ui-plugin", + "@kbn/core-http-browser", + "@kbn/code-editor", + "@kbn/monaco", + "@kbn/utility-types-jest", + "@kbn/ml-plugin", + "@kbn/react-kibana-context-theme", + "@kbn/shared-ux-link-redirect-app", + "@kbn/shared-ux-utility" + ], + "exclude": ["target/**/*"] +} diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx index 84c536b616c6..ff66bb0034c5 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/components/logs_explorer_top_nav_menu.tsx @@ -38,7 +38,7 @@ export const LogsExplorerTopNavMenu = () => { const ServerlessTopNav = () => { const { services } = useKibanaContextForPlugin(); - const { ObservabilityAIAssistantActionMenuItem } = services.observabilityAIAssistant; + return ( @@ -75,11 +75,6 @@ const ServerlessTopNav = () => { - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} ); }; @@ -88,7 +83,6 @@ const StatefulTopNav = () => { const { services: { appParams: { setHeaderActionMenu }, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, chrome, i18n: i18nStart, theme, @@ -148,9 +142,6 @@ const StatefulTopNav = () => { - {ObservabilityAIAssistantActionMenuItem ? ( - - ) : null} diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts index 8d8a1f52619e..d73d4c372e2f 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/types.ts @@ -14,7 +14,7 @@ import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { AppMountParameters, ScopedHistory } from '@kbn/core/public'; import { LogsSharedClientStartExports } from '@kbn/logs-shared-plugin/public'; import { DatasetQualityPluginStart } from '@kbn/dataset-quality-plugin/public'; -import { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; +import { ObservabilityAIAssistantPublicStart } from '@kbn/observability-ai-assistant-plugin/public'; import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public'; import { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import { DataViewsPublicPluginStart } from '@kbn/data-views-plugin/public'; @@ -44,7 +44,7 @@ export interface ObservabilityLogsExplorerStartDeps { discover: DiscoverStart; logsExplorer: LogsExplorerPluginStart; logsShared: LogsSharedClientStartExports; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; observabilityShared: ObservabilitySharedPluginStart; observability: ObservabilityPublicStart; serverless?: ServerlessPluginStart; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.ts new file mode 100644 index 000000000000..deab6c3fcbd8 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.test.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 { getFilename } from './get_filename'; + +describe('Observability onboarding - get_filename', () => { + it.each([ + ['test', '/logs-onboarding/test.log'], + ['test', '/logs-onboarding/test.log'], + ['test', 'test.log'], + ['test', '/logs-onboarding/long-path/test.log'], + ['test', '/logs-onboarding/test.20240223.log'], + ['test', 'test'], + ['', ''], + ['test', '\\logs-onboarding\\test.log'], + ['test', "/logs-on'boarding/test.log"], + ['te_st', "/logs-on'boarding/te'st.log"], + ['test_123', '/logs-onboarding/test 123.log'], + ['t_e_s_t_1_2_3_', '/logs-onboarding/t-e%s*t#1@2!3$.log'], + ])( + 'should return "%s" for filename "%s"', + (expectedFilename: string, filePath: string) => { + expect(getFilename(filePath)).toBe(expectedFilename); + } + ); +}); diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts index f5d5d02c0c26..a5bd2b80a2c2 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/components/app/custom_logs/get_filename.ts @@ -10,9 +10,7 @@ export const getFilename = (path?: string) => { return ''; } - const filenameWithExt = path - .replace(/^.*[\\\/](?!\d*$)/, '') - .replace(/[\\\/]/, ''); + const filenameWithExt = path.replace(/^.*[\\\/](?!\d*$)/g, ''); const filenameParts = filenameWithExt.split('.'); return replaceSpecialChars(filenameParts[0]); diff --git a/x-pack/plugins/observability_solution/profiling/kibana.jsonc b/x-pack/plugins/observability_solution/profiling/kibana.jsonc index 5902c5f63f8f..e7dd013a27df 100644 --- a/x-pack/plugins/observability_solution/profiling/kibana.jsonc +++ b/x-pack/plugins/observability_solution/profiling/kibana.jsonc @@ -30,8 +30,7 @@ ], "requiredBundles": [ "kibanaReact", - "kibanaUtils", - "observabilityAIAssistant" + "kibanaUtils" ] } } diff --git a/x-pack/plugins/observability_solution/profiling/public/app.tsx b/x-pack/plugins/observability_solution/profiling/public/app.tsx index 8600d4db602f..f90c14ac7044 100644 --- a/x-pack/plugins/observability_solution/profiling/public/app.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/app.tsx @@ -26,7 +26,6 @@ import { ProfilingHeaderActionMenu } from './components/profiling_header_action_ import { RouterErrorBoundary } from './routing/router_error_boundary'; import { LicenseProvider } from './components/contexts/license/license_context'; import { ProfilingSetupStatusContextProvider } from './components/contexts/profiling_setup_status/profiling_setup_status_context'; -import { useProfilingDependencies } from './components/contexts/profiling_dependencies/use_profiling_dependencies'; interface Props { profilingFetchServices: Services; @@ -48,23 +47,12 @@ function MountProfilingActionMenu({ theme$: AppMountParameters['theme$']; setHeaderActionMenu: AppMountParameters['setHeaderActionMenu']; }) { - const { - start: { - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - }, - } = useProfilingDependencies(); - return ( - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} ); diff --git a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/flamegraph_tooltip.tsx b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/flamegraph_tooltip.tsx index d500f556fd5f..bbe5e526e41e 100644 --- a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/flamegraph_tooltip.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/flamegraph_tooltip.tsx @@ -25,6 +25,7 @@ import { useCalculateImpactEstimate } from '../../hooks/use_calculate_impact_est import { asCost } from '../../utils/formatters/as_cost'; import { asPercentage } from '../../utils/formatters/as_percentage'; import { asWeight } from '../../utils/formatters/as_weight'; +import { asInteger } from '../../utils/formatters/as_integer'; import { CPULabelWithHint } from '../cpu_label_with_hint'; import { TooltipRow } from './tooltip_row'; @@ -171,6 +172,7 @@ export function FlameGraphTooltip({ ? comparisonCountInclusive * comparisonScaleFactor : undefined } + formatValue={asInteger} showDifference formatDifferenceAsPercentage={false} /> diff --git a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx index 38fa7273bc1a..c1d50ba9142a 100644 --- a/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/components/flamegraph/index.tsx @@ -194,12 +194,8 @@ export function FlameGraph({ primaryFlamegraph.TotalAnnualCostsUSDItems[valueIndex] } baselineScaleFactor={baseline} - comparisonAnnualCO2KgsInclusive={ - comparisonFlamegraph?.TotalAnnualCO2KgsItems[valueIndex] - } - comparisonAnnualCostsUSDInclusive={ - comparisonFlamegraph?.TotalAnnualCostsUSDItems[valueIndex] - } + comparisonAnnualCO2KgsInclusive={comparisonNode?.TotalAnnualCO2Kgs} + comparisonAnnualCostsUSDInclusive={comparisonNode?.TotalAnnualCostUSD} comparisonCountExclusive={comparisonNode?.CountExclusive} comparisonCountInclusive={comparisonNode?.CountInclusive} comparisonScaleFactor={comparison} diff --git a/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx b/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx index b82d8e2693a1..96410444dc44 100644 --- a/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/components/frame_information_window/frame_information_ai_assistant.tsx @@ -7,7 +7,7 @@ import React, { useMemo } from 'react'; import { i18n } from '@kbn/i18n'; -import { Message, MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; +import type { Message } from '@kbn/observability-ai-assistant-plugin/public'; import { Frame } from '.'; import { useProfilingDependencies } from '../contexts/profiling_dependencies/use_profiling_dependencies'; @@ -17,7 +17,10 @@ interface Props { export function FrameInformationAIAssistant({ frame }: Props) { const { - observabilityAIAssistant: { ObservabilityAIAssistantContextualInsight }, + observabilityAIAssistant: { + ObservabilityAIAssistantContextualInsight, + getContextualInsightMessages, + }, } = useProfilingDependencies().start; const promptMessages = useMemo(() => { @@ -25,67 +28,57 @@ export function FrameInformationAIAssistant({ frame }: Props) { const functionName = frame.functionName; const library = frame.exeFileName; - const now = new Date().toISOString(); - - return [ - { - '@timestamp': now, - message: { - role: MessageRole.User, - content: `I am a software engineer. I am trying to understand what a function in a particular - software library does. - - The library is: ${library} - The function is: ${functionName} - - Your have two tasks. Your first task is to desribe what the library is and what its use cases are, and to - describe what the function does. The output format should look as follows: - - Library description: Provide a concise description of the library - Library use-cases: Provide a concise description of what the library is typically used for. - Function description: Provide a concise, technical, description of what the function does. - - Assume the function ${functionName} from the library ${library} is consuming significant CPU resources. - Your second task is to suggest ways to optimize or improve the system that involve the ${functionName} function from the - ${library} library. Types of improvements that would be useful to me are improvements that result in: - - - Higher performance so that the system runs faster or uses less CPU - - Better memory efficient so that the system uses less RAM - - Better storage efficient so that the system stores less data on disk. - - Better network I/O efficiency so that less data is sent over the network - - Better disk I/O efficiency so that less data is read and written from disk - - Make up to five suggestions. Your suggestions must meet all of the following criteria: - 1. Your suggestions should detailed, technical and include concrete examples. - 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from - the ${library} library is consuming significant CPU. - 3. If you suggest replacing the function or library with a more efficient replacement you must suggest at least - one concrete replacement. - - If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the - ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any - way in which to improve the performance then say "I do not know how to improve the performance of systems where - this function is consuming a significant amount of CPU". - - Do not suggest using a CPU profiler. I have already profiled my code. The profiler I used is Elastic Universal Profiler. - If there is specific information I should look for in the profiler output then tell me what information to look for - in the output of Elastic Universal Profiler. - - You must not include URLs, web addresses or websites of any kind in your output. - - If you have suggestions, the output format should look as follows: - - Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming - significant CPU resources: - 1. Insert first suggestion - 2. Insert second suggestion`, - }, - }, - ]; + return getContextualInsightMessages({ + message: `I am trying to understand what this function does. Can you help me?`, + instructions: `The library is: ${library} + The function is: ${functionName} + + Your have two tasks. Your first task is to desribe what the library is and what its use cases are, and to + describe what the function does. The output format should look as follows: + + Library description: Provide a concise description of the library + Library use-cases: Provide a concise description of what the library is typically used for. + Function description: Provide a concise, technical, description of what the function does. + + Assume the function ${functionName} from the library ${library} is consuming significant CPU resources. + Your second task is to suggest ways to optimize or improve the system that involve the ${functionName} function from the + ${library} library. Types of improvements that would be useful to me are improvements that result in: + + - Higher performance so that the system runs faster or uses less CPU + - Better memory efficient so that the system uses less RAM + - Better storage efficient so that the system stores less data on disk. + - Better network I/O efficiency so that less data is sent over the network + - Better disk I/O efficiency so that less data is read and written from disk + + Make up to five suggestions. Your suggestions must meet all of the following criteria: + 1. Your suggestions should detailed, technical and include concrete examples. + 2. Your suggestions should be specific to improving performance of a system in which the ${functionName} function from + the ${library} library is consuming significant CPU. + 3. If you suggest replacing the function or library with a more efficient replacement you must suggest at least + one concrete replacement. + + If you know of fewer than five ways to improve the performance of a system in which the ${functionName} function from the + ${library} library is consuming significant CPU, then provide fewer than five suggestions. If you do not know of any + way in which to improve the performance then say "I do not know how to improve the performance of systems where + this function is consuming a significant amount of CPU". + + Do not suggest using a CPU profiler. I have already profiled my code. The profiler I used is Elastic Universal Profiler. + If there is specific information I should look for in the profiler output then tell me what information to look for + in the output of Elastic Universal Profiler. + + You must not include URLs, web addresses or websites of any kind in your output. + + If you have suggestions, the output format should look as follows: + + Here are some suggestions as to how you might optimize your system if ${functionName} in ${library} is consuming + significant CPU resources: + 1. Insert first suggestion + 2. Insert second suggestion`, + }); } return undefined; - }, [frame?.functionName, frame?.exeFileName]); + }, [frame?.functionName, frame?.exeFileName, getContextualInsightMessages]); return ( <> diff --git a/x-pack/plugins/observability_solution/profiling/public/types.ts b/x-pack/plugins/observability_solution/profiling/public/types.ts index cc949254e270..8041f28e4558 100644 --- a/x-pack/plugins/observability_solution/profiling/public/types.ts +++ b/x-pack/plugins/observability_solution/profiling/public/types.ts @@ -21,8 +21,8 @@ import { ChartsPluginSetup, ChartsPluginStart } from '@kbn/charts-plugin/public' import { LicensingPluginSetup } from '@kbn/licensing-plugin/public'; import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; import { - ObservabilityAIAssistantPluginSetup, - ObservabilityAIAssistantPluginStart, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; import { EmbeddableSetup } from '@kbn/embeddable-plugin/public'; import type { @@ -33,7 +33,7 @@ import type { export interface ProfilingPluginPublicSetupDeps { observability: ObservabilityPublicSetup; observabilityShared: ObservabilitySharedPluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; dataViews: DataViewsPublicPluginSetup; data: DataPublicPluginSetup; charts: ChartsPluginSetup; @@ -46,7 +46,7 @@ export interface ProfilingPluginPublicSetupDeps { export interface ProfilingPluginPublicStartDeps { observability: ObservabilityPublicStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; dataViews: DataViewsPublicPluginStart; data: DataPublicPluginStart; charts: ChartsPluginStart; diff --git a/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.test.ts b/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.test.ts new file mode 100644 index 000000000000..d99fc7ead0ee --- /dev/null +++ b/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.test.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 { asInteger } from './as_integer'; + +describe('asInteger', () => { + it('rounds numbers appropriately', () => { + expect(asInteger(999)).toBe('999'); + + expect(asInteger(1.11)).toBe('1'); + + expect(asInteger(1.5)).toBe('2'); + + expect(asInteger(0.001)).toBe('0'); + + expect(asInteger(0)).toBe('0'); + }); +}); diff --git a/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.ts b/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.ts new file mode 100644 index 000000000000..6679163ad9ae --- /dev/null +++ b/x-pack/plugins/observability_solution/profiling/public/utils/formatters/as_integer.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function asInteger(value: number) { + return Math.round(value).toString(); +} diff --git a/x-pack/plugins/observability_solution/profiling/server/routes/functions.ts b/x-pack/plugins/observability_solution/profiling/server/routes/functions.ts index a261708c5b45..e6b71b17db8b 100644 --- a/x-pack/plugins/observability_solution/profiling/server/routes/functions.ts +++ b/x-pack/plugins/observability_solution/profiling/server/routes/functions.ts @@ -45,7 +45,7 @@ export function registerTopNFunctionsSearchRoute({ const endSecs = timeTo / 1000; const esClient = await getClient(context); - const topNFunctions = await profilingDataAccess.services.fetchFunction({ + const topNFunctions = await profilingDataAccess.services.fetchFunctions({ core, esClient, startIndex, diff --git a/x-pack/plugins/observability_solution/profiling_data_access/server/services/register_services.ts b/x-pack/plugins/observability_solution/profiling_data_access/server/services/register_services.ts index 60f582ac16b7..dfd51e2125c4 100644 --- a/x-pack/plugins/observability_solution/profiling_data_access/server/services/register_services.ts +++ b/x-pack/plugins/observability_solution/profiling_data_access/server/services/register_services.ts @@ -31,6 +31,6 @@ export function registerServices(params: RegisterServicesParams) { fetchFlamechartData: createFetchFlamechart(params), getStatus: createGetStatusService(params), getSetupState: createSetupState(params), - fetchFunction: createFetchFunctions(params), + fetchFunctions: createFetchFunctions(params), }; } diff --git a/x-pack/plugins/observability_solution/synthetics/kibana.jsonc b/x-pack/plugins/observability_solution/synthetics/kibana.jsonc index f76ac53a4245..ac894c024e5c 100644 --- a/x-pack/plugins/observability_solution/synthetics/kibana.jsonc +++ b/x-pack/plugins/observability_solution/synthetics/kibana.jsonc @@ -31,7 +31,8 @@ "taskManager", "triggersActionsUi", "usageCollection", - "bfetch" + "bfetch", + "unifiedSearch" ], "optionalPlugins": [ "cloud", diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx index 4064c71fd3db..a9554c776153 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/header/action_menu.tsx @@ -9,15 +9,9 @@ import React from 'react'; import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public'; import { AppMountParameters } from '@kbn/core/public'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { ClientPluginsStart } from '../../../../../plugin'; import { ActionMenuContent } from './action_menu_content'; export const ActionMenu = ({ appMountParameters }: { appMountParameters: AppMountParameters }) => { - const { - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - } = useKibana().services; - return (
- {ObservabilityAIAssistantActionMenuItem && ( - - - - )}
); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx index b80c4ccb773b..34996f243460 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/field_config.tsx @@ -795,7 +795,9 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ return { 'data-test-subj': 'syntheticsHeaderFieldRequestHeaders', readOnly, - contentMode: (requestBody as RequestBodyCheck).type, + contentMode: !!(requestBody as RequestBodyCheck)?.value + ? (requestBody as RequestBodyCheck).type + : undefined, }; }, }, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx index 3bd3407dcb3c..9288395290fd 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/synthetics_app.tsx @@ -95,6 +95,7 @@ const Application = (props: SyntheticsAppProps) => { cases: startPlugins.cases, spaces: startPlugins.spaces, fleet: startPlugins.fleet, + unifiedSearch: startPlugins.unifiedSearch, }} > diff --git a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts index 74029366ffd0..d4758952e63f 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts @@ -51,8 +51,8 @@ import type { ObservabilitySharedPluginStart, } from '@kbn/observability-shared-plugin/public'; import { - ObservabilityAIAssistantPluginStart, - ObservabilityAIAssistantPluginSetup, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; import { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/public'; import { PLUGIN } from '../common/constants/plugin'; @@ -67,7 +67,7 @@ export interface ClientPluginsSetup { exploratoryView: ExploratoryViewPublicSetup; observability: ObservabilityPublicSetup; observabilityShared: ObservabilitySharedPluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; share: SharePluginSetup; triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; cloud?: CloudSetup; @@ -84,7 +84,7 @@ export interface ClientPluginsStart { exploratoryView: ExploratoryViewPublicStart; observability: ObservabilityPublicStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; share: SharePluginStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; cases: CasesPublicStart; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts index 405863865757..5136b3cb3a43 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/certs/get_certificates.ts @@ -14,7 +14,7 @@ import { import { monitorAttributes } from '../../../common/types/saved_objects'; import { SYNTHETICS_API_URLS } from '../../../common/constants'; import { CertResult, GetCertsParams } from '../../../common/runtime_types'; -import { AlertConfigKey } from '../../../common/constants/monitor_management'; +import { ConfigKey } from '../../../common/constants/monitor_management'; import { getSyntheticsCerts } from '../../queries/get_certs'; export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< @@ -45,7 +45,7 @@ export const getSyntheticsCertsRoute: SyntheticsRestApiRouteFactory< const monitors = await getAllMonitors({ soClient: savedObjectsClient, - filter: `${monitorAttributes}.${AlertConfigKey.STATUS_ENABLED}: true`, + filter: `${monitorAttributes}.${ConfigKey.ENABLED}: true`, }); if (monitors.length === 0) { diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx index 41a18cebdb1c..c82ac50a7259 100644 --- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx +++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/app/uptime_app.tsx @@ -143,10 +143,7 @@ const Application = (props: UptimeAppProps) => { - +
diff --git a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx index 937cacaab165..b332b6c28b31 100644 --- a/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx +++ b/x-pack/plugins/observability_solution/uptime/public/legacy_uptime/components/common/header/action_menu.tsx @@ -9,16 +9,9 @@ import React from 'react'; import { HeaderMenuPortal } from '@kbn/observability-shared-plugin/public'; import { AppMountParameters } from '@kbn/core/public'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import type { ObservabilityAIAssistantPluginStart } from '@kbn/observability-ai-assistant-plugin/public'; import { ActionMenuContent } from './action_menu_content'; -export const ActionMenu = ({ - appMountParameters, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, -}: { - appMountParameters: AppMountParameters; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; -}) => ( +export const ActionMenu = ({ appMountParameters }: { appMountParameters: AppMountParameters }) => ( - - {ObservabilityAIAssistantActionMenuItem ? : null} - ); diff --git a/x-pack/plugins/observability_solution/uptime/public/plugin.ts b/x-pack/plugins/observability_solution/uptime/public/plugin.ts index c628eadd2d24..1e891b808689 100644 --- a/x-pack/plugins/observability_solution/uptime/public/plugin.ts +++ b/x-pack/plugins/observability_solution/uptime/public/plugin.ts @@ -52,8 +52,8 @@ import type { } from '@kbn/observability-shared-plugin/public'; import { AppStatus, AppUpdater } from '@kbn/core-application-browser'; import { - ObservabilityAIAssistantPluginStart, - ObservabilityAIAssistantPluginSetup, + ObservabilityAIAssistantPublicStart, + ObservabilityAIAssistantPublicSetup, } from '@kbn/observability-ai-assistant-plugin/public'; import { PLUGIN } from '../common/constants/plugin'; import { @@ -73,7 +73,7 @@ export interface ClientPluginsSetup { exploratoryView: ExploratoryViewPublicSetup; observability: ObservabilityPublicSetup; observabilityShared: ObservabilitySharedPluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; share: SharePluginSetup; triggersActionsUi: TriggersAndActionsUIPublicPluginSetup; cloud?: CloudSetup; @@ -89,7 +89,7 @@ export interface ClientPluginsStart { exploratoryView: ExploratoryViewPublicStart; observability: ObservabilityPublicStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; share: SharePluginStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; cases: CasesPublicStart; diff --git a/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx b/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx index 83350afcf8ac..5199510ee12f 100644 --- a/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx +++ b/x-pack/plugins/observability_solution/ux/public/components/app/rum_dashboard/action_menu/index.tsx @@ -44,11 +44,7 @@ export function UXActionMenu({ appMountParameters: AppMountParameters; isDev: boolean; }) { - const { - http, - application, - observabilityAIAssistant: { ObservabilityAIAssistantActionMenuItem }, - } = useKibanaServices(); + const { http, application } = useKibanaServices(); const { urlParams } = useLegacyUrlParams(); const { rangeTo, rangeFrom, serviceName } = urlParams; @@ -102,11 +98,6 @@ export function UXActionMenu({ - {ObservabilityAIAssistantActionMenuItem ? ( - - - - ) : null} ); diff --git a/x-pack/plugins/observability_solution/ux/public/plugin.ts b/x-pack/plugins/observability_solution/ux/public/plugin.ts index 63dedfacceef..ec1b0ef11c0d 100644 --- a/x-pack/plugins/observability_solution/ux/public/plugin.ts +++ b/x-pack/plugins/observability_solution/ux/public/plugin.ts @@ -44,8 +44,8 @@ import { ObservabilitySharedPluginStart, } from '@kbn/observability-shared-plugin/public'; import { - ObservabilityAIAssistantPluginStart, - ObservabilityAIAssistantPluginSetup, + ObservabilityAIAssistantPublicSetup, + ObservabilityAIAssistantPublicStart, } from '@kbn/observability-ai-assistant-plugin/public'; export type UxPluginSetup = void; @@ -59,7 +59,7 @@ export interface ApmPluginSetupDeps { licensing: LicensingPluginSetup; observability: ObservabilityPublicSetup; observabilityShared: ObservabilitySharedPluginSetup; - observabilityAIAssistant: ObservabilityAIAssistantPluginSetup; + observabilityAIAssistant: ObservabilityAIAssistantPublicSetup; } export interface ApmPluginStartDeps { @@ -71,7 +71,7 @@ export interface ApmPluginStartDeps { inspector: InspectorPluginStart; observability: ObservabilityPublicStart; observabilityShared: ObservabilitySharedPluginStart; - observabilityAIAssistant: ObservabilityAIAssistantPluginStart; + observabilityAIAssistant: ObservabilityAIAssistantPublicStart; exploratoryView: ExploratoryViewPublicStart; dataViews: DataViewsPublicPluginStart; lens: LensPublicStart; diff --git a/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts index 382171697451..68c151d5138f 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/packs_integration.cy.ts @@ -187,7 +187,8 @@ describe('ALL - Packs', { tags: ['@ess', '@serverless'] }, () => { navigateTo('/app/osquery/packs'); }); - describe('add proper shard to policies packs config', () => { + // FLAKY: https://github.com/elastic/kibana/issues/171279 + describe.skip('add proper shard to policies packs config', () => { const globalPack = 'globalPack' + generateRandomStringName(1)[0]; const agentPolicy = 'testGlobal' + generateRandomStringName(1)[0]; let globalPackId: string; diff --git a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts index a2072a8d87c8..aa82fbdeb0b1 100644 --- a/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts +++ b/x-pack/plugins/rule_registry/common/assets/field_maps/technical_rule_field_map.test.ts @@ -42,6 +42,11 @@ it('matches snapshot', () => { "required": false, "type": "keyword", }, + "kibana.alert.consecutive_matches": Object { + "array": false, + "required": false, + "type": "long", + }, "kibana.alert.duration.us": Object { "array": false, "required": false, diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts index 2367167b4969..46cbe2eb1eb2 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_executor.test.ts @@ -26,6 +26,7 @@ import { SPACE_IDS, ALERT_FLAPPING, TAGS, + ALERT_CONSECUTIVE_MATCHES, } from '../../common/technical_rule_data_field_names'; import { createRuleDataClientMock } from '../rule_data_client/rule_data_client.mock'; import { createLifecycleExecutor } from './create_lifecycle_executor'; @@ -1931,6 +1932,473 @@ describe('createLifecycleExecutor', () => { ); }); }); + + describe('set consecutive matches on the document', () => { + it('updates documents with consecutive matches for active alerts', async () => { + const logger = loggerMock.create(); + const ruleDataClientMock = createRuleDataClientMock(); + ruleDataClientMock.getReader().search.mockResolvedValue({ + hits: { + hits: [ + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_0', + [ALERT_UUID]: 'ALERT_0_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'closed', + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_UUID]: 'ALERT_1_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'open', + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_2', + [ALERT_UUID]: 'ALERT_2_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'open', + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_3', + [ALERT_UUID]: 'ALERT_3_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_WORKFLOW_STATUS]: 'open', + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + ], + }, + } as any); + const executor = createLifecycleExecutor( + logger, + ruleDataClientMock + )<{}, TestRuleState, never, never, never>(async ({ services, state }) => { + services.alertWithLifecycle({ + id: 'TEST_ALERT_0', + fields: {}, + }); + services.alertWithLifecycle({ + id: 'TEST_ALERT_1', + fields: {}, + }); + services.alertWithLifecycle({ + id: 'TEST_ALERT_2', + fields: {}, + }); + services.alertWithLifecycle({ + id: 'TEST_ALERT_3', + fields: {}, + }); + + return { state }; + }); + + const serializedAlerts = await executor( + createDefaultAlertExecutorOptions({ + alertId: 'TEST_ALERT_0', + params: {}, + state: { + wrapped: initialRuleState, + trackedAlerts: { + TEST_ALERT_0: { + alertId: 'TEST_ALERT_0', + alertUuid: 'TEST_ALERT_0_UUID', + started: '2020-01-01T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_1: { + alertId: 'TEST_ALERT_1', + alertUuid: 'TEST_ALERT_1_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_2: { + alertId: 'TEST_ALERT_2', + alertUuid: 'TEST_ALERT_2_UUID', + started: '2020-01-01T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_3: { + alertId: 'TEST_ALERT_3', + alertUuid: 'TEST_ALERT_3_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + }, + trackedAlertsRecovered: {}, + }, + logger, + }) + ); + + expect(serializedAlerts.state.trackedAlerts).toEqual({ + TEST_ALERT_0: { + activeCount: 1, + alertId: 'TEST_ALERT_0', + alertUuid: 'TEST_ALERT_0_UUID', + flapping: false, + flappingHistory: [false], + pendingRecoveredCount: 0, + started: '2020-01-01T12:00:00.000Z', + }, + TEST_ALERT_1: { + activeCount: 1, + alertId: 'TEST_ALERT_1', + alertUuid: 'TEST_ALERT_1_UUID', + flapping: false, + flappingHistory: [false], + pendingRecoveredCount: 0, + started: '2020-01-02T12:00:00.000Z', + }, + TEST_ALERT_2: { + activeCount: 1, + alertId: 'TEST_ALERT_2', + alertUuid: 'TEST_ALERT_2_UUID', + flapping: false, + flappingHistory: [false], + pendingRecoveredCount: 0, + started: '2020-01-01T12:00:00.000Z', + }, + TEST_ALERT_3: { + activeCount: 1, + alertId: 'TEST_ALERT_3', + alertUuid: 'TEST_ALERT_3_UUID', + flapping: false, + flappingHistory: [false], + pendingRecoveredCount: 0, + started: '2020-01-02T12:00:00.000Z', + }, + }); + + expect(serializedAlerts.state.trackedAlertsRecovered).toEqual({}); + + expect((await ruleDataClientMock.getWriter()).bulk).toHaveBeenCalledWith( + expect.objectContaining({ + body: [ + // alert document + { index: expect.objectContaining({ _id: 'TEST_ALERT_0_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_0', + [ALERT_WORKFLOW_STATUS]: 'closed', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [ALERT_CONSECUTIVE_MATCHES]: 1, + [EVENT_ACTION]: 'active', + [EVENT_KIND]: 'signal', + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_1_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_WORKFLOW_STATUS]: 'open', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [EVENT_ACTION]: 'active', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 1, + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_2_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_2', + [ALERT_WORKFLOW_STATUS]: 'open', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [EVENT_ACTION]: 'active', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 1, + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_3_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_3', + [ALERT_WORKFLOW_STATUS]: 'open', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [EVENT_ACTION]: 'active', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 1, + }), + ], + }) + ); + }); + + it('updates existing documents for recovered alerts', async () => { + const logger = loggerMock.create(); + const ruleDataClientMock = createRuleDataClientMock(); + ruleDataClientMock.getReader().search.mockResolvedValue({ + hits: { + hits: [ + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_0', + [ALERT_UUID]: 'ALERT_0_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_UUID]: 'ALERT_1_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_2', + [ALERT_UUID]: 'ALERT_2_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + { + _source: { + '@timestamp': '', + [ALERT_INSTANCE_ID]: 'TEST_ALERT_3', + [ALERT_UUID]: 'ALERT_3_UUID', + [ALERT_RULE_CATEGORY]: 'RULE_TYPE_NAME', + [ALERT_RULE_CONSUMER]: 'CONSUMER', + [ALERT_RULE_NAME]: 'NAME', + [ALERT_RULE_PRODUCER]: 'PRODUCER', + [ALERT_RULE_TYPE_ID]: 'RULE_TYPE_ID', + [ALERT_RULE_UUID]: 'RULE_UUID', + [ALERT_STATUS]: ALERT_STATUS_ACTIVE, + [SPACE_IDS]: ['fake-space-id'], + }, + _index: '.alerts-index-name', + _seq_no: 4, + _primary_term: 2, + }, + ], + }, + } as any); + const executor = createLifecycleExecutor( + logger, + ruleDataClientMock + )<{}, TestRuleState, never, never, never>(async ({ services, state }) => { + return { state }; + }); + + const serializedAlerts = await executor( + createDefaultAlertExecutorOptions({ + alertId: 'TEST_ALERT_0', + params: {}, + state: { + wrapped: initialRuleState, + trackedAlerts: { + TEST_ALERT_0: { + alertId: 'TEST_ALERT_0', + alertUuid: 'TEST_ALERT_0_UUID', + started: '2020-01-01T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_1: { + alertId: 'TEST_ALERT_1', + alertUuid: 'TEST_ALERT_1_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_2: { + alertId: 'TEST_ALERT_2', + alertUuid: 'TEST_ALERT_2_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + TEST_ALERT_3: { + alertId: 'TEST_ALERT_3', + alertUuid: 'TEST_ALERT_3_UUID', + started: '2020-01-02T12:00:00.000Z', + flappingHistory: [], + flapping: false, + pendingRecoveredCount: 0, + activeCount: 0, + }, + }, + trackedAlertsRecovered: {}, + }, + logger, + }) + ); + + expect(serializedAlerts.state.trackedAlerts).toEqual({}); + + expect(serializedAlerts.state.trackedAlertsRecovered).toEqual({ + TEST_ALERT_0: { + activeCount: 0, + alertId: 'TEST_ALERT_0', + alertUuid: 'TEST_ALERT_0_UUID', + flapping: false, + flappingHistory: [true], + pendingRecoveredCount: 0, + started: '2020-01-01T12:00:00.000Z', + }, + TEST_ALERT_1: { + activeCount: 0, + alertId: 'TEST_ALERT_1', + alertUuid: 'TEST_ALERT_1_UUID', + flapping: false, + flappingHistory: [true], + pendingRecoveredCount: 0, + started: '2020-01-02T12:00:00.000Z', + }, + TEST_ALERT_2: { + activeCount: 0, + alertId: 'TEST_ALERT_2', + alertUuid: 'TEST_ALERT_2_UUID', + flapping: false, + flappingHistory: [true], + pendingRecoveredCount: 0, + started: '2020-01-02T12:00:00.000Z', + }, + TEST_ALERT_3: { + activeCount: 0, + alertId: 'TEST_ALERT_3', + alertUuid: 'TEST_ALERT_3_UUID', + flapping: false, + flappingHistory: [true], + pendingRecoveredCount: 0, + started: '2020-01-02T12:00:00.000Z', + }, + }); + + expect((await ruleDataClientMock.getWriter()).bulk).toHaveBeenCalledWith( + expect.objectContaining({ + body: expect.arrayContaining([ + // alert document + { index: expect.objectContaining({ _id: 'TEST_ALERT_0_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_0', + [ALERT_STATUS]: ALERT_STATUS_RECOVERED, + [EVENT_ACTION]: 'close', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 0, + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_1_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_1', + [ALERT_STATUS]: ALERT_STATUS_RECOVERED, + [EVENT_ACTION]: 'close', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 0, + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_2_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_2', + [ALERT_STATUS]: ALERT_STATUS_RECOVERED, + [EVENT_ACTION]: 'close', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 0, + }), + { index: expect.objectContaining({ _id: 'TEST_ALERT_3_UUID' }) }, + expect.objectContaining({ + [ALERT_INSTANCE_ID]: 'TEST_ALERT_3', + [ALERT_STATUS]: ALERT_STATUS_RECOVERED, + [EVENT_ACTION]: 'close', + [EVENT_KIND]: 'signal', + [ALERT_CONSECUTIVE_MATCHES]: 0, + }), + ]), + }) + ); + }); + }); }); type TestRuleState = Record & { diff --git a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts index 58aa875cf234..465c49f9aa9b 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_lifecycle_rule_type.test.ts @@ -253,6 +253,7 @@ describe('createLifecycleRuleTypeFactory', () => { "@timestamp": "2021-06-16T09:01:00.000Z", "event.action": "open", "event.kind": "signal", + "kibana.alert.consecutive_matches": 1, "kibana.alert.duration.us": 0, "kibana.alert.flapping": false, "kibana.alert.instance.id": "opbeans-java", @@ -290,6 +291,7 @@ describe('createLifecycleRuleTypeFactory', () => { "@timestamp": "2021-06-16T09:01:00.000Z", "event.action": "open", "event.kind": "signal", + "kibana.alert.consecutive_matches": 1, "kibana.alert.duration.us": 0, "kibana.alert.flapping": false, "kibana.alert.instance.id": "opbeans-node", diff --git a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts index abb9ebba6d01..a6f428d59826 100644 --- a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts +++ b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.test.ts @@ -70,6 +70,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 2, "event": Object { + "kibana.alert.consecutive_matches": 2, "kibana.alert.status": "active", }, "flappingHistory": Array [], @@ -78,6 +79,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 1, "event": Object { + "kibana.alert.consecutive_matches": 1, "kibana.alert.status": "active", }, "flappingHistory": Array [ @@ -99,6 +101,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": true, @@ -107,6 +110,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": false, @@ -115,6 +119,7 @@ describe('getAlertsForNotification', () => { "activeCount": 0, "event": Object { "event.action": "active", + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "active", }, "flapping": true, @@ -133,6 +138,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": true, @@ -141,6 +147,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": false, @@ -149,6 +156,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": true, @@ -174,6 +182,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 2, "event": Object { + "kibana.alert.consecutive_matches": 2, "kibana.alert.status": "active", }, "flappingHistory": Array [], @@ -182,6 +191,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 1, "event": Object { + "kibana.alert.consecutive_matches": 1, "kibana.alert.status": "active", }, "flappingHistory": Array [ @@ -203,6 +213,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": true, @@ -211,6 +222,7 @@ describe('getAlertsForNotification', () => { Object { "activeCount": 0, "event": Object { + "kibana.alert.consecutive_matches": 0, "kibana.alert.status": "recovered", }, "flapping": false, @@ -243,6 +255,7 @@ describe('getAlertsForNotification', () => { "activeCount": 2, "event": Object { "event.action": "open", + "kibana.alert.consecutive_matches": 2, "kibana.alert.duration.us": 0, "kibana.alert.maintenance_window_ids": Array [ "maintenance-window-id", diff --git a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts index 5ec0e5b835ee..15dcedeaf88c 100644 --- a/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts +++ b/x-pack/plugins/rule_registry/server/utils/get_alerts_for_notification.ts @@ -16,6 +16,7 @@ import { EVENT_ACTION, ALERT_TIME_RANGE, ALERT_MAINTENANCE_WINDOW_IDS, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; export function getAlertsForNotification( @@ -72,6 +73,7 @@ export function getAlertsForNotification( trackedEvent.pendingRecoveredCount = 0; } } + trackedEvent.event[ALERT_CONSECUTIVE_MATCHES] = trackedEvent.activeCount; events.push(trackedEvent); } return events; diff --git a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap index fe6552fa889a..bb41711d8745 100644 --- a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap +++ b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

Some Title

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

Some Title

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

Some Title

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

Some Title

Some Body
Action#1
Action#2
"`; diff --git a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap index 43f406782acc..89f47f333dbb 100644 --- a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; -exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; diff --git a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap index 80155b3fde5a..e7b46c663851 100644 --- a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; -exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts index 89dad46c09ef..178757d83578 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts @@ -5,18 +5,17 @@ * 2.0. */ -import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; +import { KBN_FIELD_TYPES } from '@kbn/field-types'; +import { TableId } from '@kbn/securitysolution-data-table'; + import { createMockStore, mockGlobalState } from '../../../common/mock'; import { createFilterInCellActionFactory } from './filter_in'; import type { SecurityCellActionExecutionContext } from '../../types'; -import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; -import { TableId } from '@kbn/securitysolution-data-table'; import { TimelineId } from '../../../../common/types'; -import { KBN_FIELD_TYPES } from '@kbn/field-types'; +import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; const services = createStartServicesMock(); const mockGlobalFilterManager = services.data.query.filterManager; -const mockTimelineFilterManager = createFilterManagerMock(); const mockWarningToast = services.notifications.toasts.addWarning; const mockState = { @@ -27,7 +26,6 @@ const mockState = { ...mockGlobalState.timeline.timelineById, [TimelineId.active]: { ...mockGlobalState.timeline.timelineById[TimelineId.active], - filterManager: mockTimelineFilterManager, }, }, }, @@ -110,7 +108,7 @@ describe('createFilterInCellActionFactory', () => { it('should execute using generic filterManager', async () => { await filterInAction.execute(dataTableContext); expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled(); - expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled(); }); it('should show warning if value type is unsupported', async () => { @@ -124,7 +122,7 @@ describe('createFilterInCellActionFactory', () => { ], }); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); - expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled(); expect(mockWarningToast).toHaveBeenCalled(); }); }); @@ -137,7 +135,7 @@ describe('createFilterInCellActionFactory', () => { it('should execute using timeline filterManager', async () => { await filterInAction.execute(timelineContext); - expect(mockTimelineFilterManager.addFilters).toHaveBeenCalled(); + expect(services.timelineFilterManager.addFilters).toHaveBeenCalled(); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts index 58560dd58742..fb85c32963d0 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts @@ -15,23 +15,18 @@ import { import type { KBN_FIELD_TYPES } from '@kbn/field-types'; import { ACTION_INCOMPATIBLE_VALUE_WARNING } from '@kbn/cell-actions/src/actions/translations'; import type { SecurityAppStore } from '../../../common/store'; -import { timelineSelectors } from '../../../timelines/store'; import { fieldHasCellActions } from '../../utils'; -import { TimelineId } from '../../../../common/types'; import { isTimelineScope } from '../../../helpers'; import { SecurityCellActionType } from '../../constants'; import type { StartServices } from '../../../types'; import type { SecurityCellAction } from '../../types'; export const createFilterInCellActionFactory = ({ - store, services, }: { store: SecurityAppStore; services: StartServices; }) => { - const getTimelineById = timelineSelectors.getTimelineByIdSelector(); - const { filterManager } = services.data.query; const { notifications } = services; const genericFilterInActionFactory = createFilterInActionFactory({ @@ -70,12 +65,7 @@ export const createFilterInCellActionFactory = ({ const addFilter = metadata?.negateFilters === true ? addFilterOut : addFilterIn; if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { - const timelineFilterManager = getTimelineById( - store.getState(), - TimelineId.active - )?.filterManager; - - addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId }); + addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId }); } else { addFilter({ filterManager, fieldName, value, dataViewId }); } diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts index 28db39739611..23e7fb7e3f66 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts @@ -5,19 +5,19 @@ * 2.0. */ -import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; import { createMockStore, mockGlobalState } from '../../../common/mock'; import { createFilterOutCellActionFactory } from './filter_out'; import type { SecurityCellActionExecutionContext } from '../../types'; -import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; import { TimelineId } from '../../../../common/types'; import { TableId } from '@kbn/securitysolution-data-table'; import { KBN_FIELD_TYPES } from '@kbn/field-types'; -const services = createStartServicesMock(); -const mockGlobalFilterManager = services.data.query.filterManager; -const mockTimelineFilterManager = createFilterManagerMock(); -const mockWarningToast = services.notifications.toasts.addWarning; +import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock'; + +const mockServices = createStartServicesMock(); + +const mockGlobalFilterManager = mockServices.data.query.filterManager; +const mockWarningToast = mockServices.notifications.toasts.addWarning; const mockState = { ...mockGlobalState, @@ -27,7 +27,6 @@ const mockState = { ...mockGlobalState.timeline.timelineById, [TimelineId.active]: { ...mockGlobalState.timeline.timelineById[TimelineId.active], - filterManager: mockTimelineFilterManager, }, }, }, @@ -36,7 +35,10 @@ const mockState = { const mockStore = createMockStore(mockState); describe('createFilterOutCellActionFactory', () => { - const filterOutActionFactory = createFilterOutCellActionFactory({ store: mockStore, services }); + const filterOutActionFactory = createFilterOutCellActionFactory({ + store: mockStore, + services: mockServices, + }); const filterOutAction = filterOutActionFactory({ id: 'testAction' }); beforeEach(() => { @@ -103,7 +105,7 @@ describe('createFilterOutCellActionFactory', () => { it('should execute using generic filterManager', async () => { await filterOutAction.execute(dataTableContext); expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled(); - expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled(); }); it('should show warning if value type is unsupported', async () => { @@ -117,7 +119,7 @@ describe('createFilterOutCellActionFactory', () => { ], }); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); - expect(mockTimelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled(); expect(mockWarningToast).toHaveBeenCalled(); }); }); @@ -130,7 +132,7 @@ describe('createFilterOutCellActionFactory', () => { it('should execute using timeline filterManager', async () => { await filterOutAction.execute(timelineContext); - expect(mockTimelineFilterManager.addFilters).toHaveBeenCalled(); + expect(mockServices.timelineFilterManager.addFilters).toHaveBeenCalled(); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts index 6f2da616d0f2..bbc433e94256 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts @@ -17,21 +17,16 @@ import type { KBN_FIELD_TYPES } from '@kbn/field-types'; import { fieldHasCellActions } from '../../utils'; import type { SecurityAppStore } from '../../../common/store'; import type { StartServices } from '../../../types'; -import { timelineSelectors } from '../../../timelines/store'; -import { TimelineId } from '../../../../common/types'; import { isTimelineScope } from '../../../helpers'; import type { SecurityCellAction } from '../../types'; import { SecurityCellActionType } from '../../constants'; export const createFilterOutCellActionFactory = ({ - store, services, }: { store: SecurityAppStore; services: StartServices; }) => { - const getTimelineById = timelineSelectors.getTimelineByIdSelector(); - const { filterManager } = services.data.query; const { notifications } = services; @@ -70,12 +65,7 @@ export const createFilterOutCellActionFactory = ({ const addFilter = metadata?.negateFilters === true ? addFilterIn : addFilterOut; if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { - const timelineFilterManager = getTimelineById( - store.getState(), - TimelineId.active - )?.filterManager; - - addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId }); + addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId }); } else { addFilter({ filterManager, fieldName, value, dataViewId }); } diff --git a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts index a3a7d58cf282..e0da4447506c 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts @@ -92,7 +92,7 @@ export const createFilterLensAction = ({ const timeline = getTimelineById(store.getState(), TimelineId.active); // timeline is open add the filter to timeline, otherwise add filter to global filters const filterManager = timeline?.show - ? timeline.filterManager + ? services.timelineFilterManager : dataService.query.filterManager; addFilter({ filterManager, fieldName: field, value, dataViewId }); diff --git a/x-pack/plugins/security_solution/public/common/components/filter_group/index.scss b/x-pack/plugins/security_solution/public/common/components/filter_group/index.scss index 6bdcb0e1cdd4..416a996b9dca 100644 --- a/x-pack/plugins/security_solution/public/common/components/filter_group/index.scss +++ b/x-pack/plugins/security_solution/public/common/components/filter_group/index.scss @@ -11,7 +11,7 @@ } .filter-group__wrapper { - .euiFlexGroup.controlGroup { + .euiPanel.controlsWrapper { min-height: 34px; } diff --git a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx index adfcf04e0ec1..c5e4ae70cfe2 100644 --- a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx @@ -11,17 +11,14 @@ import type { DraggableId } from '@hello-pangea/dnd'; import { isEmpty } from 'lodash'; -import { FilterManager } from '@kbn/data-plugin/public'; import { useDispatch } from 'react-redux'; import { getSourcererScopeId, isActiveTimeline } from '../../../helpers'; -import { timelineSelectors } from '../../../timelines/store'; import { useKibana } from '../../lib/kibana'; import { allowTopN } from '../drag_and_drop/helpers'; import type { ColumnHeaderOptions, DataProvider } from '../../../../common/types/timeline'; import { TimelineId } from '../../../../common/types/timeline'; import { ShowTopNButton } from './actions/show_top_n'; import { addProvider } from '../../../timelines/store/actions'; -import { useDeepEqualSelector } from '../../hooks/use_selector'; import { useDataViewId } from '../../hooks/use_data_view_id'; export interface UseHoverActionItemsProps { dataProvider?: DataProvider | DataProvider[]; @@ -85,7 +82,7 @@ export const useHoverActionItems = ({ }: UseHoverActionItemsProps): UseHoverActionItems => { const kibana = useKibana(); const dispatch = useDispatch(); - const { timelines, uiSettings } = kibana.services; + const { timelines, timelineFilterManager } = kibana.services; const dataViewId = useDataViewId(getSourcererScopeId(scopeId ?? '')); // Common actions used by the alert table and alert flyout @@ -101,17 +98,10 @@ export const useHoverActionItems = ({ () => kibana.services.data.query.filterManager, [kibana.services.data.query.filterManager] ); - const getTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const activeFilterManager = useDeepEqualSelector((state) => - isActiveTimeline(scopeId ?? '') ? getTimeline(state, scopeId ?? '')?.filterManager : undefined - ); const filterManager = useMemo( - () => - isActiveTimeline(scopeId ?? '') - ? activeFilterManager ?? new FilterManager(uiSettings) - : filterManagerBackup, - [scopeId, activeFilterManager, uiSettings, filterManagerBackup] + () => (isActiveTimeline(scopeId ?? '') ? timelineFilterManager : filterManagerBackup), + [scopeId, timelineFilterManager, filterManagerBackup] ); /* diff --git a/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx b/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx index 58f1736e1379..28615317c5d8 100644 --- a/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/matrix_histogram/index.tsx @@ -341,6 +341,7 @@ export const MatrixHistogramComponent: React.FC = options={stackByOptions} prepend={i18n.STACK_BY} value={selectedStackByOption?.value} + aria-label={i18n.STACK_BY} /> )} diff --git a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx index c71abe9b7f2f..a711e8e8e222 100644 --- a/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/query_bar/index.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { cloneDeep } from 'lodash'; import React, { memo, useMemo, useCallback, useState, useEffect } from 'react'; import deepEqual from 'fast-deep-equal'; @@ -63,7 +64,6 @@ export const QueryBar = memo( }) => { const { data } = useKibana().services; const [dataView, setDataView] = useState(); - const [searchBarFilters, setSearchBarFilters] = useState(filters); const onQuerySubmit = useCallback( (payload: { dateRange: TimeRange; query?: Query | AggregateQuery }) => { if (payload.query != null && !deepEqual(payload.query, filterQuery)) { @@ -129,14 +129,6 @@ export const QueryBar = memo( const createDataView = async () => { dv = await data.dataViews.create({ id: indexPattern.title, title: indexPattern.title }); setDataView(dv); - - /** - * We update filters and set new data view id to make sure that SearchBar does not show data view picker - * More details in https://github.com/elastic/kibana/issues/174026 - */ - const updatedFilters = [...filters]; - updatedFilters.forEach((filter) => (filter.meta.index = indexPattern.title)); - setSearchBarFilters(updatedFilters); }; createDataView(); } @@ -145,7 +137,21 @@ export const QueryBar = memo( data.dataViews.clearInstanceCache(dv?.id); } }; - }, [data.dataViews, filters, indexPattern, isEsql]); + }, [data.dataViews, indexPattern, isEsql]); + + const searchBarFilters = useMemo(() => { + if (isDataView(indexPattern) || isEsql) { + return filters; + } + + /** + * We update filters and set new data view id to make sure that SearchBar does not show data view picker + * More details in https://github.com/elastic/kibana/issues/174026 + */ + const updatedFilters = cloneDeep(filters); + updatedFilters.forEach((filter) => (filter.meta.index = indexPattern.title)); + return updatedFilters; + }, [filters, indexPattern, isEsql]); const timeHistory = useMemo(() => new TimeHistory(new Storage(localStorage)), []); const arrDataView = useMemo(() => (dataView != null ? [dataView] : []), [dataView]); diff --git a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts index 8525f40d47d1..5cd2363e32d0 100644 --- a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts +++ b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts @@ -14,6 +14,8 @@ import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { securityMock } from '@kbn/security-plugin/public/mocks'; +import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; + import { DEFAULT_APP_REFRESH_INTERVAL, DEFAULT_APP_TIME_RANGE, @@ -121,6 +123,7 @@ export const createStartServicesMock = ( const guidedOnboarding = guidedOnboardingMock.createStart(); const cloud = cloudMock.createStart(); const mockSetHeaderActionMenu = jest.fn(); + const mockTimelineFilterManager = createFilterManagerMock(); return { ...core, @@ -219,6 +222,7 @@ export const createStartServicesMock = ( uiActions: uiActionsPluginMock.createStartContract(), savedSearch: savedSearchPluginMock.createStartContract(), setHeaderActionMenu: mockSetHeaderActionMenu, + timelineFilterManager: mockTimelineFilterManager, } as unknown as StartServices; }; diff --git a/x-pack/plugins/security_solution/public/common/store/store.ts b/x-pack/plugins/security_solution/public/common/store/store.ts index a3b8a44aad0f..9f7f1b035fc0 100644 --- a/x-pack/plugins/security_solution/public/common/store/store.ts +++ b/x-pack/plugins/security_solution/public/common/store/store.ts @@ -234,7 +234,6 @@ const sanitizeDataView = (dataView: SourcererDataView) => { const sanitizeTimelineModel = (timeline: TimelineModel) => { return { ...timeline, - filterManager: 'filterManager', footerText: 'footerText', loadingText: 'loadingText', }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.test.tsx new file mode 100644 index 000000000000..4be2547598b5 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table.test.tsx @@ -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 React from 'react'; +import { render, screen } from '@testing-library/react'; +import { AddPrebuiltRulesTable } from './add_prebuilt_rules_table'; +import { AddPrebuiltRulesHeaderButtons } from './add_prebuilt_rules_header_buttons'; +import { AddPrebuiltRulesTableContextProvider } from './add_prebuilt_rules_table_context'; + +import { useUserData } from '../../../../../detections/components/user_info'; +import { usePrebuiltRulesInstallReview } from '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_install_review'; +import { useFetchPrebuiltRulesStatusQuery } from '../../../../rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query'; +import { useIsUpgradingSecurityPackages } from '../../../../rule_management/logic/use_upgrade_security_packages'; + +// Mock components not needed in this test suite +jest.mock('../../../../rule_management/components/rule_details/rule_details_flyout', () => ({ + RuleDetailsFlyout: jest.fn().mockReturnValue(<>), +})); +jest.mock('../rules_changelog_link', () => ({ + RulesChangelogLink: jest.fn().mockReturnValue(<>), +})); +jest.mock('./add_prebuilt_rules_table_filters', () => ({ + AddPrebuiltRulesTableFilters: jest.fn().mockReturnValue(<>), +})); + +jest.mock('../../../../rule_management/logic/prebuilt_rules/use_perform_rule_install', () => ({ + usePerformInstallAllRules: () => ({ + performInstallAll: jest.fn(), + isLoading: false, + }), + usePerformInstallSpecificRules: () => ({ + performInstallSpecific: jest.fn(), + isLoading: false, + }), +})); + +jest.mock('../../../../../common/lib/kibana', () => ({ + useUiSetting$: jest.fn().mockReturnValue([false]), + useKibana: jest.fn().mockReturnValue({ + services: { + docLinks: { links: { siem: { ruleChangeLog: '' } } }, + }, + }), +})); + +jest.mock('../../../../../common/components/links', () => ({ + useGetSecuritySolutionLinkProps: () => + jest.fn().mockReturnValue({ + onClick: jest.fn(), + }), +})); + +jest.mock( + '../../../../rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query', + () => ({ + useFetchPrebuiltRulesStatusQuery: jest.fn().mockReturnValue({ + data: { + prebuiltRulesStatus: { + num_prebuilt_rules_total_in_package: 1, + }, + }, + }), + }) +); + +jest.mock('../../../../rule_management/logic/use_upgrade_security_packages', () => ({ + useIsUpgradingSecurityPackages: jest.fn().mockImplementation(() => false), +})); + +jest.mock( + '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_install_review', + () => ({ + usePrebuiltRulesInstallReview: jest.fn().mockReturnValue({ + data: { + rules: [ + { + id: 'rule-1', + name: 'rule-1', + tags: [], + risk_score: 1, + severity: 'low', + }, + ], + stats: { + num_rules_to_install: 1, + tags: [], + }, + }, + isLoading: false, + isFetched: true, + }), + }) +); + +jest.mock('../../../../../detections/components/user_info', () => ({ + useUserData: jest.fn(), +})); + +describe('AddPrebuiltRulesTable', () => { + it('disables `Install all` button if user has no write permissions', async () => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD: false, + }, + ]); + + render( + + + + + ); + + const installAllButton = screen.getByTestId('installAllRulesButton'); + + expect(installAllButton).toHaveTextContent('Install all'); + expect(installAllButton).toBeDisabled(); + }); + + it('disables `Install all` button if prebuilt package is being installed', async () => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD: true, + }, + ]); + + (useIsUpgradingSecurityPackages as jest.Mock).mockReturnValueOnce(true); + + render( + + + + + ); + + const installAllButton = screen.getByTestId('installAllRulesButton'); + + expect(installAllButton).toHaveTextContent('Install all'); + expect(installAllButton).toBeDisabled(); + }); + + it('enables Install all` button when user has permissions', async () => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD: true, + }, + ]); + + render( + + + + + ); + + const installAllButton = screen.getByTestId('installAllRulesButton'); + + expect(installAllButton).toHaveTextContent('Install all'); + expect(installAllButton).toBeEnabled(); + }); + + it.each([ + ['Security:Read', true], + ['Security:Write', false], + ])( + `renders "No rules available for install" when there are no rules to install and user has %s`, + async (_permissions, canUserCRUD) => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD, + }, + ]); + + (usePrebuiltRulesInstallReview as jest.Mock).mockReturnValueOnce({ + data: { + rules: [], + stats: { + num_rules_to_install: 0, + tags: [], + }, + }, + isLoading: false, + isFetched: true, + }); + (useFetchPrebuiltRulesStatusQuery as jest.Mock).mockReturnValueOnce({ + data: { + prebuiltRulesStatus: { + num_prebuilt_rules_total_in_package: 0, + }, + }, + }); + + const { findByText } = render( + + + + ); + + expect(await findByText('All Elastic rules have been installed')).toBeInTheDocument(); + } + ); + + it('does not render `Install rule` on rule rows for users with no write permissions', async () => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD: false, + }, + ]); + + const id = 'rule-1'; + (usePrebuiltRulesInstallReview as jest.Mock).mockReturnValueOnce({ + data: { + rules: [ + { + id, + rule_id: id, + name: 'rule-1', + tags: [], + risk_score: 1, + severity: 'low', + }, + ], + stats: { + num_rules_to_install: 1, + tags: [], + }, + }, + isLoading: false, + isFetched: true, + }); + (useFetchPrebuiltRulesStatusQuery as jest.Mock).mockReturnValueOnce({ + data: { + prebuiltRulesStatus: { + num_prebuilt_rules_total_in_package: 1, + }, + }, + }); + + render( + + + + ); + + const installRuleButton = screen.queryByTestId(`installSinglePrebuiltRuleButton-${id}`); + + expect(installRuleButton).not.toBeInTheDocument(); + }); + + it('renders `Install rule` on rule rows for users with write permissions', async () => { + (useUserData as jest.Mock).mockReturnValue([ + { + loading: false, + canUserCRUD: true, + }, + ]); + + const id = 'rule-1'; + (usePrebuiltRulesInstallReview as jest.Mock).mockReturnValueOnce({ + data: { + rules: [ + { + id, + rule_id: id, + name: 'rule-1', + tags: [], + risk_score: 1, + severity: 'low', + }, + ], + stats: { + num_rules_to_install: 1, + tags: [], + }, + }, + isLoading: false, + isFetched: true, + }); + (useFetchPrebuiltRulesStatusQuery as jest.Mock).mockReturnValueOnce({ + data: { + prebuiltRulesStatus: { + num_prebuilt_rules_total_in_package: 1, + }, + }, + }); + + render( + + + + ); + + const installRuleButton = screen.queryByTestId(`installSinglePrebuiltRuleButton-${id}`); + + expect(installRuleButton).toBeInTheDocument(); + expect(installRuleButton).toBeEnabled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx index f13c8130bf74..ac89ff017c78 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx @@ -24,6 +24,7 @@ import { useRuleDetailsFlyout } from '../../../../rule_management/components/rul import type { RuleResponse } from '../../../../../../common/api/detection_engine/model/rule_schema'; import { RuleDetailsFlyout } from '../../../../rule_management/components/rule_details/rule_details_flyout'; import * as i18n from './translations'; +import { isUpgradeReviewRequestEnabled } from './add_prebuilt_rules_utils'; export interface AddPrebuiltRulesTableState { /** @@ -125,11 +126,11 @@ export const AddPrebuiltRulesTableContextProvider = ({ refetchInterval: 60000, // Refetch available rules for installation every minute keepPreviousData: true, // Use this option so that the state doesn't jump between "success" and "loading" on page change // Fetch rules to install only after background installation of security_detection_rules package is complete - enabled: Boolean( - !isUpgradingSecurityPackages && - prebuiltRulesStatus && - prebuiltRulesStatus.num_prebuilt_rules_total_in_package > 0 - ), + enabled: isUpgradeReviewRequestEnabled({ + canUserCRUD, + isUpgradingSecurityPackages, + prebuiltRulesStatus, + }), }); const { mutateAsync: installAllRulesRequest } = usePerformInstallAllRules(); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_utils.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_utils.ts new file mode 100644 index 000000000000..fa032f1b32f6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_utils.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PrebuiltRulesStatusStats } from '../../../../../../common/api/detection_engine'; + +interface UpgradeReviewEnabledProps { + canUserCRUD: boolean | null; + isUpgradingSecurityPackages: boolean; + prebuiltRulesStatus?: PrebuiltRulesStatusStats; +} + +export const isUpgradeReviewRequestEnabled = ({ + canUserCRUD, + isUpgradingSecurityPackages, + prebuiltRulesStatus, +}: UpgradeReviewEnabledProps) => { + // Wait until security package is updated + if (isUpgradingSecurityPackages) { + return false; + } + + // If user is read-only, allow request to proceed even though the Prebuilt + // Rules might not be installed. For these users, the Fleet endpoint quickly + // fails with 403 so isUpgradingSecurityPackages is false + if (canUserCRUD === false) { + return true; + } + + return prebuiltRulesStatus && prebuiltRulesStatus.num_prebuilt_rules_total_in_package > 0; +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx index c5f04a178935..25f605772e94 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx @@ -112,7 +112,7 @@ const createInstallButtonColumn = ( ): TableColumn => ({ field: 'rule_id', name: '', - render: (ruleId: RuleSignatureId) => { + render: (ruleId: RuleSignatureId, record: Rule) => { const isRuleInstalling = loadingRules.includes(ruleId); const isInstallButtonDisabled = isRuleInstalling || isDisabled; return ( @@ -121,6 +121,7 @@ const createInstallButtonColumn = ( disabled={isInstallButtonDisabled} onClick={() => installOneRule(ruleId)} data-test-subj={`installSinglePrebuiltRuleButton-${ruleId}`} + aria-label={i18n.INSTALL_RULE_BUTTON_ARIA_LABEL(record.name)} > {isRuleInstalling ? ( { const { addError } = useAppToasts(); const { - data: { search: searchStrategyClient, query }, + data: { search: searchStrategyClient }, } = useKibana().services; const dispatch = useDispatch(); const { startTransaction } = useStartTransaction(); @@ -133,16 +131,6 @@ export const useInvestigateInTimeline = ({ [addError, getExceptionFilterFromIds] ); - const filterManagerBackup = useMemo(() => query.filterManager, [query.filterManager]); - const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { filterManager: activeFilterManager } = useDeepEqualSelector( - (state) => getManageTimeline(state, TimelineId.active ?? '') ?? timelineDefaults - ); - const filterManager = useMemo( - () => activeFilterManager ?? filterManagerBackup, - [activeFilterManager, filterManagerBackup] - ); - const updateTimelineIsLoading = useCallback( (payload) => dispatch(timelineActions.updateIsLoading(payload)), [dispatch] @@ -164,7 +152,6 @@ export const useInvestigateInTimeline = ({ notes: [], timeline: { ...timeline, - filterManager, indexNames: timeline.indexNames ?? [], show: true, }, @@ -172,7 +159,7 @@ export const useInvestigateInTimeline = ({ ruleNote, })(); }, - [dispatch, filterManager, updateTimelineIsLoading, clearActiveTimeline] + [dispatch, updateTimelineIsLoading, clearActiveTimeline] ); const investigateInTimelineAlertClick = useCallback(async () => { diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts index 97f782c7dd95..13e52e855f2b 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/rules/translations.ts @@ -1205,6 +1205,14 @@ export const INSTALL_RULE_BUTTON = i18n.translate( } ); +export const INSTALL_RULE_BUTTON_ARIA_LABEL = (ruleName: string) => + i18n.translate('xpack.securitySolution.addRules.installRuleButton.ariaLabel', { + defaultMessage: 'Install "{ruleName}"', + values: { + ruleName, + }, + }); + export const UPDATE_RULE_BUTTON = i18n.translate( 'xpack.securitySolution.addRules.upgradeRuleButton', { diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx index d49c8e1e9389..9b150aade8b9 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/styled_basic_table.tsx @@ -15,17 +15,18 @@ export const StyledBasicTable = styled(EuiBasicTable)` } } - .inlineActions { + .inlineActions button { opacity: 0; } .EntityAnalyticsTableHoverActions { - .inlineActions-popoverOpen { + .inlineActions-popoverOpen button { opacity: 1; } - .inline-actions-table-cell:hover { - .inlineActions { + .inline-actions-table-cell { + .inlineActions button:focus-visible, + &:hover .inlineActions button { opacity: 1; } } diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index 0aa89c80e0a1..516dc0166bdd 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -17,8 +17,12 @@ import type { Plugin as IPlugin, } from '@kbn/core/public'; -import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { NowProvider, QueryService } from '@kbn/data-plugin/public'; +import { + type DataPublicPluginStart, + FilterManager, + NowProvider, + QueryService, +} from '@kbn/data-plugin/public'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { getLazyEndpointAgentTamperProtectionExtension } from './management/pages/policy/view/ingest_manager_integration/lazy_endpoint_agent_tamper_protection_extension'; @@ -212,6 +216,7 @@ export class Plugin implements IPlugin { - const { - data: { query }, - } = useKibana().services; const dispatch = useDispatch(); const { startTransaction } = useStartTransaction(); - const filterManagerBackup = useMemo(() => query.filterManager, [query.filterManager]); - const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const { filterManager: activeFilterManager } = useDeepEqualSelector((state) => - getManageTimeline(state, TimelineId.active ?? '') - ); - const filterManager = useMemo( - () => activeFilterManager ?? filterManagerBackup, - [activeFilterManager, filterManagerBackup] - ); - const updateTimelineIsLoading = useCallback( (payload) => dispatch(timelineActions.updateIsLoading(payload)), [dispatch] @@ -85,7 +70,6 @@ export const useInvestigateInTimeline = ({ notes: [], timeline: { ...timeline, - filterManager, indexNames: timeline.indexNames ?? [], show: true, }, @@ -93,12 +77,12 @@ export const useInvestigateInTimeline = ({ ruleNote, })(); }, - [dispatch, filterManager, updateTimelineIsLoading, clearActiveTimeline] + [dispatch, updateTimelineIsLoading, clearActiveTimeline] ); const investigateInTimelineClick = useCallback(async () => { startTransaction({ name: `${APP_UI_ID} threat indicator investigateInTimeline` }); - await createTimeline({ + createTimeline({ from, notes: null, timeline: { diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx index 308ba6038ec5..40f883426420 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_tab_content/index.tsx @@ -22,7 +22,6 @@ import { connect, useDispatch } from 'react-redux'; import deepEqual from 'fast-deep-equal'; import { InPortal } from 'react-reverse-portal'; -import { FilterManager } from '@kbn/data-plugin/public'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import type { ControlColumnProps } from '../../../../../common/types'; import { InputsModelId } from '../../../../common/store/inputs/constants'; @@ -44,7 +43,7 @@ import type { RowRenderer, ToggleDetailPanel, } from '../../../../../common/types/timeline'; -import { TimelineId, TimelineTabs } from '../../../../../common/types/timeline'; +import { TimelineTabs } from '../../../../../common/types/timeline'; import { requiredFieldsForActions } from '../../../../detections/components/alerts_table/default_config'; import { EventDetailsWidthProvider } from '../../../../common/components/events_viewer/event_details_width_context'; import type { inputsModel, State } from '../../../../common/store'; @@ -58,7 +57,6 @@ import { useTimelineFullScreen } from '../../../../common/containers/use_full_sc import { DetailsPanel } from '../../side_panel'; import { ExitFullScreen } from '../../../../common/components/exit_full_screen'; import { getDefaultControlColumn } from '../body/control_columns'; -import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { useLicense } from '../../../../common/hooks/use_license'; import { HeaderActions } from '../../../../common/components/header_actions/header_actions'; const QueryTabHeaderContainer = styled.div` @@ -157,7 +155,6 @@ export const QueryTabContentComponent: React.FC = ({ columns, dataProviders, end, - expandedDetail, filters, timelineId, isLive, @@ -191,21 +188,10 @@ export const QueryTabContentComponent: React.FC = ({ selectedPatterns, } = useSourcererDataView(SourcererScopeName.timeline); - const { uiSettings } = useKibana().services; + const { uiSettings, timelineFilterManager } = useKibana().services; const isEnterprisePlus = useLicense().isEnterprise(); const ACTION_BUTTON_COUNT = isEnterprisePlus ? 6 : 5; - const getManageTimeline = useMemo(() => timelineSelectors.getTimelineByIdSelector(), []); - const currentTimeline = useDeepEqualSelector((state) => - getManageTimeline(state, timelineId ?? TimelineId.active) - ); - - const activeFilterManager = currentTimeline.filterManager; - const filterManager = useMemo( - () => activeFilterManager ?? new FilterManager(uiSettings), - [activeFilterManager, uiSettings] - ); - const esQueryConfig = useMemo(() => getEsQueryConfig(uiSettings), [uiSettings]); const kqlQuery: { query: string; @@ -268,11 +254,10 @@ export const QueryTabContentComponent: React.FC = ({ useEffect(() => { dispatch( timelineActions.initializeTimelineSettings({ - filterManager, id: timelineId, }) ); - }, [dispatch, filterManager, timelineId]); + }, [dispatch, timelineId]); const [ isQueryLoading, @@ -353,7 +338,7 @@ export const QueryTabContentComponent: React.FC = ({ { @@ -57,8 +56,6 @@ jest.mock('../../common/utils/default_date_settings', () => { }; }); -const mockFilterManager = {} as FilterManager; - const basicDataProvider: DataProvider = { and: [], id: '123', @@ -94,7 +91,6 @@ const basicTimeline: TimelineModel = { eventIdToNoteIds: {}, excludedRowRendererIds: [], expandedDetail: {}, - filterManager: mockFilterManager, highlightedDropAndProviderId: '', historyIds: [], id: 'foo', @@ -196,20 +192,6 @@ describe('Timeline', () => { }, }); }); - - test('should contain existing filterManager', () => { - const update = addTimelineToStore({ - id: 'foo', - timeline: { - ...basicTimeline, - status: TimelineStatus.immutable, - timelineType: TimelineType.template, - }, - timelineById: timelineByIdMock, - }); - - expect(update.foo.filterManager).toEqual(mockFilterManager); - }); }); describe('#addNewTimeline', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/store/helpers.ts b/x-pack/plugins/security_solution/public/timelines/store/helpers.ts index 5ce65a5b7091..93df6c2900e2 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/helpers.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/helpers.ts @@ -130,7 +130,6 @@ export const addTimelineToStore = ({ ...timelineById, [id]: { ...timeline, - filterManager: timelineById[id].filterManager, isLoading: timelineById[id].isLoading, initialized: timeline.initialized ?? timelineById[id].initialized, resolveTimelineConfig, diff --git a/x-pack/plugins/security_solution/public/timelines/store/model.ts b/x-pack/plugins/security_solution/public/timelines/store/model.ts index 0bd6f4806f06..89e1754acb28 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/model.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/model.ts @@ -5,7 +5,6 @@ * 2.0. */ -import type { FilterManager } from '@kbn/data-plugin/public'; import type { Filter } from '@kbn/es-query'; import type { SavedSearch } from '@kbn/saved-search-plugin/common'; import type { ExpandedDetailTimeline, SessionViewConfig } from '../../../common/types'; @@ -101,7 +100,7 @@ export interface TimelineModel { deletedEventIds: string[]; documentType: string; excludedRowRendererIds: RowRendererId[]; - filterManager?: FilterManager; + filters?: Filter[]; footerText?: string | React.ReactNode; loadingText?: string | React.ReactNode; queryFields: string[]; @@ -128,7 +127,6 @@ export interface TimelineModel { }; /** Uniquely identifies the timeline */ id: string; - filters?: Filter[]; selectedEventIds: Record; /** If selectAll checkbox in header is checked **/ isSelectAllChecked: boolean; @@ -194,7 +192,6 @@ export type SubsetTimelineModel = Readonly< | 'version' | 'status' | 'filters' - | 'filterManager' | 'savedSearchId' | 'savedSearch' | 'isDiscoverSavedSearchLoaded' diff --git a/x-pack/plugins/security_solution/public/timelines/store/types.ts b/x-pack/plugins/security_solution/public/timelines/store/types.ts index ef31fd909725..31d2a6b6daf1 100644 --- a/x-pack/plugins/security_solution/public/timelines/store/types.ts +++ b/x-pack/plugins/security_solution/public/timelines/store/types.ts @@ -5,7 +5,6 @@ * 2.0. */ -import type { FilterManager } from '@kbn/data-plugin/public'; import type { ColumnHeaderOptions, SortColumnTimeline } from '../../../common/types'; import type { RowRendererId } from '../../../common/api/timeline'; @@ -37,7 +36,6 @@ export interface TimelineModelSettings { defaultColumns: ColumnHeaderOptions[]; /** A list of Ids of excluded Row Renderers */ excludedRowRendererIds: RowRendererId[]; - filterManager?: FilterManager; footerText?: string | React.ReactNode; loadingText?: string | React.ReactNode; queryFields: string[]; diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts index 3c76453acb38..16b7308aa73d 100644 --- a/x-pack/plugins/security_solution/public/types.ts +++ b/x-pack/plugins/security_solution/public/types.ts @@ -9,7 +9,7 @@ import type { Observable } from 'rxjs'; import type { CoreStart, AppMountParameters, AppLeaveHandler } from '@kbn/core/public'; import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; -import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { DataPublicPluginStart, FilterManager } from '@kbn/data-plugin/public'; import type { FieldFormatsStartCommon } from '@kbn/field-formats-plugin/common'; import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; @@ -176,6 +176,7 @@ export type StartServices = CoreStart & telemetry: TelemetryClientStart; customDataService: DataPublicPluginStart; topValuesPopover: TopValuesPopoverService; + timelineFilterManager: FilterManager; }; export interface PluginSetup { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts index d653591493a3..ab9367400ed1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.test.ts @@ -46,15 +46,14 @@ describe('inject_exceptions_list', () => { ).toEqual([]); }); - test('logs expect error message if the exceptionsList is undefined', () => { - injectExceptionsReferences({ - logger, - exceptionsList: undefined as unknown as RuleParams['exceptionsList'], - savedObjectReferences: mockSavedObjectReferences(), - }); - expect(logger.error).toBeCalledWith( - 'Exception list is null when it never should be. This indicates potentially that saved object migrations did not run correctly. Returning empty exception list' - ); + test('returns empty array given undefined', () => { + expect( + injectExceptionsReferences({ + logger, + exceptionsList: undefined as unknown as RuleParams['exceptionsList'], + savedObjectReferences: mockSavedObjectReferences(), + }) + ).toEqual([]); }); test('returns empty array given an empty array for "exceptionsList"', () => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts index 3baab73f1e50..163aeab18f64 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/saved_object_references/inject_exceptions_list.ts @@ -26,14 +26,8 @@ export const injectExceptionsReferences = ({ logger: Logger; exceptionsList: RuleParams['exceptionsList']; savedObjectReferences: SavedObjectReference[]; -}): RuleParams['exceptionsList'] => { - if (exceptionsList == null) { - logger.error( - 'Exception list is null when it never should be. This indicates potentially that saved object migrations did not run correctly. Returning empty exception list' - ); - return []; - } - return exceptionsList.map((exceptionItem, index) => { +}): RuleParams['exceptionsList'] => + (exceptionsList ?? []).map((exceptionItem, index) => { const savedObjectReference = getSavedObjectReferenceForExceptionsList({ logger, index, @@ -54,4 +48,3 @@ export const injectExceptionsReferences = ({ return exceptionItem; } }); -}; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts index 998f4540cfd4..547e641c019d 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts @@ -391,3 +391,24 @@ export const REQUIRED_LABEL = i18n.translate( defaultMessage: 'Required', } ); + +export const EVENT_ACTION_TRIGGER = i18n.translate( + 'xpack.stackConnectors.components.serviceNow.eventActionTriggerOptionLabel', + { + defaultMessage: 'Trigger', + } +); + +export const EVENT_ACTION_RESOLVE = i18n.translate( + 'xpack.stackConnectors.components.serviceNow.eventActionResolveOptionLabel', + { + defaultMessage: 'Resolve', + } +); + +export const EVENT_ACTION_LABEL = i18n.translate( + 'xpack.stackConnectors.components.serviceNowITSM.eventActionFieldLabel', + { + defaultMessage: 'Event action', + } +); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx index 1566721386ba..e0eb4524341d 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.test.tsx @@ -7,13 +7,13 @@ import React from 'react'; import { mountWithIntl } from '@kbn/test-jest-helpers'; -import { act } from '@testing-library/react'; +import { act, waitFor } from '@testing-library/react'; +import { merge } from 'lodash'; -import { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public/types'; +import { ActionConnector, ActionConnectorMode } from '@kbn/triggers-actions-ui-plugin/public/types'; import { useGetChoices } from '../lib/servicenow/use_get_choices'; import ServiceNowITSMParamsFields from './servicenow_itsm_params'; import { Choice } from '../lib/servicenow/types'; -import { merge } from 'lodash'; import { ACTION_GROUP_RECOVERED } from '../lib/servicenow/helpers'; jest.mock('../lib/servicenow/use_get_choices'); @@ -59,6 +59,8 @@ const defaultProps = { editAction, index: 0, messageVariables: [], + selectedActionGroupId: 'trigger', + executionMode: ActionConnectorMode.ActionForm, }; const useGetChoicesResponse = { @@ -130,6 +132,7 @@ describe('ServiceNowITSMParamsFields renders', () => { onChoices(useGetChoicesResponse.choices); }); wrapper.update(); + expect(wrapper.find('[data-test-subj="eventActionSelect"]').exists()).toBeFalsy(); expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeTruthy(); @@ -305,6 +308,8 @@ describe('ServiceNowITSMParamsFields renders', () => { errors={{ ['subActionParams.incident.short_description']: [] }} editAction={editAction} index={0} + selectedActionGroupId={'trigger'} + executionMode={ActionConnectorMode.ActionForm} /> ); @@ -362,4 +367,102 @@ describe('ServiceNowITSMParamsFields renders', () => { expect(wrapper.find('.euiFormErrorText').text()).toBe('correlation_id_error'); }); }); + + describe('Test form', () => { + const newDefaultProps = { + ...defaultProps, + executionMode: ActionConnectorMode.Test, + actionParams: {}, + selectedActionGroupId: undefined, + }; + + test('renders event action dropdown correctly', () => { + const wrapper = mountWithIntl(); + wrapper.update(); + expect(wrapper.find('[data-test-subj="eventActionSelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="eventActionSelect"]').first().prop('options')).toEqual([ + { + text: 'Trigger', + value: 'trigger', + }, + { + text: 'Resolve', + value: 'resolve', + }, + ]); + }); + + test('shows form for trigger action correctly', () => { + const changeEvent = { target: { value: 'trigger' } } as React.ChangeEvent; + const wrapper = mountWithIntl(); + + const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first(); + theField.prop('onChange')!(changeEvent); + + expect(editAction.mock.calls[0][1]).toEqual('pushToService'); + + wrapper.update(); + + expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="categorySelect"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="correlation_idInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="correlation_displayInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeTruthy(); + }); + + test('shows form for resolve action correctly', () => { + const changeEvent = { target: { value: 'resolve' } } as React.ChangeEvent; + const wrapper = mountWithIntl(); + + expect(editAction.mock.calls[0][1]).toEqual('pushToService'); + + const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first(); + theField.prop('onChange')!(changeEvent); + + waitFor(() => { + expect(editAction.mock.calls[0][1]).toEqual('closeIncident'); + }); + + wrapper.update(); + + expect(wrapper.find('[data-test-subj="correlation_idInput"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="urgencySelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="impactSelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="categorySelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="subcategorySelect"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="short_descriptionInput"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="correlation_displayInput"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeFalsy(); + expect(wrapper.find('[data-test-subj="commentsTextArea"]').exists()).toBeFalsy(); + }); + + test('resets form fields on action change', () => { + const changeEvent = { target: { value: 'resolve' } } as React.ChangeEvent; + const wrapper = mountWithIntl(); + + const correlationIdField = wrapper.find('input[data-test-subj="correlation_idInput"]'); + + correlationIdField.simulate('change', { + target: { value: 'updated correlation id' }, + }); + + waitFor(() => { + expect(correlationIdField.contains('updated correlation id')).toBe(true); + }); + + const theField = wrapper.find('[data-test-subj="eventActionSelect"]').first(); + theField.prop('onChange')!(changeEvent); + + wrapper.update(); + + waitFor(() => { + expect(correlationIdField.contains('')).toBe(true); + }); + }); + }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx index 8e1bf021976b..2c3ebc080593 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/servicenow_itsm_params.tsx @@ -6,6 +6,7 @@ */ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { isEmpty } from 'lodash'; import { EuiFormRow, EuiSelect, @@ -17,14 +18,14 @@ import { EuiLink, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; +import { ActionConnectorMode, ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; import { TextAreaWithMessageVariables, TextFieldWithMessageVariables, useKibana, } from '@kbn/triggers-actions-ui-plugin/public'; import { Choice, Fields } from '../lib/servicenow/types'; -import { ServiceNowITSMActionParams } from './types'; +import { ServiceNowITSMActionParams, EventAction } from './types'; import { useGetChoices } from '../lib/servicenow/use_get_choices'; import { ACTION_GROUP_RECOVERED, @@ -47,17 +48,10 @@ const defaultFields: Fields = { const CorrelationIdField: React.FunctionComponent< Pick, 'index' | 'messageVariables' | 'errors'> & { correlationId: string | null; - selectedActionGroupId?: string; editSubActionProperty: (key: string, value: any) => void; + isRequired?: boolean; } -> = ({ - index, - messageVariables, - correlationId, - editSubActionProperty, - selectedActionGroupId, - errors, -}) => { +> = ({ index, messageVariables, correlationId, editSubActionProperty, isRequired, errors }) => { const { docLinks } = useKibana().services; return ( 0 && !correlationId && - selectedActionGroupId === ACTION_GROUP_RECOVERED + isRequired } helpText={ @@ -80,9 +74,7 @@ const CorrelationIdField: React.FunctionComponent< } labelAppend={ - {selectedActionGroupId !== ACTION_GROUP_RECOVERED - ? i18n.OPTIONAL_LABEL - : i18n.REQUIRED_LABEL} + {isRequired ? i18n.REQUIRED_LABEL : i18n.OPTIONAL_LABEL} } > @@ -98,10 +90,22 @@ const CorrelationIdField: React.FunctionComponent< ); }; +const eventActionOptions = [ + { + value: EventAction.TRIGGER, + text: i18n.EVENT_ACTION_TRIGGER, + }, + { + value: EventAction.RESOLVE, + text: i18n.EVENT_ACTION_RESOLVE, + }, +]; + const ServiceNowParamsFields: React.FunctionComponent< ActionParamsProps > = (props) => { const { + executionMode, actionConnector, actionParams, editAction, @@ -116,20 +120,40 @@ const ServiceNowParamsFields: React.FunctionComponent< } = useKibana().services; const isDeprecatedActionConnector = actionConnector?.isDeprecated; + const [choices, setChoices] = useState(defaultFields); + const [eventAction, setEventAction] = useState(EventAction.TRIGGER); + + const isTestTriggerAction = + executionMode === ActionConnectorMode.Test && eventAction === EventAction.TRIGGER; + const isTestResolveAction = + executionMode === ActionConnectorMode.Test && eventAction === EventAction.RESOLVE; const actionConnectorRef = useRef(actionConnector?.id ?? ''); + + const showAllIncidentDetails = + (selectedActionGroupId && selectedActionGroupId !== ACTION_GROUP_RECOVERED) || + isTestTriggerAction; + const showOnlyCorrelationId = + (selectedActionGroupId && selectedActionGroupId === ACTION_GROUP_RECOVERED) || + isTestResolveAction; + + if (isTestTriggerAction && !actionParams.subAction) { + editAction('subAction', 'pushToService', index); + } + const { incident, comments } = useMemo( () => actionParams.subActionParams ?? ({ incident: {}, - comments: selectedActionGroupId !== ACTION_GROUP_RECOVERED ? [] : undefined, + comments: + selectedActionGroupId && selectedActionGroupId !== ACTION_GROUP_RECOVERED + ? [] + : undefined, } as unknown as ServiceNowITSMActionParams['subActionParams']), [actionParams.subActionParams, selectedActionGroupId] ); - const [choices, setChoices] = useState(defaultFields); - const editSubActionProperty = useCallback( (key: string, value: any) => { const newProps = @@ -186,6 +210,24 @@ const ServiceNowParamsFields: React.FunctionComponent< onSuccess: onChoicesSuccess, }); + const handleEventActionChange = useCallback( + (value: EventAction) => { + if (!value) { + return; + } + + setEventAction(value); + + if (value === EventAction.RESOLVE) { + editAction('subAction', 'closeIncident', index); + return; + } + + editAction('subAction', 'pushToService', index); + }, + [setEventAction, editAction, index] + ); + useEffect(() => { if (actionConnector != null && actionConnectorRef.current !== actionConnector.id) { actionConnectorRef.current = actionConnector.id; @@ -208,16 +250,38 @@ const ServiceNowParamsFields: React.FunctionComponent< index ); } + + if ( + (isTestResolveAction || isTestTriggerAction) && + (!isEmpty(actionParams.subActionParams?.incident) || + actionParams.subActionParams?.comments?.length) + ) { + editAction('subActionParams', { incident: {}, comments: undefined }, index); + return; + } + // eslint-disable-next-line react-hooks/exhaustive-deps - }, [actionConnector]); + }, [actionConnector, isTestResolveAction, isTestTriggerAction]); return ( <> + {executionMode === ActionConnectorMode.Test ? ( + + handleEventActionChange(e.target.value as EventAction)} + /> + + ) : null} +

{i18n.INCIDENT}

- {selectedActionGroupId !== ACTION_GROUP_RECOVERED ? ( + {showAllIncidentDetails && ( <>
@@ -388,13 +452,14 @@ const ServiceNowParamsFields: React.FunctionComponent< label={i18n.COMMENTS_LABEL} /> - ) : ( + )} + {showOnlyCorrelationId && ( )} diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts index 15531f106bbf..dd0a47004f35 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itsm/types.ts @@ -7,6 +7,11 @@ import type { ExecutorSubActionPushParamsITSM } from '../../../server/connector_types/lib/servicenow/types'; +export enum EventAction { + TRIGGER = 'trigger', + RESOLVE = 'resolve', +} + export interface ServiceNowITSMActionParams { subAction: string; subActionParams: ExecutorSubActionPushParamsITSM; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 8fad7bdf8159..e37f880e99c9 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -408,7 +408,7 @@ "controls.controlGroup.management.discard.sub": "Les modifications apportées à ce contrôle seront ignorées. Voulez-vous vraiment continuer ?", "controls.controlGroup.management.discard.title": "Abandonner les modifications ?", "controls.controlGroup.management.flyoutTitle": "Paramètres du contrôle", - "controls.controlGroup.management.hierarchy.subtitle": "Les sélections dans un contrôle diminuent les options disponibles dans le suivant. Les contrôles se suivent de gauche à droite.", + "controls.controlGroup.management.hierarchy.tooltip": "Les sélections dans un contrôle diminuent les options disponibles dans le suivant. Les contrôles se suivent de gauche à droite.", "controls.controlGroup.management.hierarchy.title": "Contrôles à la suite", "controls.controlGroup.management.labelPosition.above": "Au-dessus", "controls.controlGroup.management.labelPosition.designSwitchLegend": "Modifier la position de l'étiquette entre Aligné et Au-dessus", @@ -419,7 +419,7 @@ "controls.controlGroup.management.layout.large": "Large", "controls.controlGroup.management.layout.medium": "Moyenne", "controls.controlGroup.management.layout.small": "Petite", - "controls.controlGroup.management.validate.subtitle": "Ignorez automatiquement toutes les sélections de contrôle qui ne donneraient aucune donnée.", + "controls.controlGroup.management.validate.tooltip": "Ignorez automatiquement toutes les sélections de contrôle qui ne donneraient aucune donnée.", "controls.controlGroup.management.validate.title": "Valider les sélections utilisateur", "controls.controlGroup.timeSlider.title": "Curseur temporel", "controls.controlGroup.title": "Groupe de contrôle", @@ -3116,7 +3116,6 @@ "grouping.eventsTab.unit": "{totalCount, plural, =1 {événement} one {événements} many {événements} other {événements}}", "grouping.groupByPanelTitle": "Sélectionner jusqu'à {groupingLevelsCount} regroupements", "grouping.nullGroup.title": "Le groupe par champ sélectionné, {selectedGroup}, a une valeur manquante de {unit} pour ce groupe.", - "grouping.total.unit": "{totalCount, plural, =1 {regrouper} one {des groupes} many {groupes} other {groupes}}", "grouping.additionalActions.takeAction": "Entreprendre des actions", "grouping.alerts.label": "Regrouper les alertes par", "grouping.customGroupByOptionName": "Champ personnalisé", @@ -12670,8 +12669,6 @@ "xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "Votre index utilise notre pipeline d'ingestion par défaut {defaultPipeline}. Copiez ce pipeline dans une configuration spécifique à l'index pour déverrouiller la possibilité de créer des pipelines d'ingestion et d'inférence personnalisés.", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex} Les modifications apportées aux paramètres ci-dessous sont uniquement fournies à titre indicatif. Ces paramètres ne seront pas conservés dans votre index ou pipeline.", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "D'abord, générez une clé d'API Elasticsearch. Cette clé {apiKeyName} permet d'activer les autorisations de lecture et d'écriture du connecteur pour qu'il puisse indexer les documents dans l'index {indexName} créé. Enregistrez cette clé en lieu sûr, car vous en aurez besoin pour configurer votre connecteur.", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "Votre connecteur {name} s’est bien connecté à Search.", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "Dans cette étape, vous devez cloner ou dupliquer le référentiel, puis copier la clé d'API et l'ID de connecteur générés au {link} associé. L'ID de connecteur identifiera ce connecteur auprès de Search. Le type de service détermine pour quel type de source de données le connecteur est configuré.", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "Authentification {name}", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "Votre connecteur {name} s’est bien connecté à Search.", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "Vous souhaitez héberger vous-même ce connecteur natif ? Convertissez-les en {link} afin qu’ils soient autogérés sur votre propre infrastructure. Vous devez convertir ce connecteur si vous souhaitez personnaliser le code à l'aide de notre cadre Python.", @@ -12700,7 +12697,6 @@ "xpack.enterpriseSearch.content.searchIndices.deleteModal.delete.description": "La suppression de cet index supprimera également toutes ses données et sa configuration {ingestionMethod}. Les applications de recherche associées ne pourront plus accéder à aucune donnée stockée dans cet index.", "xpack.enterpriseSearch.content.searchIndices.deleteModal.syncsWarning.indexNameDescription": "Cette action ne peut pas être annulée. Veuillez saisir {indexName} pour confirmer.", "xpack.enterpriseSearch.content.searchIndices.deleteModal.title": "Voulez-vous vraiment supprimer {indexName} ?", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.tooltipContent": "Les index optimisés pour la recherche sont précédés du préfixe {code}. Ils sont gérés par des mécanismes d'ingestion tels que des robots d'indexation, des connecteurs ou des API d'ingestion.", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "Voulez-vous vraiment supprimer le domaine \"{domainUrl}\" et tous ses paramètres ?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "Le point d'entrée du robot d'indexation a été défini sur {entryPointValue}", "xpack.enterpriseSearch.crawler.authenticationPanel.emptyPrompt.description": "Cliquer sur {addAuthenticationButtonLabel} afin de fournir les informations d'identification nécessaires pour indexer le contenu protégé", @@ -13857,7 +13853,6 @@ "xpack.enterpriseSearch.betaConnectorCalloutTitle": "Connecteur en version bêta", "xpack.enterpriseSearch.betaLabel": "Bêta", "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.copy": "Copier", - "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.tryInConsole": "Essayer dans la console", "xpack.enterpriseSearch.connector.connectorTypePanel.title": "Type de connecteur", "xpack.enterpriseSearch.connector.connectorTypePanel.unknown.label": "Inconnu", "xpack.enterpriseSearch.connector.ingestionStatus.title": "Statut de l'ingestion", @@ -13975,11 +13970,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "La génération d'une nouvelle clé d’API invalidera la clé précédente. Êtes-vous sûr de vouloir générer une nouvelle clé d’API ? Cette action ne peut pas être annulée.", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "Générer une clé d'API Elasticsearch", "xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "Configuration mise à jour", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "fichier de configuration", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "Une fois le connecteur configuré, déployez-le dans votre infrastructure.", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "Revérifier maintenant", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "Votre connecteur ne s'est pas connecté à Search. Résolvez vos problèmes de configuration et actualisez la page.", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "En attente de votre connecteur", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "Nom et description du connecteur mis à jour", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "En nommant et en décrivant ce connecteur, vos collègues et votre équipe tout entière sauront à quelle utilisation ce connecteur est dédié.", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "Enregistrer le nom et la description", @@ -13997,27 +13987,12 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "Sécurité au niveau du document", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "Configuration avancée", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "Configuration", - "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "Nom et description", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "Exigences de la configuration des recherches", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "Finalisez votre connecteur en déclenchant une synchronisation unique, ou en définissant un calendrier de synchronisation récurrent.", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "Définir un calendrier et synchroniser", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "Documentation", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "Ce connecteur prend en charge plusieurs méthodes d'authentification. Demandez à votre administrateur les informations d'identification correctes pour la connexion.", - "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "Finalisez votre connecteur en déclenchant une synchronisation unique ou en définissant une synchronisation récurrente pour assurer la synchronisation de votre source de données au fil du temps", "xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "Mise à jour réussie du calendrier", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "Déployer un connecteur", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "Améliorer votre client connecteur", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "Générer une clé d’API", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "Nom et description", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "Définir un calendrier et synchroniser", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "Configuration avancée", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "Déployer sans Docker", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "Vous devez déployer ce connecteur dans votre propre infrastructure.", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "Déployer avec Docker", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "Gérer les clés d'API", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "Fichier readme du connecteur", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "Support technique et documentation", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "Afficher la documentation", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "Le format JSON n'est pas valide", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "Règles avancées", "xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "Sync", @@ -14373,7 +14348,6 @@ "xpack.enterpriseSearch.content.searchIndices.name.columnTitle": "Nom de l'index", "xpack.enterpriseSearch.content.searchIndices.searchIndices.breadcrumb": "Index Elasticsearch", "xpack.enterpriseSearch.content.searchIndices.searchIndices.includeHidden.label": "Afficher les index masqués", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.label": "Afficher uniquement les index optimisés pour la recherche", "xpack.enterpriseSearch.content.searchIndices.searchIndices.pageTitle": "Index Elasticsearch", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.ariaLabel": "Filtrer les index Elasticsearch", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.placeHolder": "Filtrer les index Elasticsearch", @@ -28911,7 +28885,6 @@ "xpack.observabilityAiAssistant.suggestedFunctionEvent": "a demandé la fonction {functionName}", "xpack.observabilityAiAssistant.userExecutedFunctionEvent": "a exécuté la fonction {functionName}", "xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "a demandé la fonction {functionName}", - "xpack.observabilityAiAssistant.actionMenuItemLabel": "Assistant d'intelligence artificielle", "xpack.observabilityAiAssistant.appTitle": "Assistant d'intelligence artificielle d'Observability", "xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "Demander à l'assistant", "xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "Obtenez des informations relatives à vos données grâce à l'assistant d'Elastic", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index e60bde52a81d..0b0b4d3b1111 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -408,7 +408,7 @@ "controls.controlGroup.management.discard.sub": "このコントロールの変更は破棄されます。続行しますか?", "controls.controlGroup.management.discard.title": "変更を破棄しますか?", "controls.controlGroup.management.flyoutTitle": "設定をコントロールします", - "controls.controlGroup.management.hierarchy.subtitle": "1つのコントロールで項目を選択すると、次で使用可能なオプションが絞り込まれます。コントロールは左から右に連鎖されます。", + "controls.controlGroup.management.hierarchy.tooltip": "1つのコントロールで項目を選択すると、次で使用可能なオプションが絞り込まれます。コントロールは左から右に連鎖されます。", "controls.controlGroup.management.hierarchy.title": "コントロールの連鎖", "controls.controlGroup.management.labelPosition.above": "上", "controls.controlGroup.management.labelPosition.designSwitchLegend": "インラインと上記との間でラベル位置を切り替える", @@ -419,7 +419,7 @@ "controls.controlGroup.management.layout.large": "大", "controls.controlGroup.management.layout.medium": "中", "controls.controlGroup.management.layout.small": "小", - "controls.controlGroup.management.validate.subtitle": "データがないコントロール選択は自動的に無視されます。", + "controls.controlGroup.management.validate.tooltip": "データがないコントロール選択は自動的に無視されます。", "controls.controlGroup.management.validate.title": "ユーザー選択を検証", "controls.controlGroup.timeSlider.title": "時間スライダー", "controls.controlGroup.title": "コントロールグループ", @@ -3130,7 +3130,6 @@ "grouping.eventsTab.unit": "{totalCount, plural, =1 {イベント} other {イベント}}", "grouping.groupByPanelTitle": "最大{groupingLevelsCount}個のグループ分けを選択してください", "grouping.nullGroup.title": "選択されたグループ分けフィールド\"{selectedGroup}\"には、このグループ\"{unit}\"の値がありません。", - "grouping.total.unit": "{totalCount, plural, =1 {グループ} other {グループ}}", "grouping.additionalActions.takeAction": "アクションを実行", "grouping.alerts.label": "アラートのグループ化条件", "grouping.customGroupByOptionName": "カスタムフィールド", @@ -12683,8 +12682,6 @@ "xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "インデックスはデフォルトインジェストパイプライン\"{defaultPipeline}\"を使用しています。パイプラインをインデックス固有の構成にコピーし、カスタムインジェストと推論パイプラインを作成できるようにします。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex}以下の設定に行われた変更は参照専用です。これらの設定は、インデックスまたはパイプラインまで永続しません。", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "まず、Elasticsearch APIキーを生成します。この{apiKeyName}は、コネクターがドキュメントを作成された{indexName}インデックスにインデックスするための読み書き権限を有効にします。キーは安全な場所に保管してください。コネクターを構成するときに必要になります。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "コネクター{name}は、正常にSearchに接続されました。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "このステップでは、リポジトリを複製またはフォークし、生成されたAPIキーとコネクターIDを、関連付けられた{link}にコピーする必要があります。コネクターIDは、Searchに対するこのコネクターを特定します。サービスタイプは、コネクターが構成されているデータソースのタイプを決定します。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name}認証", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "コネクター{name}は、正常にSearchに接続されました。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "このセルフホスティングコネクターをカスタマイズしますか?独自のインフラでセルフマネージドされる{link}に変換します。Pythonフレームワークを使用してコードをカスタマイズしたい場合は、このコネクターを変換する必要があります。", @@ -12713,7 +12710,6 @@ "xpack.enterpriseSearch.content.searchIndices.deleteModal.delete.description": "このインデックスを削除すると、すべてのデータと{ingestionMethod}構成も削除されます。すべての関連付けられた検索アプリケーションは、このインデックスに格納されたどのデータにもアクセスできなくなります。", "xpack.enterpriseSearch.content.searchIndices.deleteModal.syncsWarning.indexNameDescription": "この操作は元に戻すことができません。確認するには{indexName}を入力してください。", "xpack.enterpriseSearch.content.searchIndices.deleteModal.title": "{indexName}を削除しますか?", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.tooltipContent": "検索用に最適化されたインデックスには、{code}がプレフィックスとして付けられます。これらは、クローラー、コネクター、インジェストAPIなどのインジェストメカニズムによって管理されます。", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "ドメイン\"{domainUrl}\"とすべての設定を削除しますか?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "Webクローラーエントリポイントが{entryPointValue}として設定されました", "xpack.enterpriseSearch.crawler.authenticationPanel.emptyPrompt.description": "{addAuthenticationButtonLabel}をクリックすると、保護されたコンテンツのクローリングに必要な資格情報を提供します", @@ -13870,7 +13866,6 @@ "xpack.enterpriseSearch.betaConnectorCalloutTitle": "ベータ版コネクター", "xpack.enterpriseSearch.betaLabel": "ベータ", "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.copy": "コピー", - "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.tryInConsole": "コンソールで試す", "xpack.enterpriseSearch.connector.connectorTypePanel.title": "コネクタータイプ", "xpack.enterpriseSearch.connector.connectorTypePanel.unknown.label": "不明", "xpack.enterpriseSearch.connector.ingestionStatus.title": "インジェスチョンステータス", @@ -13988,11 +13983,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "新しいAPIキーを生成すると、前のキーが無効になります。新しいAPIキーを生成しますか?この操作は元に戻せません。", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "Elasticsearch APIキーを生成", "xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "構成が更新されました", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "構成ファイル", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "構成したら、インフラでコネクターをデプロイします。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "今すぐ再確認", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "コネクターはSearchに接続されていません。構成のトラブルシューティングを行い、ページを更新してください。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "コネクターを待機しています", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "コネクター名と説明が更新されました", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "このコネクターの名前と説明を設定すると、他のユーザーやチームでもこのコネクターの目的がわかります。", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "名前と説明を保存", @@ -14010,27 +14000,12 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "ドキュメントレベルのセキュリティ", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "高度な構成", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "構成", - "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "名前と説明", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "構成要件の調査", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "ワンタイム同期をトリガーするか、繰り返し同期スケジュールを設定して、コネクターを確定します。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "スケジュールを設定して同期", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "ドキュメント", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "このコネクターは複数の認証方法をサポートします。正しい接続資格情報については、管理者に確認してください。", - "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "ワンタイム同期をトリガーするか、経時的にデータソースを同期し続ける繰り返し同期を設定して、コネクターを確定", "xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "スケジュールは正常に更新されました", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "コネクターをデプロイ", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "コネクタークライアントを強化", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "APIキーを生成", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "名前と説明", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "スケジュールを設定して同期", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "高度な構成", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "Dockerを使用せずにデプロイ", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "このコネクターは、お客様自身のインフラにデプロイする必要があります。", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "Dockerを使用してデプロイ", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "APIキーの管理", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "コネクターReadme", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "サポートとドキュメント", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "ドキュメンテーションを表示", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "JSON形式が無効です", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "詳細ルール", "xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "同期", @@ -14386,7 +14361,6 @@ "xpack.enterpriseSearch.content.searchIndices.name.columnTitle": "インデックス名", "xpack.enterpriseSearch.content.searchIndices.searchIndices.breadcrumb": "デフォルトのインデックス", "xpack.enterpriseSearch.content.searchIndices.searchIndices.includeHidden.label": "非表示のインデックスを表示", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.label": "検索用に最適化されたインデックスのみを表示", "xpack.enterpriseSearch.content.searchIndices.searchIndices.pageTitle": "デフォルトのインデックス", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.ariaLabel": "Elasticsearchインデックスをフィルター", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.placeHolder": "Elasticsearchインデックスをフィルター", @@ -28912,7 +28886,6 @@ "xpack.observabilityAiAssistant.suggestedFunctionEvent": "関数{functionName}を要求しました", "xpack.observabilityAiAssistant.userExecutedFunctionEvent": "関数{functionName}を実行しました", "xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "関数{functionName}を要求しました", - "xpack.observabilityAiAssistant.actionMenuItemLabel": "AI Assistant", "xpack.observabilityAiAssistant.appTitle": "オブザーバビリティAI Assistant", "xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "アシスタントに聞く", "xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "Elastic Assistantでデータに関するインサイトを得ましょう", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index a77723e37e7f..a602374950b1 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -408,7 +408,7 @@ "controls.controlGroup.management.discard.sub": "将放弃您对此控件所做的更改,是否确定要继续?", "controls.controlGroup.management.discard.title": "放弃更改?", "controls.controlGroup.management.flyoutTitle": "控制设置", - "controls.controlGroup.management.hierarchy.subtitle": "在一个控件中选择的内容会缩小下一个控件中可用选项的范围。控件将从左至右串接在一起。", + "controls.controlGroup.management.hierarchy.tooltip": "在一个控件中选择的内容会缩小下一个控件中可用选项的范围。控件将从左至右串接在一起。", "controls.controlGroup.management.hierarchy.title": "串接控件", "controls.controlGroup.management.labelPosition.above": "之上", "controls.controlGroup.management.labelPosition.designSwitchLegend": "在内联与之上之间切换标签位置", @@ -419,7 +419,7 @@ "controls.controlGroup.management.layout.large": "大", "controls.controlGroup.management.layout.medium": "中", "controls.controlGroup.management.layout.small": "小", - "controls.controlGroup.management.validate.subtitle": "自动忽略所有不会生成数据的控件选择。", + "controls.controlGroup.management.validate.tooltip": "自动忽略所有不会生成数据的控件选择。", "controls.controlGroup.management.validate.title": "验证用户选择", "controls.controlGroup.timeSlider.title": "时间滑块", "controls.controlGroup.title": "控件组", @@ -3129,7 +3129,6 @@ "grouping.eventsTab.unit": "{totalCount, plural, =1 {事件} other {事件}}", "grouping.groupByPanelTitle": "最多选择 {groupingLevelsCount} 个分组", "grouping.nullGroup.title": "选定分组依据字段 {selectedGroup} 缺少此 {unit} 组的值。", - "grouping.total.unit": "{totalCount, plural, =1 {组} other {组}}", "grouping.additionalActions.takeAction": "采取操作", "grouping.alerts.label": "告警分组依据", "grouping.customGroupByOptionName": "定制字段", @@ -12777,8 +12776,6 @@ "xpack.enterpriseSearch.content.index.pipelines.copyCustomizeCallout.description": "您的索引正使用默认采集管道 {defaultPipeline}。将该管道复制到特定于索引的配置中,以解锁创建定制采集和推理管道的功能。", "xpack.enterpriseSearch.content.index.pipelines.ingestFlyout.modalBodyAPIText": "{apiIndex}对以下设置所做的更改仅供参考。这些设置不会持续用于您的索引或管道。", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.description": "首先,生成一个 Elasticsearch API 密钥。此 {apiKeyName} 密钥将为连接器启用读取和写入权限,以便将文档索引到已创建的 {indexName} 索引。请将该密钥保存到安全位置,因为您需要它来配置连接器。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorConnected": "您的连接器 {name} 已成功连接到 Search。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.description.thirdParagraph": "在此步骤中,您需要克隆或分叉存储库,然后将生成的 API 密钥和连接器 ID 复制到关联的 {link}。连接器 ID 会将此连接器标识到 Search。此服务类型将决定要将连接器配置用于哪些类型的数据源。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.config.sourceSecurityDocumentationLinkLabel": "{name} 身份验证", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.connectorConnected": "您的连接器 {name} 已成功连接到 Search。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.convertConnector.description": "是否要自我托管此本机连接器?将其转换为将在您自己的基础设施上进行自我管理的 {link}。如果希望使用我们的 Python 框架定制代码,您需要转换此连接器。", @@ -12807,7 +12804,6 @@ "xpack.enterpriseSearch.content.searchIndices.deleteModal.delete.description": "删除此索引还会删除它的所有数据及其 {ingestionMethod} 配置。任何关联的搜索应用程序将无法再访问此索引中存储的任何数据。", "xpack.enterpriseSearch.content.searchIndices.deleteModal.syncsWarning.indexNameDescription": "此操作无法撤消。请键入 {indexName} 以确认。", "xpack.enterpriseSearch.content.searchIndices.deleteModal.title": "是否确定要删除 {indexName}", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.tooltipContent": "搜索优化索引以 {code} 为前缀。它们由网络爬虫、连接器或采集 API 等采集机制进行管理。", "xpack.enterpriseSearch.crawler.action.deleteDomain.confirmationPopupMessage": "确定要移除域“{domainUrl}”及其所有设置?", "xpack.enterpriseSearch.crawler.addDomainForm.entryPointLabel": "网络爬虫入口点已设置为 {entryPointValue}", "xpack.enterpriseSearch.crawler.authenticationPanel.emptyPrompt.description": "单击 {addAuthenticationButtonLabel} 以提供爬网受保护内容所需的凭据", @@ -13964,7 +13960,6 @@ "xpack.enterpriseSearch.betaConnectorCalloutTitle": "公测版连接器", "xpack.enterpriseSearch.betaLabel": "公测版", "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.copy": "复制", - "xpack.enterpriseSearch.component.devToolsConsoleCodeBlock.tryInConsole": "在 Console 中试用", "xpack.enterpriseSearch.connector.connectorTypePanel.title": "连接器类型", "xpack.enterpriseSearch.connector.connectorTypePanel.unknown.label": "未知", "xpack.enterpriseSearch.connector.ingestionStatus.title": "采集状态", @@ -14082,11 +14077,6 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.description": "生成新的 API 密钥将使之前的密钥失效。是否确定要生成新的 API 密钥?此操作无法撤消。", "xpack.enterpriseSearch.content.indices.configurationConnector.apiKey.confirmModal.title": "生成 Elasticsearch API 密钥", "xpack.enterpriseSearch.content.indices.configurationConnector.configuration.successToast.title": "已更新配置", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.configurationFileLink": "配置文件", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.connectorDeployedText": "配置后,请在您的基础设施上部署连接器。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnector.button.label": "立即重新检查", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorText": "您的连接器尚未连接到 Search。排除配置故障并刷新页面。", - "xpack.enterpriseSearch.content.indices.configurationConnector.connectorPackage.waitingForConnectorTitle": "等候您的连接器", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescription.successToast.title": "已更新连接器名称和描述", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.description": "通过命名和描述此连接器,您的同事和更广泛的团队将了解本连接器的用途。", "xpack.enterpriseSearch.content.indices.configurationConnector.nameAndDescriptionFlyout.saveButtonLabel": "保存名称和描述", @@ -14104,27 +14094,12 @@ "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.securityReminder.title": "文档级别安全性", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.advancedConfigurationTitle": "高级配置", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.configurationTitle": "配置", - "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.nameAndDescriptionTitle": "名称和描述", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnector.steps.researchConfigurationTitle": "研究配置要求", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.description": "通过触发一次时间同步或设置重复同步计划来最终确定您的连接器。", "xpack.enterpriseSearch.content.indices.configurationConnector.nativeConnectorAdvancedConfiguration.schedulingButtonLabel": "设置计划并同步", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.connectorDocumentationLinkLabel": "文档", "xpack.enterpriseSearch.content.indices.configurationConnector.researchConfiguration.description": "此连接器支持几种身份验证方法。请联系管理员获取正确的连接凭据。", - "xpack.enterpriseSearch.content.indices.configurationConnector.scheduleSync.description": "通过触发一次性同步或设置重复同步来最终确定您的连接器,以使数据源在一段时间内保持同步", "xpack.enterpriseSearch.content.indices.configurationConnector.scheduling.successToast.title": "计划已成功更新", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.deployConnector.title": "部署连接器", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.enhance.title": "增强连接器客户端", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.generateApiKey.title": "生成 API 密钥", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.nameAndDescriptionTitle": "名称和描述", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.button.label": "设置计划并同步", - "xpack.enterpriseSearch.content.indices.configurationConnector.steps.schedule.title": "高级配置", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.deploy.label": "不通过 Docker 部署", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.description": "您需要在自己的基础设施上部署此连接器。", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.dockerDeploy.label": "通过 Docker 部署", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.manageKeys.label": "管理 API 密钥", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.readme.label": "连接器自述文件", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.title": "支持和文档", - "xpack.enterpriseSearch.content.indices.configurationConnector.support.viewDocumentation.label": "查看文档", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.error": "JSON 格式无效", "xpack.enterpriseSearch.content.indices.connector.syncRules.advancedRules.title": "高级规则", "xpack.enterpriseSearch.content.indices.connectorScheduling.page.sync.label": "同步", @@ -14480,7 +14455,6 @@ "xpack.enterpriseSearch.content.searchIndices.name.columnTitle": "索引名称", "xpack.enterpriseSearch.content.searchIndices.searchIndices.breadcrumb": "Elasticsearch 索引", "xpack.enterpriseSearch.content.searchIndices.searchIndices.includeHidden.label": "显示隐藏的索引", - "xpack.enterpriseSearch.content.searchIndices.searchIndices.onlySearchOptimized.label": "仅显示搜索优化的索引", "xpack.enterpriseSearch.content.searchIndices.searchIndices.pageTitle": "Elasticsearch 索引", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.ariaLabel": "筛选 Elasticsearch 索引", "xpack.enterpriseSearch.content.searchIndices.searchIndices.searchBar.placeHolder": "筛选 Elasticsearch 索引", @@ -28896,7 +28870,6 @@ "xpack.observabilityAiAssistant.suggestedFunctionEvent": "已请求函数 {functionName}", "xpack.observabilityAiAssistant.userExecutedFunctionEvent": "已执行函数 {functionName}", "xpack.observabilityAiAssistant.userSuggestedFunctionEvent": "已请求函数 {functionName}", - "xpack.observabilityAiAssistant.actionMenuItemLabel": "AI 助手", "xpack.observabilityAiAssistant.appTitle": "Observability AI 助手", "xpack.observabilityAiAssistant.askAssistantButton.buttonLabel": "询问助手", "xpack.observabilityAiAssistant.askAssistantButton.popoverContent": "使用 Elastic 助手深入了解您的数据", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_alert_data_view.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_alert_data_view.test.tsx index c4c5dfd67fa8..b12d0454b997 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_alert_data_view.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/hooks/use_alert_data_view.test.tsx @@ -8,10 +8,11 @@ import { AlertConsumers } from '@kbn/rule-data-utils'; import { createStartServicesMock } from '../../common/lib/kibana/kibana_react.mock'; import type { ValidFeatureId } from '@kbn/rule-data-utils'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react-hooks/dom'; import { useAlertDataViews } from './use_alert_data_view'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; +import { waitFor } from '@testing-library/react'; const mockUseKibanaReturnValue = createStartServicesMock(); @@ -45,8 +46,7 @@ const wrapper = ({ children }: { children: Node }) => ( {children} ); -// FLAKY: https://github.com/elastic/kibana/issues/177250 -describe.skip('useAlertDataView', () => { +describe('useAlertDataView', () => { const observabilityAlertFeatureIds: ValidFeatureId[] = [ AlertConsumers.APM, AlertConsumers.INFRASTRUCTURE, @@ -70,94 +70,66 @@ describe.skip('useAlertDataView', () => { }); it('initially is loading and does not have data', async () => { - await act(async () => { - const mockedAsyncDataView = { - loading: true, - dataview: undefined, - }; - - const { result, waitForNextUpdate } = renderHook( - () => useAlertDataViews(observabilityAlertFeatureIds), - { - wrapper, - } - ); + const mockedAsyncDataView = { + loading: true, + dataview: undefined, + }; - await waitForNextUpdate(); - - expect(result.current).toEqual(mockedAsyncDataView); + const { result } = renderHook(() => useAlertDataViews(observabilityAlertFeatureIds), { + wrapper, }); + + await waitFor(() => expect(result.current).toEqual(mockedAsyncDataView)); }); it('fetch index names + fields for the provided o11y featureIds', async () => { - await act(async () => { - const { waitForNextUpdate } = renderHook( - () => useAlertDataViews(observabilityAlertFeatureIds), - { - wrapper, - } - ); - - await waitForNextUpdate(); - await waitForNextUpdate(); - - expect(fetchAlertIndexNames).toHaveBeenCalledTimes(1); - expect(fetchAlertFields).toHaveBeenCalledTimes(1); + renderHook(() => useAlertDataViews(observabilityAlertFeatureIds), { + wrapper, }); + + await waitFor(() => expect(fetchAlertIndexNames).toHaveBeenCalledTimes(1)); + expect(fetchAlertFields).toHaveBeenCalledTimes(1); }); it('only fetch index names for security featureId', async () => { - await act(async () => { - const { waitForNextUpdate } = renderHook(() => useAlertDataViews([AlertConsumers.SIEM]), { - wrapper, - }); - - await waitForNextUpdate(); - await waitForNextUpdate(); - - expect(fetchAlertIndexNames).toHaveBeenCalledTimes(1); - expect(fetchAlertFields).toHaveBeenCalledTimes(0); + renderHook(() => useAlertDataViews([AlertConsumers.SIEM]), { + wrapper, }); - }); - it('Do not fetch anything if security and o11y featureIds are mix together', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => useAlertDataViews([AlertConsumers.SIEM, AlertConsumers.LOGS]), - { - wrapper, - } - ); + await waitFor(() => expect(fetchAlertIndexNames).toHaveBeenCalledTimes(1)); + expect(fetchAlertFields).toHaveBeenCalledTimes(0); + }); - await waitForNextUpdate(); + it('Do not fetch anything if security and o11y featureIds are mixed together', async () => { + const { result } = renderHook( + () => useAlertDataViews([AlertConsumers.SIEM, AlertConsumers.LOGS]), + { + wrapper, + } + ); - expect(fetchAlertIndexNames).toHaveBeenCalledTimes(0); - expect(fetchAlertFields).toHaveBeenCalledTimes(0); + await waitFor(() => expect(result.current).toEqual({ loading: false, dataview: undefined, - }); - }); + }) + ); + expect(fetchAlertIndexNames).toHaveBeenCalledTimes(0); + expect(fetchAlertFields).toHaveBeenCalledTimes(0); }); - it('if fetch throw error return no data', async () => { + it('if fetch throws error return no data', async () => { fetchAlertIndexNames.mockRejectedValue('error'); - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => useAlertDataViews(observabilityAlertFeatureIds), - { - wrapper, - } - ); - - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useAlertDataViews(observabilityAlertFeatureIds), { + wrapper, + }); + await waitFor(() => expect(result.current).toEqual({ loading: false, dataview: undefined, - }); - }); + }) + ); }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts index 075f5a61a1d0..04ecb66e1692 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.test.ts @@ -69,6 +69,10 @@ const expectedTransformResult = [ 'A flag on the alert that indicates whether the alert status is changing repeatedly.', name: 'alert.flapping', }, + { + description: 'The number of consecutive runs that meet the rule conditions.', + name: 'alert.consecutiveMatches', + }, { description: 'The configured server.publicBaseUrl value or empty string if not configured.', name: 'kibanaBaseUrl', diff --git a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts index 50323690d5ee..4385db7521e2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/lib/action_variables.ts @@ -76,6 +76,7 @@ export enum AlertProvidedActionVariables { alertActionSubgroup = 'alert.actionSubgroup', alertFlapping = 'alert.flapping', kibanaBaseUrl = 'kibanaBaseUrl', + alertConsecutiveMatches = 'alert.consecutiveMatches', } export enum LegacyAlertProvidedActionVariables { @@ -224,6 +225,16 @@ function getAlwaysProvidedActionVariables(): ActionVariable[] { }), }); + result.push({ + name: AlertProvidedActionVariables.alertConsecutiveMatches, + description: i18n.translate( + 'xpack.triggersActionsUI.actionVariables.alertConsecutiveMatchesLabel', + { + defaultMessage: 'The number of consecutive runs that meet the rule conditions.', + } + ), + }); + result.push(AlertProvidedActionVariableDescriptions[AlertProvidedActionVariables.kibanaBaseUrl]); result.push({ diff --git a/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts b/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts index bf6811b4ad17..ab3c9ad93d54 100644 --- a/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts +++ b/x-pack/test/alerting_api_integration/security_and_spaces/group4/tests/alerting/alerts.ts @@ -1506,6 +1506,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: 1, duration: { us: 0 }, time_range: { gte: expectExpect.any(String) }, instance: { id: '1' }, @@ -1542,6 +1543,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: 1, duration: { us: 0 }, time_range: { gte: expectExpect.any(String) }, instance: { id: '2' }, @@ -1594,6 +1596,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: expectExpect.any(Number), duration: { us: expectExpect.any(Number) }, time_range: { gte: expectExpect.any(String) }, instance: { id: '1' }, @@ -1630,6 +1633,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: expectExpect.any(Number), duration: { us: expectExpect.any(Number) }, time_range: { gte: expectExpect.any(String) }, instance: { id: '2' }, @@ -1730,6 +1734,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: 1, duration: { us: 0 }, time_range: { gte: expectExpect.any(String) }, instance: { id: '1' }, @@ -1766,6 +1771,7 @@ instanceStateValue: true uuid: expectExpect.any(String), tags: ['tag-A', 'tag-B'], }, + consecutive_matches: 1, duration: { us: 0 }, time_range: { gte: expectExpect.any(String) }, instance: { id: '2' }, diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts index c900a08311ad..991ed513ee98 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_alert_delay.ts @@ -31,6 +31,7 @@ import { EVENT_ACTION, EVENT_KIND, SPACE_IDS, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { RuleNotifyWhen } from '@kbn/alerting-plugin/common'; import { ES_TEST_INDEX_NAME, ESTestIndexTool } from '@kbn/alerting-api-integration-helpers'; @@ -248,6 +249,8 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ expect(source[EVENT_KIND]).to.equal('signal'); // tags should equal rule tags because rule type doesn't set any tags expect(source.tags).to.eql(['foo']); + // alert consecutive matches should match the active count + expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(3); // -------------------------- // RUN 4 - 1 active alert @@ -300,6 +303,8 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ expect(source[EVENT_KIND]).to.eql(run3Source[EVENT_KIND]); expect(source[ALERT_WORKFLOW_STATUS]).to.eql(run3Source[ALERT_WORKFLOW_STATUS]); expect(source[ALERT_TIME_RANGE]?.gte).to.equal(run3Source[ALERT_TIME_RANGE]?.gte); + // alert consecutive matches should match the active count + expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(4); // -------------------------- // RUN 5 - 1 recovered alert @@ -357,6 +362,8 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ expect(source[ALERT_TIME_RANGE]?.gte).to.equal(run3Source[ALERT_TIME_RANGE]?.gte); // time_range.lte should be set to end time expect(source[ALERT_TIME_RANGE]?.lte).to.equal(source[ALERT_END]); + // alert consecutive matches should match the active count + expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(0); // -------------------------- // RUN 6 - 0 new alerts @@ -548,6 +555,8 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ expect(source[EVENT_KIND]).to.equal('signal'); // tags should equal rule tags because rule type doesn't set any tags expect(source.tags).to.eql(['foo']); + // alert consecutive matches should match the active count + expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(3); // -------------------------- // RUN 4 - 1 active alert @@ -608,6 +617,8 @@ export default function createAlertsAsDataAlertDelayInstallResourcesTest({ expect(source[EVENT_KIND]).to.eql(run3Source[EVENT_KIND]); expect(source[ALERT_WORKFLOW_STATUS]).to.eql(run3Source[ALERT_WORKFLOW_STATUS]); expect(source[ALERT_TIME_RANGE]?.gte).to.equal(run3Source[ALERT_TIME_RANGE]?.gte); + // alert consecutive matches should match the active count + expect(source[ALERT_CONSECUTIVE_MATCHES]).to.equal(4); }); }); diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts index ea53cbe33c98..d13d321280aa 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group4/alerts_as_data/alerts_as_data_conflicts.ts @@ -20,6 +20,7 @@ import { ALERT_STATUS, ALERT_WORKFLOW_STATUS, ALERT_WORKFLOW_TAGS, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../../../common/ftr_provider_context'; import { Spaces } from '../../../../scenarios'; @@ -238,6 +239,9 @@ function compareAlertDocs( expect(get(updatedAlert, 'kibana.alert.workflow_status')).to.eql( get(DocUpdate, 'kibana.alert.workflow_status') ); + expect(get(updatedAlert, 'kibana.alert.consecutive_matches')).to.eql( + get(DocUpdate, 'kibana.alert.consecutive_matches') + 1 + ); expect(get(initialAlert, 'kibana.alert.status')).to.be('active'); expect(get(updatedAlert, 'kibana.alert.status')).to.be('untracked'); @@ -264,6 +268,7 @@ const DocUpdate = { [ALERT_WORKFLOW_TAGS]: ['fee', 'fi', 'fo', 'fum'], [ALERT_CASE_IDS]: ['123', '456', '789'], [ALERT_STATUS]: 'untracked', + [ALERT_CONSECUTIVE_MATCHES]: 1, }; const SkipFields = [ @@ -280,6 +285,7 @@ const SkipFields = [ 'kibana.alert.case_ids', 'kibana.alert.workflow_tags', 'kibana.alert.workflow_status', + 'kibana.alert.consecutive_matches', ]; function log(message: string) { diff --git a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts index 4f6333238fa5..4af49a399161 100644 --- a/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts +++ b/x-pack/test/api_integration/apis/management/advanced_settings/feature_controls.ts @@ -78,8 +78,7 @@ export default function featureControlsTests({ getService }: FtrProviderContext) .catch((error: any) => ({ error, response: undefined })); } - // FLAKY: https://github.com/elastic/kibana/issues/176445 - describe.skip('feature controls', () => { + describe('feature controls', () => { it(`settings can be saved with the advancedSettings: ["all"] feature privilege`, async () => { const username = 'settings_all'; const roleName = 'settings_all'; diff --git a/x-pack/test/api_integration/apis/management/index_management/component_templates.ts b/x-pack/test/api_integration/apis/management/index_management/component_templates.ts index 3f2f9310faa0..bb37e04941b7 100644 --- a/x-pack/test/api_integration/apis/management/index_management/component_templates.ts +++ b/x-pack/test/api_integration/apis/management/index_management/component_templates.ts @@ -104,7 +104,6 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await getOneComponentTemplate(COMPONENT_NAME).expect(200); expect(body).to.eql({ - isDeprecated: false, name: COMPONENT_NAME, ...COMPONENT, _kbnMeta: { @@ -282,6 +281,35 @@ export default function ({ getService }: FtrProviderContext) { }, }); }); + + it('should allow a deprecated component template to be updated', async () => { + const deprecatedTemplateName = 'deprecated_component_template'; + const deprecatedTemplate = { + template: {}, + deprecated: true, + }; + try { + await addComponentTemplate( + { body: deprecatedTemplate, name: deprecatedTemplateName }, + CACHE_TEMPLATES + ); + } catch (err) { + log.debug('[Setup error] Error creating component template'); + throw err; + } + const { body } = await updateComponentTemplate(deprecatedTemplateName, { + ...deprecatedTemplate, + version: 1, + _kbnMeta: { + usedBy: [], + isManaged: false, + }, + }).expect(200); + + expect(body).to.eql({ + acknowledged: true, + }); + }); }); describe('Delete', () => { diff --git a/x-pack/test/api_integration/apis/management/index_management/lib/templates.helpers.ts b/x-pack/test/api_integration/apis/management/index_management/lib/templates.helpers.ts index 2ea61cd79cb5..c64198ae3adc 100644 --- a/x-pack/test/api_integration/apis/management/index_management/lib/templates.helpers.ts +++ b/x-pack/test/api_integration/apis/management/index_management/lib/templates.helpers.ts @@ -51,6 +51,7 @@ export function templatesHelpers(getService: FtrProviderContext['getService']) { type: 'default', hasDatastream: false, }, + allowAutoCreate: 'NO_OVERWRITE', }; if (isLegacy) { diff --git a/x-pack/test/api_integration/apis/management/index_management/templates.ts b/x-pack/test/api_integration/apis/management/index_management/templates.ts index 6d0e79993d04..66d6f34baa64 100644 --- a/x-pack/test/api_integration/apis/management/index_management/templates.ts +++ b/x-pack/test/api_integration/apis/management/index_management/templates.ts @@ -99,6 +99,7 @@ export default function ({ getService }: FtrProviderContext) { 'ignoreMissingComponentTemplates', 'version', '_kbnMeta', + 'allowAutoCreate', ].sort(); expect(Object.keys(indexTemplateFound).sort()).to.eql(expectedKeys); @@ -119,6 +120,7 @@ export default function ({ getService }: FtrProviderContext) { 'order', 'version', '_kbnMeta', + 'allowAutoCreate', 'composedOf', 'ignoreMissingComponentTemplates', ].sort(); @@ -145,6 +147,7 @@ export default function ({ getService }: FtrProviderContext) { 'dataStream', 'version', '_kbnMeta', + 'allowAutoCreate', ].sort(); expect(Object.keys(templateWithDSL).sort()).to.eql(expectedWithDSLKeys); @@ -168,6 +171,7 @@ export default function ({ getService }: FtrProviderContext) { 'ignoreMissingComponentTemplates', 'version', '_kbnMeta', + 'allowAutoCreate', ].sort(); expect(Object.keys(templateWithILM).sort()).to.eql(expectedWithILMKeys); @@ -191,6 +195,7 @@ export default function ({ getService }: FtrProviderContext) { 'priority', 'version', '_kbnMeta', + 'allowAutoCreate', ].sort(); const expectedTemplateKeys = ['aliases', 'mappings', 'settings'].sort(); @@ -211,6 +216,7 @@ export default function ({ getService }: FtrProviderContext) { 'order', 'version', '_kbnMeta', + 'allowAutoCreate', 'composedOf', 'ignoreMissingComponentTemplates', ].sort(); @@ -361,6 +367,22 @@ export default function ({ getService }: FtrProviderContext) { // one of the item of the cause array should point to our script expect(body.attributes.causes.join(',')).contain('"hello with error'); }); + + it('should update a deprecated index template', async () => { + const templateName = `deprecated_template-${getRandomString()}`; + const indexTemplate: TemplateDeserialized = { + _kbnMeta: { hasDatastream: false, type: 'default' }, + name: templateName, + indexPatterns: [getRandomString()], + template: {}, + deprecated: true, + allowAutoCreate: 'TRUE', + }; + + await createTemplate(indexTemplate).expect(200); + + await updateTemplate({ ...indexTemplate }, templateName).expect(200); + }); }); describe('delete', () => { diff --git a/x-pack/test/apm_api_integration/tests/correlations/latency.spec.ts b/x-pack/test/apm_api_integration/tests/correlations/latency.spec.ts index a4edfd1d5ab0..bceea736f553 100644 --- a/x-pack/test/apm_api_integration/tests/correlations/latency.spec.ts +++ b/x-pack/test/apm_api_integration/tests/correlations/latency.spec.ts @@ -107,7 +107,8 @@ export default function ApiTest({ getService }: FtrProviderContext) { } ); - registry.when( + // FLAKY: https://github.com/elastic/kibana/issues/175855 + registry.when.skip( 'correlations latency with data and opbeans-node args', { config: 'trial', archives: ['8.0.0'] }, () => { diff --git a/x-pack/test/cloud_security_posture_functional/pages/findings_grouping.ts b/x-pack/test/cloud_security_posture_functional/pages/findings_grouping.ts index f0434c37b711..09f200913773 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/findings_grouping.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/findings_grouping.ts @@ -139,7 +139,6 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { describe('Findings Page - Grouping', function () { this.tags(['cloud_security_posture_findings_grouping']); let findings: typeof pageObjects.findings; - // let groupSelector: ReturnType; before(async () => { await kibanaServer.savedObjects.clean({ @@ -219,7 +218,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('3 groups'); + expect(groupCount).to.be('3 resources'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('4 findings'); @@ -234,7 +233,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('4 groups'); + expect(groupCount).to.be('4 rules'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('4 findings'); @@ -293,7 +292,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('3 groups'); + expect(groupCount).to.be('2 cloud accounts'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('4 findings'); @@ -350,7 +349,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('3 groups'); + expect(groupCount).to.be('2 kubernetes clusters'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('4 findings'); @@ -413,7 +412,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await groupRow.getVisibleText()).to.contain(data[0].resource.name); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('1 group'); + expect(groupCount).to.be('1 resource'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('1 finding'); @@ -426,7 +425,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('3 groups'); + expect(groupCount).to.be('3 resources'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('4 findings'); @@ -442,7 +441,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await groupRow.getVisibleText()).to.contain(data[0].resource.name); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('1 group'); + expect(groupCount).to.be('1 resource'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('1 finding'); @@ -450,7 +449,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.setQuery(''); await queryBar.submitQuery(); - expect(await grouping.getGroupCount()).to.be('3 groups'); + expect(await grouping.getGroupCount()).to.be('3 resources'); expect(await grouping.getUnitCount()).to.be('4 findings'); }); }); @@ -507,7 +506,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be(`${resourceGroupCount + 1} groups`); + expect(groupCount).to.be(`${resourceGroupCount + 1} resources`); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be(`${findingsCount + 1} findings`); @@ -534,7 +533,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.header.waitUntilLoadingHasFinished(); const groupCountAfterMute = await grouping.getGroupCount(); - expect(groupCountAfterMute).to.be(`${resourceGroupCount} groups`); + expect(groupCountAfterMute).to.be(`${resourceGroupCount} resources`); const unitCountAfterMute = await grouping.getUnitCount(); expect(unitCountAfterMute).to.be(`${findingsCount} findings`); diff --git a/x-pack/test/cloud_security_posture_functional/pages/vulnerabilities_grouping.ts b/x-pack/test/cloud_security_posture_functional/pages/vulnerabilities_grouping.ts index aa9ece3bbf9a..e56178cbf2fb 100644 --- a/x-pack/test/cloud_security_posture_functional/pages/vulnerabilities_grouping.ts +++ b/x-pack/test/cloud_security_posture_functional/pages/vulnerabilities_grouping.ts @@ -84,7 +84,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('2 groups'); + expect(groupCount).to.be('2 cloud accounts'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('2 vulnerabilities'); @@ -124,7 +124,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('2 groups'); + expect(groupCount).to.be('2 CVEs'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('2 vulnerabilities'); @@ -165,7 +165,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('2 groups'); + expect(groupCount).to.be('2 resources'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('2 vulnerabilities'); @@ -194,7 +194,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await groupRow.getVisibleText()).to.contain(resourceName1); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('1 group'); + expect(groupCount).to.be('1 resource'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('1 vulnerability'); @@ -207,7 +207,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const grouping = await findings.findingsGrouping(); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('2 groups'); + expect(groupCount).to.be('2 resources'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('2 vulnerabilities'); @@ -223,7 +223,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { expect(await groupRow.getVisibleText()).to.contain(resourceName1); const groupCount = await grouping.getGroupCount(); - expect(groupCount).to.be('1 group'); + expect(groupCount).to.be('1 resource'); const unitCount = await grouping.getUnitCount(); expect(unitCount).to.be('1 vulnerability'); @@ -231,7 +231,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await queryBar.setQuery(''); await queryBar.submitQuery(); - expect(await grouping.getGroupCount()).to.be('2 groups'); + expect(await grouping.getGroupCount()).to.be('2 resources'); expect(await grouping.getUnitCount()).to.be('2 vulnerabilities'); }); }); diff --git a/x-pack/test/fleet_api_integration/apis/agents/list.ts b/x-pack/test/fleet_api_integration/apis/agents/list.ts index 72c333753bde..c6fd4a0a1024 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/list.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/list.ts @@ -46,13 +46,27 @@ export default function ({ getService }: FtrProviderContext) { }); }); - it.skip('should return a 200 if a user with the fleet all try to access the list', async () => { - await supertest + it('should return a 200 if a user with the fleet all try to access the list', async () => { + await supertestWithoutAuth .get(`/api/fleet/agents`) .auth(testUsers.fleet_all_only.username, testUsers.fleet_all_only.password) .expect(200); }); + it('should return a 200 if a user with the fleet read try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agents`) + .auth(testUsers.fleet_read_only.username, testUsers.fleet_read_only.password) + .expect(200); + }); + + it('should return a 200 if a user with the fleet agents read try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agents`) + .auth(testUsers.fleet_agents_read_only.username, testUsers.fleet_agents_read_only.password) + .expect(200); + }); + it('should not return the list of agents when requesting as a user without fleet permissions', async () => { await supertestWithoutAuth .get(`/api/fleet/agents`) @@ -67,12 +81,6 @@ export default function ({ getService }: FtrProviderContext) { expect(apiResponse.total).to.eql(4); }); - it('should return the list of agents when requesting as a user with fleet read permissions', async () => { - const { body: apiResponse } = await supertest.get(`/api/fleet/agents`).expect(200); - expect(apiResponse).to.have.keys('page', 'total', 'items', 'list'); - expect(apiResponse.total).to.eql(4); - }); - it('should return 200 if the passed kuery is valid', async () => { await supertest .get(`/api/fleet/agent_status?kuery=fleet-agents.local_metadata.host.hostname:test`) diff --git a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts index 8b0e5ca8c4e7..0a7ab7b8bcf9 100644 --- a/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/download_sources/crud.ts @@ -9,10 +9,13 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../api_integration/ftr_provider_context'; import { skipIfNoDockerRegistry } from '../../helpers'; import { setupFleetAndAgents } from '../agents/services'; +import { testUsers } from '../test_users'; export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); @@ -56,6 +59,40 @@ export default function (providerContext: FtrProviderContext) { host: 'https://artifacts.elastic.co/downloads/', }); }); + + it('should return a 200 if a user with the fleet all try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agent_download_sources`) + .auth(testUsers.fleet_all_only.username, testUsers.fleet_all_only.password) + .expect(200); + }); + + it('should return a 200 if a user with the fleet read try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agent_download_sources`) + .auth(testUsers.fleet_read_only.username, testUsers.fleet_read_only.password) + .expect(200); + }); + + it('should return a 200 if a user with the fleet settings read try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agent_download_sources`) + .auth( + testUsers.fleet_settings_read_only.username, + testUsers.fleet_settings_read_only.password + ) + .expect(200); + }); + + it('should return a 403 if a user without the fleet settings read try to access the list', async () => { + await supertestWithoutAuth + .get(`/api/fleet/agent_download_sources`) + .auth( + testUsers.fleet_minimal_all_only.username, + testUsers.fleet_minimal_all_only.password + ) + .expect(403); + }); }); describe('GET /agent_download_sources/{sourceId}', () => { diff --git a/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts index 63dfd7690e88..5d345fb2ae8a 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts +++ b/x-pack/test/fleet_api_integration/apis/epm/install_custom.ts @@ -17,6 +17,7 @@ export default function (providerContext: FtrProviderContext) { const { getService } = providerContext; const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); + const esClient = getService('es'); const uninstallPackage = async () => { await supertest @@ -99,6 +100,472 @@ export default function (providerContext: FtrProviderContext) { expect(installation.attributes.install_status).to.be('installed'); }); + it('Correctly sets up index templates to create an ECS compliant mapping', async () => { + await supertest + .post(`/api/fleet/epm/custom_integrations`) + .set('kbn-xsrf', 'xxxx') + .type('application/json') + .send({ + force: true, + integrationName: INTEGRATION_NAME, + datasets: [{ name: `${INTEGRATION_NAME}.access`, type: 'logs' }], + }) + .expect(200); + + const indexName = `logs-${INTEGRATION_NAME}.access-000001`; + + // Actually index data to see if the mapping comes out as expected based on the component template stack + await esClient.index({ + index: indexName, + document: { + 'cloud.account.id': 'xyz', + 'cloud.availability_zone': 'xyz', + 'cloud.instance.id': 'xyz', + 'cloud.instance.name': 'xyz', + 'cloud.machine.type': 'xyz', + 'cloud.provider': 'xyz', + 'cloud.region': 'xyz', + 'cloud.project.id': 'xyz', + 'cloud.image.id': 'xyz', + 'container.id': 'xyz', + 'container.image.name': 'xyz', + 'container.labels': { foo_id: 'beef42' }, + 'container.name': 'xyz', + 'host.architecture': 'xyz', + 'host.domain': 'xyz', + 'host.hostname': 'xyz', + 'host.id': 'xyz', + 'host.ip': '1.1.1.1', + 'host.mac': 'xyz', + 'host.name': 'xyz', + 'host.os.family': 'xyz', + 'host.os.kernel': 'xyz', + 'host.os.name': 'xyz', + 'host.os.platform': 'xyz', + 'host.os.version': 'xyz', + 'host.os.type': 'xyz', + 'host.os.containerized': true, + 'host.os.build': 'xyz', + 'host.os.codename': 'xyz', + 'input.type': 'xyz', + 'log.offset': 123, + 'data_stream.type': 'logs', + }, + }); + const response = await esClient.indices.getMapping({ index: indexName }); + + expect(Object.values(response)[0].mappings).to.eql({ + _meta: { + managed_by: 'fleet', + managed: true, + package: { + name: 'my_nginx', + }, + }, + _data_stream_timestamp: { + enabled: true, + }, + dynamic_templates: [ + { + ecs_timestamp: { + match: '@timestamp', + mapping: { + ignore_malformed: false, + type: 'date', + }, + }, + }, + { + ecs_message_match_only_text: { + path_match: ['message', '*.message'], + unmatch_mapping_type: 'object', + mapping: { + type: 'match_only_text', + }, + }, + }, + { + ecs_ip: { + path_match: ['ip', '*.ip', '*_ip'], + match_mapping_type: 'string', + mapping: { + type: 'ip', + }, + }, + }, + { + ecs_wildcard: { + path_match: ['*.io.text', '*.message_id', '*registry.data.strings', '*url.path'], + unmatch_mapping_type: 'object', + mapping: { + type: 'wildcard', + }, + }, + }, + { + ecs_path_match_wildcard_and_match_only_text: { + path_match: ['*.body.content', '*url.full', '*url.original'], + unmatch_mapping_type: 'object', + mapping: { + fields: { + text: { + type: 'match_only_text', + }, + }, + type: 'wildcard', + }, + }, + }, + { + ecs_match_wildcard_and_match_only_text: { + match: ['*command_line', '*stack_trace'], + unmatch_mapping_type: 'object', + mapping: { + fields: { + text: { + type: 'match_only_text', + }, + }, + type: 'wildcard', + }, + }, + }, + { + ecs_path_match_keyword_and_match_only_text: { + path_match: [ + '*.title', + '*.executable', + '*.name', + '*.working_directory', + '*.full_name', + '*file.path', + '*file.target_path', + '*os.full', + 'email.subject', + 'vulnerability.description', + 'user_agent.original', + ], + unmatch_mapping_type: 'object', + mapping: { + fields: { + text: { + type: 'match_only_text', + }, + }, + type: 'keyword', + }, + }, + }, + { + ecs_date: { + path_match: [ + '*.timestamp', + '*_timestamp', + '*.not_after', + '*.not_before', + '*.accessed', + 'created', + '*.created', + '*.installed', + '*.creation_date', + '*.ctime', + '*.mtime', + 'ingested', + '*.ingested', + '*.start', + '*.end', + ], + unmatch_mapping_type: 'object', + mapping: { + type: 'date', + }, + }, + }, + { + ecs_path_match_float: { + path_match: ['*.score.*', '*_score*'], + path_unmatch: '*.version', + unmatch_mapping_type: 'object', + mapping: { + type: 'float', + }, + }, + }, + { + ecs_usage_double_scaled_float: { + path_match: '*.usage', + match_mapping_type: ['double', 'long', 'string'], + mapping: { + scaling_factor: 1000, + type: 'scaled_float', + }, + }, + }, + { + ecs_geo_point: { + path_match: ['location', '*.location'], + mapping: { + type: 'geo_point', + }, + }, + }, + { + ecs_flattened: { + path_match: ['*structured_data', '*exports', '*imports'], + match_mapping_type: 'object', + mapping: { + type: 'flattened', + }, + }, + }, + { + all_strings_to_keywords: { + match_mapping_type: 'string', + mapping: { + ignore_above: 1024, + type: 'keyword', + }, + }, + }, + { + strings_as_keyword: { + match_mapping_type: 'string', + mapping: { + ignore_above: 1024, + type: 'keyword', + }, + }, + }, + ], + date_detection: false, + properties: { + '@timestamp': { + type: 'date', + ignore_malformed: false, + }, + cloud: { + properties: { + account: { + properties: { + id: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + availability_zone: { + type: 'keyword', + ignore_above: 1024, + }, + image: { + properties: { + id: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + instance: { + properties: { + id: { + type: 'keyword', + ignore_above: 1024, + }, + name: { + type: 'keyword', + fields: { + text: { + type: 'match_only_text', + }, + }, + }, + }, + }, + machine: { + properties: { + type: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + project: { + properties: { + id: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + provider: { + type: 'keyword', + ignore_above: 1024, + }, + region: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + container: { + properties: { + id: { + type: 'keyword', + ignore_above: 1024, + }, + image: { + properties: { + name: { + type: 'keyword', + fields: { + text: { + type: 'match_only_text', + }, + }, + }, + }, + }, + labels: { + properties: { + foo_id: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + name: { + type: 'keyword', + fields: { + text: { + type: 'match_only_text', + }, + }, + }, + }, + }, + data_stream: { + properties: { + dataset: { + type: 'constant_keyword', + }, + namespace: { + type: 'constant_keyword', + }, + type: { + type: 'constant_keyword', + value: 'logs', + }, + }, + }, + event: { + properties: { + agent_id_status: { + type: 'keyword', + ignore_above: 1024, + }, + ingested: { + type: 'date', + format: 'strict_date_time_no_millis||strict_date_optional_time||epoch_millis', + }, + }, + }, + host: { + properties: { + architecture: { + type: 'keyword', + ignore_above: 1024, + }, + domain: { + type: 'keyword', + ignore_above: 1024, + }, + hostname: { + type: 'keyword', + ignore_above: 1024, + }, + mac: { + type: 'keyword', + ignore_above: 1024, + }, + id: { + type: 'keyword', + ignore_above: 1024, + }, + ip: { + type: 'ip', + }, + name: { + type: 'keyword', + fields: { + text: { + type: 'match_only_text', + }, + }, + }, + os: { + properties: { + build: { + type: 'keyword', + ignore_above: 1024, + }, + codename: { + type: 'keyword', + ignore_above: 1024, + }, + containerized: { + type: 'boolean', + }, + family: { + type: 'keyword', + ignore_above: 1024, + }, + kernel: { + type: 'keyword', + ignore_above: 1024, + }, + name: { + type: 'keyword', + fields: { + text: { + type: 'match_only_text', + }, + }, + }, + platform: { + type: 'keyword', + ignore_above: 1024, + }, + type: { + type: 'keyword', + ignore_above: 1024, + }, + version: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + }, + }, + input: { + properties: { + type: { + type: 'keyword', + ignore_above: 1024, + }, + }, + }, + log: { + properties: { + offset: { + type: 'long', + }, + }, + }, + }, + }); + }); + it('Throws an error when there is a naming collision with a current package installation', async () => { await supertest .post(`/api/fleet/epm/custom_integrations`) diff --git a/x-pack/test/fleet_api_integration/apis/test_users.ts b/x-pack/test/fleet_api_integration/apis/test_users.ts index d8800003bda0..b5546d149eb9 100644 --- a/x-pack/test/fleet_api_integration/apis/test_users.ts +++ b/x-pack/test/fleet_api_integration/apis/test_users.ts @@ -21,6 +21,46 @@ export const testUsers: { username: 'fleet_all_int_all', password: 'changeme', }, + fleet_read_only: { + permissions: { + feature: { + fleetv2: ['read'], + }, + spaces: ['*'], + }, + username: 'fleet_read_only', + password: 'changeme', + }, + fleet_minimal_all_only: { + permissions: { + feature: { + fleetv2: ['minimal_all'], + }, + spaces: ['*'], + }, + username: 'fleet_minimal_all_only', + password: 'changeme', + }, + fleet_agents_read_only: { + permissions: { + feature: { + fleetv2: ['agents_read'], + }, + spaces: ['*'], + }, + username: 'fleet_agents_read_only', + password: 'changeme', + }, + fleet_settings_read_only: { + permissions: { + feature: { + fleetv2: ['settings_read'], + }, + spaces: ['*'], + }, + username: 'fleet_settings_read_only', + password: 'changeme', + }, setup: { permissions: { feature: { diff --git a/x-pack/test/fleet_api_integration/config.base.ts b/x-pack/test/fleet_api_integration/config.base.ts index ccdf9d03ba3a..5626ee4d85d6 100644 --- a/x-pack/test/fleet_api_integration/config.base.ts +++ b/x-pack/test/fleet_api_integration/config.base.ts @@ -75,6 +75,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { 'outputSecretsStorage', 'agentTamperProtectionEnabled', 'enableStrictKQLValidation', + 'subfeaturePrivileges', ])}`, `--logging.loggers=${JSON.stringify([ ...getKibanaCliLoggers(xPackAPITestsConfig.get('kbnTestServer.serverArgs')), diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts index a8dd8c7aaa76..a29b61fec560 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_dashboard_drilldown.ts @@ -313,8 +313,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboardControls.rangeSliderWaitForLoading(rangeSliderControl); // wait for range slider to respond to options list selections before proceeding await PageObjects.dashboardControls.rangeSliderSetLowerBound(rangeSliderControl, '1000'); await PageObjects.dashboardControls.rangeSliderSetUpperBound(rangeSliderControl, '15000'); - await PageObjects.dashboard.clickQuickSave(); await PageObjects.dashboard.waitForRenderComplete(); + await PageObjects.dashboard.clickQuickSave(); + await PageObjects.header.waitUntilLoadingHasFinished(); /** Destination Dashboard */ await createControls(dashboardDrilldownsManage.DASHBOARD_WITH_AREA_CHART_NAME, [ diff --git a/x-pack/test/functional/apps/dataset_quality/config.ts b/x-pack/test/functional/apps/dataset_quality/config.ts new file mode 100644 index 000000000000..c7e72325d6c0 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/config.ts @@ -0,0 +1,42 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext, GenericFtrProviderContext } from '@kbn/test'; +import { createLogger, LogLevel, LogsSynthtraceEsClient } from '@kbn/apm-synthtrace'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default async function createTestConfig({ readConfigFile }: FtrConfigProviderContext) { + const functionalConfig = await readConfigFile(require.resolve('../../config.base.js')); + const services = functionalConfig.get('services'); + const pageObjects = functionalConfig.get('pageObjects'); + + return { + ...functionalConfig.getAll(), + testFiles: [require.resolve('.')], + services: { + ...services, + logSynthtraceEsClient: (context: FtrProviderContext) => { + return new LogsSynthtraceEsClient({ + client: context.getService('es'), + logger: createLogger(LogLevel.info), + refreshAfterIndex: true, + }); + }, + }, + pageObjects, + }; +} + +export type CreateTestConfig = Awaited>; + +export type DatasetQualityServices = CreateTestConfig['services']; +export type DatasetQualityPageObject = CreateTestConfig['pageObjects']; + +export type DatasetQualityFtrProviderContext = GenericFtrProviderContext< + DatasetQualityServices, + DatasetQualityPageObject +>; diff --git a/x-pack/test/functional/apps/dataset_quality/data/index.ts b/x-pack/test/functional/apps/dataset_quality/data/index.ts new file mode 100644 index 000000000000..68b59f317407 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/data/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './logs_data'; diff --git a/x-pack/test/functional/apps/dataset_quality/data/logs_data.ts b/x-pack/test/functional/apps/dataset_quality/data/logs_data.ts new file mode 100644 index 000000000000..f48625686f0a --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/data/logs_data.ts @@ -0,0 +1,158 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { generateLongId, generateShortId, log, timerange } from '@kbn/apm-synthtrace-client'; +import moment from 'moment'; + +enum LogLevel { + INFO = 'info', + DEBUG = 'debug', + ERROR = 'error', +} +interface MessageWithLevel { + message: string; + level: LogLevel; +} +interface Cluster { + clusterId: string; + clusterName: string; +} + +export function getLogsForDataset({ + dataset, + to, + count = 1, + isMalformed = false, +}: { + dataset: string; + to: moment.MomentInput; + count?: number; + isMalformed?: boolean; +}) { + return timerange(moment(to).subtract(count, 'minute'), moment(to)) + .interval('1m') + .rate(1) + .generator((timestamp) => { + return Array(count) + .fill(0) + .flatMap((_, index) => [ + createLogRecord( + timestamp, + dataset, + MESSAGE_LOG_LEVELS[index % MESSAGE_LOG_LEVELS.length], + SERVICE_NAMES[index % SERVICE_NAMES.length], + CLUSTER[index % CLUSTER.length], + CLOUD_PROVIDERS[index % CLOUD_PROVIDERS.length], + CLOUD_REGION[index % CLOUD_REGION.length], + isMalformed + ), + ]); + }); +} + +export function getInitialTestLogs({ to, count = 1 }: { to: string; count?: number }) { + return timerange(moment(to).subtract(count, 'minute'), moment(to)) + .interval('1m') + .rate(1) + .generator((timestamp) => { + return Array(count) + .fill(0) + .flatMap((_, index) => [ + createLogRecord( + timestamp, + datasetNames[0], + MESSAGE_LOG_LEVELS[0], + SERVICE_NAMES[0], + CLUSTER[0], + CLOUD_PROVIDERS[0], + CLOUD_REGION[0], + false + ), + createLogRecord( + timestamp, + datasetNames[1], + MESSAGE_LOG_LEVELS[1], + SERVICE_NAMES[1], + CLUSTER[1], + CLOUD_PROVIDERS[1], + CLOUD_REGION[1], + false + ), + createLogRecord( + timestamp, + datasetNames[2], + MESSAGE_LOG_LEVELS[2], + SERVICE_NAMES[2], + CLUSTER[2], + CLOUD_PROVIDERS[2], + CLOUD_REGION[2], + false + ), + ]); + }); +} + +export function createLogRecord( + timestamp: number, + dataset: string, + msg: MessageWithLevel, + serviceName: string, + cluster: Cluster, + cloudProvider: string, + cloudRegion: string, + isMalformed = false +): ReturnType { + return log + .create() + .dataset(dataset) + .message(msg.message) + .logLevel(isMalformed ? MORE_THAN_1024_CHARS : msg.level) + .service(serviceName) + .namespace(defaultNamespace) + .defaults({ + 'trace.id': generateShortId(), + 'agent.name': 'synth-agent', + 'orchestrator.cluster.name': cluster.clusterName, + 'orchestrator.cluster.id': cluster.clusterId, + 'orchestrator.resource.id': generateShortId(), + 'cloud.provider': cloudProvider, + 'cloud.region': cloudRegion, + 'cloud.availability_zone': isMalformed + ? MORE_THAN_1024_CHARS // "ignore_above": 1024 in mapping + : `${cloudRegion}a`, + 'cloud.project.id': generateShortId(), + 'cloud.instance.id': generateShortId(), + 'log.file.path': `/logs/${generateLongId()}/error.txt`, + }) + .timestamp(timestamp); +} + +export const datasetNames = ['synth.1', 'synth.2', 'synth.3']; +export const defaultNamespace = 'default'; + +// Logs Data logic +const MESSAGE_LOG_LEVELS: MessageWithLevel[] = [ + { message: 'A simple log', level: LogLevel.INFO }, + { + message: 'Another log message', + level: LogLevel.DEBUG, + }, + { message: 'Error with certificate: "ca_trusted_fingerprint"', level: LogLevel.ERROR }, +]; +const CLOUD_PROVIDERS = ['gcp', 'aws', 'azure']; +const CLOUD_REGION = ['eu-central-1', 'us-east-1', 'area-51']; + +const CLUSTER = [ + { clusterId: generateShortId(), clusterName: 'synth-cluster-1' }, + { clusterId: generateShortId(), clusterName: 'synth-cluster-2' }, + { clusterId: generateShortId(), clusterName: 'synth-cluster-3' }, +]; + +const SERVICE_NAMES = [`synth-service-0`, `synth-service-1`, `synth-service-2`]; + +const MORE_THAN_1024_CHARS = + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?'; diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_flyout.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_flyout.ts new file mode 100644 index 000000000000..08a7b55e84db --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_flyout.ts @@ -0,0 +1,112 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { DatasetQualityFtrProviderContext } from './config'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: DatasetQualityFtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + ]); + const testSubjects = getService('testSubjects'); + const synthtrace = getService('logSynthtraceEsClient'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality flyout', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('opens the flyout for the right dataset', async () => { + const testDatasetName = datasetNames[1]; + + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + await testSubjects.existOrFail( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFlyoutTitle + ); + }); + + it('shows the correct last activity', async () => { + const testDatasetName = datasetNames[0]; + + // Update last activity for the dataset + await PageObjects.datasetQuality.closeFlyout(); + await synthtrace.index( + getLogsForDataset({ to: new Date().toISOString(), count: 1, dataset: testDatasetName }) + ); + await PageObjects.datasetQuality.refreshTable(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const testDatasetRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === testDatasetName + ); + + const lastActivityText = (await cols['Last Activity'].getCellTexts())[testDatasetRowIndex]; + + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + const lastActivityTextExists = await PageObjects.datasetQuality.doestTextExistInFlyout( + lastActivityText, + `[data-test-subj=${PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFlyoutFieldValue}]` + ); + expect(lastActivityTextExists).to.eql(true); + }); + + it('shows the integration details', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + const apacheIntegrationId = 'apache'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + await PageObjects.datasetQuality.openDatasetFlyout(apacheAccessDatasetHumanName); + + const integrationNameElements = await PageObjects.datasetQuality.getFlyoutElementsByText( + '[data-test-subj=datasetQualityFlyoutFieldValue]', + apacheIntegrationId + ); + + expect(integrationNameElements.length).to.eql(1); + }); + + it('goes to log explorer page when open button is clicked', async () => { + const testDatasetName = datasetNames[2]; + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + await (await PageObjects.datasetQuality.getFlyoutLogsExplorerButton()).click(); + + // Confirm dataset selector text in observability logs explorer + const datasetSelectorText = + await PageObjects.observabilityLogsExplorer.getDataSourceSelectorButtonText(); + expect(datasetSelectorText).to.eql(testDatasetName); + }); + }); +} diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts new file mode 100644 index 000000000000..1a072e622f62 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_summary.ts @@ -0,0 +1,133 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { DatasetQualityFtrProviderContext } from './config'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: DatasetQualityFtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + ]); + const synthtrace = getService('logSynthtraceEsClient'); + const browser = getService('browser'); + const retry = getService('retry'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality summary', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('shows poor, degraded and good count', async () => { + const summary = await PageObjects.datasetQuality.parseSummaryPanel(); + expect(summary).to.eql({ + datasetHealthPoor: '0', + datasetHealthDegraded: '0', + datasetHealthGood: '3', + activeDatasets: '0 of 3', + estimatedData: '0 Bytes', + }); + }); + + it('updates the poor count when degraded docs are ingested', async () => { + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[2], + isMalformed: true, + }) + ); + + await browser.refresh(); + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const summary = await PageObjects.datasetQuality.parseSummaryPanel(); + const { estimatedData, ...restOfSummary } = summary; + expect(restOfSummary).to.eql({ + datasetHealthPoor: '1', + datasetHealthDegraded: '0', + datasetHealthGood: '2', + activeDatasets: '1 of 3', + }); + }); + }); + + it('updates the degraded count when degraded docs are ingested', async () => { + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[1], + isMalformed: true, + }) + ); + + // Index healthy documents + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 10, + dataset: datasetNames[1], + isMalformed: false, + }) + ); + + await browser.refresh(); + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const { estimatedData, ...restOfSummary } = + await PageObjects.datasetQuality.parseSummaryPanel(); + expect(restOfSummary).to.eql({ + datasetHealthPoor: '1', + datasetHealthDegraded: '1', + datasetHealthGood: '1', + activeDatasets: '2 of 3', + }); + }); + }); + + it('updates active datasets and estimated data KPIs', async () => { + const { estimatedData: existingEstimatedData } = + await PageObjects.datasetQuality.parseSummaryPanel(); + + // Index document at current time to mark dataset as active + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 4, + dataset: datasetNames[0], + isMalformed: false, + }) + ); + + await browser.refresh(); // Summary panel doesn't update reactively + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const { activeDatasets: updatedActiveDatasets, estimatedData: updatedEstimatedData } = + await PageObjects.datasetQuality.parseSummaryPanel(); + + expect(updatedActiveDatasets).to.eql('3 of 3'); + expect(updatedEstimatedData).to.not.eql(existingEstimatedData); + }); + }); + }); +} diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts new file mode 100644 index 000000000000..3d49e4fe3c19 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table.ts @@ -0,0 +1,237 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { DatasetQualityFtrProviderContext } from './config'; +import { datasetNames, defaultNamespace, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: DatasetQualityFtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + ]); + const synthtrace = getService('logSynthtraceEsClient'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality table', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('shows the right number of rows in correct order', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('descending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql([...datasetNames].reverse()); + + const namespaceCol = cols.Namespace; + const namespaceColCellTexts = await namespaceCol.getCellTexts(); + expect(namespaceColCellTexts).to.eql([defaultNamespace, defaultNamespace, defaultNamespace]); + + const degradedDocsCol = cols['Degraded Docs']; + const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%']); + + const lastActivityCol = cols['Last Activity']; + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(lastActivityColCellTexts).to.eql([ + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + ]); + }); + + it('shows degraded docs percentage', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('ascending'); + + const degradedDocsCol = cols['Degraded Docs']; + const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%']); + + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[2], + isMalformed: true, + }) + ); + + // Set time range to Last 5 minute + const filtersContainer = await testSubjects.find( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFiltersContainer + ); + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 5, 'm'); + + const updatedDegradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(updatedDegradedDocsColCellTexts[2]).to.not.eql('0%'); + }); + + it('shows the updated size of the index', async () => { + const testDatasetIndex = 2; + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('ascending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const datasetToUpdateRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === datasetNames[testDatasetIndex] + ); + + const sizeColCellTexts = await cols.Size.getCellTexts(); + const beforeSize = sizeColCellTexts[datasetToUpdateRowIndex]; + + // Index documents with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 4, + dataset: datasetNames[testDatasetIndex], + isMalformed: false, + }) + ); + + const colsAfterUpdate = await PageObjects.datasetQuality.parseDatasetTable(); + + // Assert that size has changed + await retry.tryForTime(15000, async () => { + // Refresh the table + await PageObjects.datasetQuality.refreshTable(); + const updatedSizeColCellTexts = await colsAfterUpdate.Size.getCellTexts(); + expect(updatedSizeColCellTexts[datasetToUpdateRowIndex]).to.not.eql(beforeSize); + }); + }); + + it('sorts by dataset name', async () => { + // const header = await PageObjects.datasetQuality.getDatasetTableHeader('Dataset Name'); + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + expect(Object.keys(cols).length).to.eql(7); + + const datasetNameCol = cols['Dataset Name']; + + // Sort ascending + await datasetNameCol.sort('ascending'); + const cellTexts = await datasetNameCol.getCellTexts(); + + const datasetNamesAsc = [...datasetNames].sort(); + + expect(cellTexts).to.eql(datasetNamesAsc); + }); + + it('shows dataset from integration', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + + // Sort ascending + await datasetNameCol.sort('ascending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const datasetNamesAsc = [...datasetNames, apacheAccessDatasetHumanName].sort(); + + // Assert there are 4 rows + expect(datasetNameColCellTexts.length).to.eql(4); + + expect(datasetNameColCellTexts).to.eql(datasetNamesAsc); + }); + + it('goes to log explorer page when opened', async () => { + const rowIndexToOpen = 1; + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const actionsCol = cols.Actions; + + const datasetName = (await datasetNameCol.getCellTexts())[rowIndexToOpen]; + await (await actionsCol.getCellChildren('a'))[rowIndexToOpen].click(); // Click "Open" + + // Confirm dataset selector text in observability logs explorer + const datasetSelectorText = + await PageObjects.observabilityLogsExplorer.getDataSourceSelectorButtonText(); + expect(datasetSelectorText).to.eql(datasetName); + }); + + it('shows the last activity when in time range', async () => { + await PageObjects.datasetQuality.navigateTo(); + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const lastActivityCol = cols['Last Activity']; + const datasetNameCol = cols['Dataset Name']; + + // Set time range to Last 1 minute + const filtersContainer = await testSubjects.find( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFiltersContainer + ); + + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 1, 's'); + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(lastActivityColCellTexts).to.eql([ + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + ]); + + const datasetToUpdate = datasetNames[0]; + await synthtrace.index( + getLogsForDataset({ to: new Date().toISOString(), count: 1, dataset: datasetToUpdate }) + ); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + const datasetToUpdateRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === datasetToUpdate + ); + + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 1, 'h'); + + await retry.tryForTime(5000, async () => { + const updatedLastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(updatedLastActivityColCellTexts[datasetToUpdateRowIndex]).to.not.eql( + PageObjects.datasetQuality.texts.noActivityText + ); + }); + }); + + it('hides inactive datasets', async () => { + // Get number of rows with Last Activity not equal to "No activity in the selected timeframe" + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const lastActivityCol = cols['Last Activity']; + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + const activeDatasets = lastActivityColCellTexts.filter( + (activity: string) => activity !== PageObjects.datasetQuality.texts.noActivityText + ); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + const rows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(rows.length).to.eql(activeDatasets.length); + }); + }); +} diff --git a/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts new file mode 100644 index 000000000000..8212447b2563 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/dataset_quality_table_filters.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { DatasetQualityFtrProviderContext } from './config'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: DatasetQualityFtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + ]); + const synthtrace = getService('logSynthtraceEsClient'); + const testSubjects = getService('testSubjects'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality table filters', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('hides inactive datasets when toggled', async () => { + const initialRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(initialRows.length).to.eql(3); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + + const afterToggleRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(afterToggleRows.length).to.eql(1); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + + const afterReToggleRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(afterReToggleRows.length).to.eql(3); + }); + + it('shows full dataset names when toggled', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql(datasetNames); + + await PageObjects.datasetQuality.toggleShowFullDatasetNames(); + + const datasetNameColCellTextsAfterToggle = await datasetNameCol.getCellTexts(); + const duplicateNames = datasetNames.map((name) => `${name}\n${name}`); + expect(datasetNameColCellTextsAfterToggle).to.eql(duplicateNames); + + await PageObjects.datasetQuality.toggleShowFullDatasetNames(); + const datasetNameColCellTextsAfterReToggle = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTextsAfterReToggle).to.eql(datasetNames); + }); + + it('searches the datasets', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql(datasetNames); + + // Search for a dataset + await testSubjects.setValue( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFilterBarFieldSearch, + datasetNames[2] + ); + + const colsAfterSearch = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameColAfterSearch = colsAfterSearch['Dataset Name']; + const datasetNameColCellTextsAfterSearch = await datasetNameColAfterSearch.getCellTexts(); + expect(datasetNameColCellTextsAfterSearch).to.eql([datasetNames[2]]); + await testSubjects.setValue( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFilterBarFieldSearch, + '' + ); + }); + + it('filters for integration', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + const apacheIntegrationName = 'Apache HTTP Server'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql([apacheAccessDatasetHumanName, ...datasetNames]); + + // Filter for integration + await PageObjects.datasetQuality.filterForIntegrations([apacheIntegrationName]); + + const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameColAfterFilter = colsAfterFilter['Dataset Name']; + const datasetNameColCellTextsAfterFilter = await datasetNameColAfterFilter.getCellTexts(); + expect(datasetNameColCellTextsAfterFilter).to.eql([apacheAccessDatasetHumanName]); + }); + }); +} diff --git a/x-pack/test/functional/apps/dataset_quality/home.ts b/x-pack/test/functional/apps/dataset_quality/home.ts new file mode 100644 index 000000000000..794033347013 --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/home.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 { DatasetQualityFtrProviderContext } from './config'; + +export default function ({ getService, getPageObjects }: DatasetQualityFtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + ]); + + const testSubjects = getService('testSubjects'); + + describe('Dataset quality home', () => { + it('dataset quality table exists', async () => { + await PageObjects.datasetQuality.navigateTo(); + await testSubjects.existOrFail( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityTable + ); + }); + }); +} diff --git a/x-pack/test/functional/apps/dataset_quality/index.ts b/x-pack/test/functional/apps/dataset_quality/index.ts new file mode 100644 index 000000000000..453d3673e7ef --- /dev/null +++ b/x-pack/test/functional/apps/dataset_quality/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DatasetQualityFtrProviderContext } from './config'; + +export default function ({ loadTestFile }: DatasetQualityFtrProviderContext) { + describe('Dataset Quality', function () { + loadTestFile(require.resolve('./home')); + loadTestFile(require.resolve('./dataset_quality_summary')); + loadTestFile(require.resolve('./dataset_quality_table')); + loadTestFile(require.resolve('./dataset_quality_table_filters')); + loadTestFile(require.resolve('./dataset_quality_flyout')); + }); +} diff --git a/x-pack/test/functional/apps/lens/group6/workspace_size.ts b/x-pack/test/functional/apps/lens/group6/workspace_size.ts index 165b429b0373..9f3706203abb 100644 --- a/x-pack/test/functional/apps/lens/group6/workspace_size.ts +++ b/x-pack/test/functional/apps/lens/group6/workspace_size.ts @@ -15,7 +15,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const log = getService('log'); - describe('lens workspace size', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('lens workspace size', () => { let originalWindowSize: { height: number; width: number; diff --git a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js index 0273441f3543..6c91ec958ddf 100644 --- a/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js +++ b/x-pack/test/functional/apps/maps/group1/documents_source/search_hits.js @@ -12,7 +12,8 @@ export default function ({ getPageObjects, getService }) { const inspector = getService('inspector'); const security = getService('security'); - describe('search hits', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('search hits', () => { before(async () => { await security.testUser.setRoles( [ diff --git a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js index 49c31f951d3d..7ee28e468cd4 100644 --- a/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js +++ b/x-pack/test/functional/apps/maps/group2/es_geo_grid_source.js @@ -13,7 +13,8 @@ export default function ({ getPageObjects, getService }) { const DOC_COUNT_PROP_NAME = 'doc_count'; const security = getService('security'); - describe('geojson vector layer - es geo grid source', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('geojson vector layer - es geo grid source', () => { const DATA_CENTER_LON = -98; const DATA_CENTER_LAT = 38; diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/aggregated_scripted_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/aggregated_scripted_job.ts index 4d9fd0bbead8..c1c4887ccc99 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/aggregated_scripted_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/aggregated_scripted_job.ts @@ -359,7 +359,8 @@ export default function ({ getService }: FtrProviderContext) { }, ]; - describe('aggregated or scripted job', function () { + // FAILING ES PROMOTION: https://github.com/elastic/kibana/issues/178562 + describe.skip('aggregated or scripted job', function () { this.tags(['ml']); before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); diff --git a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts index a3ef0eddef6c..f7f2f669bc20 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/data_drift.ts @@ -85,7 +85,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await ml.dataDrift.runAnalysis(); } - describe('data drift', async function () { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('data drift', async function () { before(async () => { await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/ihp_outlier'); await ml.testResources.createDataViewIfNeeded('ft_ihp_outlier'); diff --git a/x-pack/test/functional/apps/ml/data_visualizer/esql_data_visualizer.ts b/x-pack/test/functional/apps/ml/data_visualizer/esql_data_visualizer.ts new file mode 100644 index 000000000000..167dc0351079 --- /dev/null +++ b/x-pack/test/functional/apps/ml/data_visualizer/esql_data_visualizer.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 { ML_JOB_FIELD_TYPES } from '@kbn/ml-anomaly-utils'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { MetricFieldVisConfig, NonMetricFieldVisConfig } from './types'; +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface TestData { + suiteTitle: string; + query: string; + rowsPerPage?: 10 | 25 | 50; + sourceIndexOrSavedSearch?: string; + expected: { + hasDocCountChart: boolean; + initialLimitSize?: string; + totalDocCountFormatted: string; + metricFields?: MetricFieldVisConfig[]; + nonMetricFields?: NonMetricFieldVisConfig[]; + emptyFields: string[]; + visibleMetricFieldsCount: number; + totalMetricFieldsCount: number; + populatedFieldsCount: number; + totalFieldsCount: number; + }; +} + +const esqlFarequoteData = { + suiteTitle: 'ES|QL farequote', + query: 'from `ft_farequote`', + sourceIndexOrSavedSearch: 'ft_farequote', + expected: { + hasDocCountChart: true, + initialLimitSize: '10,000 (100%)', + totalDocCountFormatted: '86,274', + metricFields: [ + { + fieldName: 'responsetime', + type: ML_JOB_FIELD_TYPES.NUMBER, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '86,274 (100%)', + statsMaxDecimalPlaces: 3, + topValuesCount: 11, + viewableInLens: false, + }, + ], + nonMetricFields: [ + { + fieldName: '@timestamp', + type: ML_JOB_FIELD_TYPES.DATE, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '86,274 (100%)', + exampleCount: 2, + viewableInLens: false, + }, + { + fieldName: '@version', + type: ML_JOB_FIELD_TYPES.TEXT, + existsInDocs: true, + aggregatable: false, + loading: false, + exampleCount: 1, + docCountFormatted: '86,274 (100%)', + viewableInLens: false, + }, + { + fieldName: '@version.keyword', + type: ML_JOB_FIELD_TYPES.KEYWORD, + existsInDocs: true, + aggregatable: true, + loading: false, + exampleCount: 1, + docCountFormatted: '86,274 (100%)', + viewableInLens: false, + }, + { + fieldName: 'airline', + type: ML_JOB_FIELD_TYPES.KEYWORD, + existsInDocs: true, + aggregatable: true, + loading: false, + exampleCount: 11, + docCountFormatted: '86,274 (100%)', + viewableInLens: false, + }, + { + fieldName: 'type', + type: ML_JOB_FIELD_TYPES.TEXT, + existsInDocs: true, + aggregatable: false, + loading: false, + exampleCount: 1, + docCountFormatted: '86,274 (100%)', + viewableInLens: false, + }, + { + fieldName: 'type.keyword', + type: ML_JOB_FIELD_TYPES.KEYWORD, + existsInDocs: true, + aggregatable: true, + loading: false, + exampleCount: 1, + docCountFormatted: '86,274 (100%)', + viewableInLens: false, + }, + ], + emptyFields: ['sourcetype'], + visibleMetricFieldsCount: 1, + totalMetricFieldsCount: 1, + populatedFieldsCount: 7, + totalFieldsCount: 8, + }, +}; +const esqlSampleLogData: TestData = { + suiteTitle: 'ES|QL module_sample_logs', + query: `from ft_module_sample_logs +| where bytes > 7000 and response.keyword == "200" +| eval bytes_kb = bytes/1000 +| stats max_bytes_kb = max(bytes_kb), min_machine_ram = min(machine.ram) by clientip, geo.coordinates`, + sourceIndexOrSavedSearch: 'ft_module_sample_logs', + expected: { + hasDocCountChart: false, + totalDocCountFormatted: '149', + metricFields: [ + { + fieldName: 'max_bytes_kb', + type: ML_JOB_FIELD_TYPES.NUMBER, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '143 (95.97%)', + statsMaxDecimalPlaces: 3, + topValuesCount: 12, + viewableInLens: false, + }, + { + fieldName: 'min_machine_ram', + type: ML_JOB_FIELD_TYPES.NUMBER, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '143 (95.97%)', + statsMaxDecimalPlaces: 3, + topValuesCount: 20, + viewableInLens: false, + }, + ], + nonMetricFields: [ + { + fieldName: 'geo.coordinates', + type: ML_JOB_FIELD_TYPES.GEO_POINT, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '143 (95.97%)', + exampleCount: 10, + viewableInLens: false, + }, + { + fieldName: 'clientip', + type: ML_JOB_FIELD_TYPES.KEYWORD, + existsInDocs: true, + aggregatable: true, + loading: false, + docCountFormatted: '143 (95.97%)', + exampleCount: 11, + viewableInLens: false, + }, + ], + emptyFields: [], + visibleMetricFieldsCount: 2, + totalMetricFieldsCount: 2, + populatedFieldsCount: 4, + totalFieldsCount: 4, + }, +}; + +export default function ({ getPageObject, getService }: FtrProviderContext) { + const headerPage = getPageObject('header'); + const esArchiver = getService('esArchiver'); + const ml = getService('ml'); + + function runTests(testData: TestData) { + it(`${testData.suiteTitle} loads the ES|QL data visualizer page`, async () => { + // Start navigation from the base of the ML app. + await ml.navigation.navigateToMl(); + await ml.navigation.navigateToDataESQLDataVisualizer(); + }); + + it('should show the ES|QL editor and top panels', async () => { + await ml.dataVisualizerIndexBased.assertTimeRangeSelectorSectionExists(); + }); + + it(`${testData.suiteTitle} displays index details`, async () => { + await ml.dataVisualizer.setESQLQuery(testData.query); + + await ml.dataVisualizerTable.assertTableRowCount(0); + + await ml.testExecution.logTestStep(`${testData.suiteTitle} loads data for full time range`); + await ml.dataVisualizerIndexBased.clickUseFullDataButton( + testData.expected.totalDocCountFormatted, + 'none' + ); + await headerPage.waitUntilLoadingHasFinished(); + + await ml.dataVisualizerIndexBased.assertTotalDocCountHeaderExist(); + + if (testData.expected.hasDocCountChart) { + await ml.dataVisualizerIndexBased.assertTotalDocCountChartExist(); + } + + await ml.testExecution.logTestStep( + `${testData.suiteTitle} displays elements in the data visualizer table correctly` + ); + await ml.dataVisualizerIndexBased.assertDataVisualizerTableExist(); + + if (testData.rowsPerPage) { + await ml.dataVisualizerTable.ensureNumRowsPerPage(testData.rowsPerPage); + } + + await ml.dataVisualizerIndexBased.assertFieldCountPanelExist(); + await ml.dataVisualizerIndexBased.assertMetricFieldsSummaryExist(); + await ml.dataVisualizerIndexBased.assertFieldsSummaryExist(); + await ml.dataVisualizerIndexBased.assertVisibleMetricFieldsCount( + testData.expected.visibleMetricFieldsCount + ); + await ml.dataVisualizerIndexBased.assertTotalMetricFieldsCount( + testData.expected.totalMetricFieldsCount + ); + await ml.dataVisualizerIndexBased.assertVisibleFieldsCount( + testData.expected.populatedFieldsCount + ); + await ml.dataVisualizerIndexBased.assertTotalFieldsCount(testData.expected.totalFieldsCount); + + await ml.testExecution.logTestStep('displays unpopulated fields correctly'); + await ml.dataVisualizerTable.setShowEmptyFieldsSwitchState( + true, + testData.expected.emptyFields + ); + }); + + it(`${testData.suiteTitle} updates data when limit size changes`, async () => { + if (testData.expected.initialLimitSize !== undefined) { + await ml.testExecution.logTestStep('shows analysis for 10,000 rows by default'); + for (const fieldRow of testData.expected.metricFields as Array< + Required + >) { + await ml.dataVisualizerTable.assertNumberFieldContents( + fieldRow.fieldName, + testData.expected.initialLimitSize, + undefined, + false, + false, + true + ); + } + } + + await ml.testExecution.logTestStep('sets limit size to Analyze all'); + await ml.dataVisualizer.setLimitSize('none'); + + await ml.testExecution.logTestStep('updates table with newly set limit size'); + for (const fieldRow of testData.expected.metricFields as Array< + Required + >) { + await ml.dataVisualizerTable.assertNumberFieldContents( + fieldRow.fieldName, + fieldRow.docCountFormatted, + undefined, + false, + false, + true + ); + } + + for (const fieldRow of testData.expected.nonMetricFields!) { + await ml.dataVisualizerTable.assertNonMetricFieldContents( + fieldRow.type, + fieldRow.fieldName!, + fieldRow.docCountFormatted, + fieldRow.exampleCount, + false, + false, + undefined + ); + } + }); + } + + describe('esql', function () { + this.tags(['ml']); + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/module_sample_logs'); + + await ml.testResources.setKibanaTimeZoneToUTC(); + + await ml.securityUI.loginAsMlPowerUser(); + }); + + describe('with farequote', function () { + runTests(esqlFarequoteData); + }); + + describe('with module_sample_logs ', function () { + runTests(esqlSampleLogData); + }); + }); +} diff --git a/x-pack/test/functional/apps/ml/data_visualizer/index.ts b/x-pack/test/functional/apps/ml/data_visualizer/index.ts index 2145267edcc3..e5b1cbab2480 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/index.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/index.ts @@ -31,7 +31,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { await ml.testResources.resetKibanaTimeZone(); }); - loadTestFile(require.resolve('./index_data_visualizer')); loadTestFile(require.resolve('./index_data_visualizer_random_sampler')); loadTestFile(require.resolve('./index_data_visualizer_filters')); @@ -41,5 +40,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./index_data_visualizer_data_view_management')); loadTestFile(require.resolve('./file_data_visualizer')); loadTestFile(require.resolve('./data_drift')); + loadTestFile(require.resolve('./esql_data_visualizer')); }); } diff --git a/x-pack/test/functional/apps/ml/data_visualizer/types.ts b/x-pack/test/functional/apps/ml/data_visualizer/types.ts index 3c243be21086..b5ff416706a6 100644 --- a/x-pack/test/functional/apps/ml/data_visualizer/types.ts +++ b/x-pack/test/functional/apps/ml/data_visualizer/types.ts @@ -36,7 +36,9 @@ export interface TestData { size: number; expected: { field: string; docCountFormatted: string }; }>; + query?: string; expected: { + initialLimitSize?: string; filters?: Array<{ key: string; value: string; diff --git a/x-pack/test/functional/page_objects/dataset_quality.ts b/x-pack/test/functional/page_objects/dataset_quality.ts new file mode 100644 index 000000000000..1de97a7eead5 --- /dev/null +++ b/x-pack/test/functional/page_objects/dataset_quality.ts @@ -0,0 +1,384 @@ +/* + * Copyright 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 querystring from 'querystring'; +import rison from '@kbn/rison'; +import expect from '@kbn/expect'; +import { TimeUnitId } from '@elastic/eui'; +import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; +import { + OBSERVABILITY_DATASET_QUALITY_URL_STATE_KEY, + datasetQualityUrlSchemaV1, +} from '@kbn/observability-logs-explorer-plugin/common'; +import { FtrProviderContext } from '../ftr_provider_context'; + +const defaultPageState: datasetQualityUrlSchemaV1.UrlSchema = { + v: 1, + table: { + page: 0, + }, + filters: {}, + flyout: {}, +}; + +type SummaryPanelKpi = Record< + | 'datasetHealthPoor' + | 'datasetHealthDegraded' + | 'datasetHealthGood' + | 'activeDatasets' + | 'estimatedData', + string +>; + +export function DatasetQualityPageObject({ getPageObjects, getService }: FtrProviderContext) { + const PageObjects = getPageObjects(['common']); + const testSubjects = getService('testSubjects'); + const euiSelectable = getService('selectable'); + const retry = getService('retry'); + const find = getService('find'); + const browser = getService('browser'); + + const selectors = { + datasetQualityTable: '[data-test-subj="datasetQualityTable"]', + datasetQualityTableColumn: (column: number) => + `[data-test-subj="datasetQualityTable"] .euiTableRowCell:nth-child(${column})`, + datasetSearchInput: '[placeholder="Filter datasets"]', + showFullDatasetNamesSwitch: 'button[aria-label="Show full dataset names"]', + showInactiveDatasetsNamesSwitch: 'button[aria-label="Show inactive datasets"]', + }; + + const testSubjectSelectors = { + datasetQualityTable: 'datasetQualityTable', + datasetQualityFiltersContainer: 'datasetQualityFiltersContainer', + datasetQualityExpandButton: 'datasetQualityExpandButton', + datasetQualityFlyout: 'datasetQualityFlyout', + datasetQualityFlyoutBody: 'datasetQualityFlyoutBody', + datasetQualityFlyoutTitle: 'datasetQualityFlyoutTitle', + datasetQualityHeaderButton: 'datasetQualityHeaderButton', + datasetQualityFlyoutFieldValue: 'datasetQualityFlyoutFieldValue', + datasetQualityFilterBarFieldSearch: 'datasetQualityFilterBarFieldSearch', + datasetQualityIntegrationsSelectable: 'datasetQualityIntegrationsSelectable', + datasetQualityIntegrationsSelectableButton: 'datasetQualityIntegrationsSelectableButton', + datasetQualityDatasetHealthKpi: 'datasetQualityDatasetHealthKpi', + + superDatePickerToggleQuickMenuButton: 'superDatePickerToggleQuickMenuButton', + superDatePickerApplyTimeButton: 'superDatePickerApplyTimeButton', + superDatePickerQuickMenu: 'superDatePickerQuickMenu', + euiFlyoutCloseButton: 'euiFlyoutCloseButton', + }; + + return { + selectors, + testSubjectSelectors, + texts, + + async navigateTo({ + pageState, + }: { + pageState?: datasetQualityUrlSchemaV1.UrlSchema; + } = {}) { + const queryStringParams = querystring.stringify({ + [OBSERVABILITY_DATASET_QUALITY_URL_STATE_KEY]: rison.encode( + datasetQualityUrlSchemaV1.urlSchemaRT.encode({ + ...defaultPageState, + ...pageState, + }) + ), + }); + + return PageObjects.common.navigateToUrlWithBrowserHistory( + 'observabilityLogsExplorer', + '/dataset-quality', + queryStringParams, + { + // the check sometimes is too slow for the page so it misses the point + // in time before the app rewrites the URL + ensureCurrentUrl: false, + } + ); + }, + + async waitUntilSummaryPanelLoaded() { + await testSubjects.missingOrFail(`datasetQuality-${texts.activeDatasets}-loading`); + await testSubjects.missingOrFail(`datasetQuality-${texts.estimatedData}-loading`); + }, + + async parseSummaryPanel(): Promise { + const kpiTitleAndKeys = [ + { title: texts.datasetHealthPoor, key: 'datasetHealthPoor' }, + { title: texts.datasetHealthDegraded, key: 'datasetHealthDegraded' }, + { title: texts.datasetHealthGood, key: 'datasetHealthGood' }, + { title: texts.activeDatasets, key: 'activeDatasets' }, + { title: texts.estimatedData, key: 'estimatedData' }, + ]; + + const kpiTexts = await Promise.all( + kpiTitleAndKeys.map(async ({ title, key }) => ({ + key, + value: await testSubjects.getVisibleText( + `${testSubjectSelectors.datasetQualityDatasetHealthKpi}-${title}` + ), + })) + ); + + return kpiTexts.reduce( + (acc, { key, value }) => ({ + ...acc, + [key]: value, + }), + {} as SummaryPanelKpi + ); + }, + + getDatasetsTable(): Promise { + return testSubjects.find(testSubjectSelectors.datasetQualityTable); + }, + + async refreshTable() { + const filtersContainer = await testSubjects.find( + testSubjectSelectors.datasetQualityFiltersContainer + ); + const refreshButton = await filtersContainer.findByTestSubject( + testSubjectSelectors.superDatePickerApplyTimeButton + ); + return refreshButton.click(); + }, + + async getDatasetTableRows(): Promise { + const table = await testSubjects.find(testSubjectSelectors.datasetQualityTable); + const tBody = await table.findByTagName('tbody'); + return tBody.findAllByTagName('tr'); + }, + + async parseDatasetTable() { + const table = await this.getDatasetsTable(); + return parseDatasetTable(table, [ + '0', + 'Dataset Name', + 'Namespace', + 'Size', + 'Degraded Docs', + 'Last Activity', + 'Actions', + ]); + }, + + async filterForIntegrations(integrations: string[]) { + return euiSelectable.selectOnlyOptionsWithText( + testSubjectSelectors.datasetQualityIntegrationsSelectableButton, + testSubjectSelectors.datasetQualityIntegrationsSelectable, + integrations + ); + }, + + async toggleShowInactiveDatasets() { + return find.clickByCssSelector(selectors.showInactiveDatasetsNamesSwitch); + }, + + async toggleShowFullDatasetNames() { + return find.clickByCssSelector(selectors.showFullDatasetNamesSwitch); + }, + + async openDatasetFlyout(datasetName: string) { + const cols = await this.parseDatasetTable(); + + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const testDatasetRowIndex = datasetNameColCellTexts.findIndex( + (dName) => dName === datasetName + ); + + const expanderColumn = cols['0']; + let expanderButtons: WebElementWrapper[]; + + await retry.try(async () => { + expanderButtons = await expanderColumn.getCellChildren( + `[data-test-subj=${testSubjectSelectors.datasetQualityExpandButton}]` + ); + expect(expanderButtons.length).to.be.greaterThan(0); + + await expanderButtons[testDatasetRowIndex].click(); // Click "Open" + }); + }, + + async closeFlyout() { + return testSubjects.click(testSubjectSelectors.euiFlyoutCloseButton); + }, + + async getFlyoutElementsByText(selector: string, text: string) { + const flyoutContainer: WebElementWrapper = await testSubjects.find( + testSubjectSelectors.datasetQualityFlyout + ); + + return getAllByText(flyoutContainer, selector, text); + }, + + getFlyoutLogsExplorerButton() { + return testSubjects.find(testSubjectSelectors.datasetQualityHeaderButton); + }, + + async doestTextExistInFlyout(text: string, elementSelector: string) { + const flyoutContainer: WebElementWrapper = await testSubjects.find( + testSubjectSelectors.datasetQualityFlyoutBody + ); + + const elements = await getAllByText(flyoutContainer, elementSelector, text); + return elements.length > 0; + }, + + async setDatePickerLastXUnits( + container: WebElementWrapper, + timeValue: number, + unit: TimeUnitId + ) { + await testSubjects.click(testSubjectSelectors.superDatePickerToggleQuickMenuButton); + const datePickerQuickMenu = await testSubjects.find( + testSubjectSelectors.superDatePickerQuickMenu + ); + + const timeTenseSelect = await datePickerQuickMenu.findByCssSelector( + `select[aria-label="Time tense"]` + ); + const timeValueInput = await datePickerQuickMenu.findByCssSelector( + `input[aria-label="Time value"]` + ); + const timeUnitSelect = await datePickerQuickMenu.findByCssSelector( + `select[aria-label="Time unit"]` + ); + + await timeTenseSelect.focus(); + await timeTenseSelect.type('Last'); + + await timeValueInput.focus(); + await timeValueInput.clearValue(); + await timeValueInput.type(timeValue.toString()); + + await timeUnitSelect.focus(); + await timeUnitSelect.type(unit); + + await browser.pressKeys(browser.keys.ENTER); + + // Close the date picker quick menu + return testSubjects.click(testSubjectSelectors.superDatePickerToggleQuickMenuButton); + }, + }; +} + +async function parseDatasetTable(tableWrapper: WebElementWrapper, columnNamesOrIndexes: string[]) { + const headerElementWrappers = await tableWrapper.findAllByCssSelector('thead th, thead td'); + + const result: Record< + string, + { + columnNameOrIndex: string; + sortDirection?: 'ascending' | 'descending'; + headerElement: WebElementWrapper; + cellElements: WebElementWrapper[]; + cellContentElements: WebElementWrapper[]; + getSortDirection: () => Promise<'ascending' | 'descending' | undefined>; + sort: (sortDirection: 'ascending' | 'descending') => Promise; + getCellTexts: (selector?: string) => Promise; + getCellChildren: (selector: string) => Promise; + } + > = {}; + + for (let i = 0; i < headerElementWrappers.length; i++) { + const tdSelector = `table > tbody > tr td:nth-child(${i + 1})`; + const cellContentSelector = `${tdSelector} .euiTableCellContent`; + const thWrapper = headerElementWrappers[i]; + const columnName = await thWrapper.getVisibleText(); + const columnIndex = `${i}`; + const columnNameOrIndex = columnNamesOrIndexes.includes(columnName) + ? columnName + : columnNamesOrIndexes.includes(columnIndex) + ? columnIndex + : undefined; + + if (columnNameOrIndex) { + const headerElement = thWrapper; + + const tdWrappers = await tableWrapper.findAllByCssSelector(tdSelector); + const cellContentWrappers = await tableWrapper.findAllByCssSelector(cellContentSelector); + + const getSortDirection = () => + headerElement.getAttribute('aria-sort') as Promise<'ascending' | 'descending' | undefined>; + + result[columnNameOrIndex] = { + columnNameOrIndex, + headerElement, + cellElements: tdWrappers, + cellContentElements: cellContentWrappers, + getSortDirection, + sort: async (sortDirection: 'ascending' | 'descending') => { + if ((await getSortDirection()) !== sortDirection) { + await headerElement.click(); + } + + // Sorting twice if the sort was in neutral state + if ((await getSortDirection()) !== sortDirection) { + await headerElement.click(); + } + }, + getCellTexts: async (textContainerSelector?: string) => { + const cellContentContainerWrappers = textContainerSelector + ? await tableWrapper.findAllByCssSelector(`${tdSelector} ${textContainerSelector}`) + : cellContentWrappers; + + const cellContentContainerWrapperTexts: string[] = []; + for (let j = 0; j < cellContentContainerWrappers.length; j++) { + const cellContentContainerWrapper = cellContentContainerWrappers[j]; + const cellContentContainerWrapperText = + await cellContentContainerWrapper.getVisibleText(); + cellContentContainerWrapperTexts.push(cellContentContainerWrapperText); + } + + return cellContentContainerWrapperTexts; + }, + getCellChildren: (childSelector: string) => { + return tableWrapper.findAllByCssSelector(`${cellContentSelector} ${childSelector}`); + }, + }; + } + } + + return result; +} + +/** + * Get all elements matching the given selector and text + * @example + * const container = await testSubjects.find('myContainer'); + * const elements = await getAllByText(container, 'button', 'Click me'); + * + * @param container { WebElementWrapper } The container to search within + * @param selector { string } The selector to search for (or filter elements by) + * @param text { string } The text to search for within the filtered elements + */ +export async function getAllByText(container: WebElementWrapper, selector: string, text: string) { + const elements = await container.findAllByCssSelector(selector); + const matchingElements: WebElementWrapper[] = []; + + for (let i = 0; i < elements.length; i++) { + const element = elements[i]; + const elementText = await element.getVisibleText(); + if (elementText === text) { + matchingElements.push(element); + } + } + + return matchingElements; +} + +const texts = { + noActivityText: 'No activity in the selected timeframe', + datasetHealthPoor: 'Poor', + datasetHealthDegraded: 'Degraded', + datasetHealthGood: 'Good', + activeDatasets: 'Active Datasets', + estimatedData: 'Estimated Data', +}; diff --git a/x-pack/test/functional/page_objects/index.ts b/x-pack/test/functional/page_objects/index.ts index 6fe511d8c622..80b7b74095ab 100644 --- a/x-pack/test/functional/page_objects/index.ts +++ b/x-pack/test/functional/page_objects/index.ts @@ -34,6 +34,7 @@ import { MaintenanceWindowsPageProvider } from './maintenance_windows_page'; import { MonitoringPageObject } from './monitoring_page'; import { NavigationalSearchPageObject } from './navigational_search'; import { ObservabilityLogsExplorerPageObject } from './observability_logs_explorer'; +import { DatasetQualityPageObject } from './dataset_quality'; import { ObservabilityPageProvider } from './observability_page'; import { RemoteClustersPageProvider } from './remote_clusters_page'; import { ReportingPageObject } from './reporting_page'; @@ -83,6 +84,7 @@ export const pageObjects = { monitoring: MonitoringPageObject, navigationalSearch: NavigationalSearchPageObject, observabilityLogsExplorer: ObservabilityLogsExplorerPageObject, + datasetQuality: DatasetQualityPageObject, observability: ObservabilityPageProvider, remoteClusters: RemoteClustersPageProvider, reporting: ReportingPageObject, diff --git a/x-pack/test/functional/services/ml/data_visualizer.ts b/x-pack/test/functional/services/ml/data_visualizer.ts index cccdeaf07e4f..560e189aaf57 100644 --- a/x-pack/test/functional/services/ml/data_visualizer.ts +++ b/x-pack/test/functional/services/ml/data_visualizer.ts @@ -11,6 +11,9 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export function MachineLearningDataVisualizerProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); + const find = getService('find'); + const retry = getService('retry'); + const browser = getService('browser'); return { async assertDataVisualizerImportDataCardExists() { @@ -54,6 +57,10 @@ export function MachineLearningDataVisualizerProvider({ getService }: FtrProvide }')` ); }, + async navigateToESQLVisualizer() { + await testSubjects.click('mlDataVisualizerSelectESQLButton'); + await testSubjects.existOrFail('dataVisualizerIndexPage'); + }, async navigateToDataViewSelection() { await testSubjects.click('mlDataVisualizerSelectIndexButton'); @@ -64,5 +71,49 @@ export function MachineLearningDataVisualizerProvider({ getService }: FtrProvide await testSubjects.click('mlDataVisualizerUploadFileButton'); await testSubjects.existOrFail('dataVisualizerPageFileUpload'); }, + + async setESQLQuery( + query: string, + refreshOrUpdateBtnSelector: + | 'superDatePickerApplyTimeButton' + | 'mlDatePickerRefreshPageButton loaded' = 'mlDatePickerRefreshPageButton loaded' + ) { + await retry.tryForTime(5000, async () => { + await testSubjects.existOrFail(refreshOrUpdateBtnSelector); + const visibleText = await testSubjects.getVisibleText(refreshOrUpdateBtnSelector); + + expect(visibleText).to.eql('Refresh'); + + await testSubjects.existOrFail('kibanaCodeEditor'); + await find.setValueByClass('kibanaCodeEditor', query); + + const updatedVisibleText = await testSubjects.getVisibleText(refreshOrUpdateBtnSelector); + + expect(updatedVisibleText).to.eql('Update'); + + await testSubjects.click(refreshOrUpdateBtnSelector); + }); + }, + + async assertLimitSize(size: 5000 | 10000 | 100000 | 1000000 | 'none') { + await testSubjects.existOrFail(`dvESQLLimitSize-${size}`, { timeout: 1000 }); + }, + + async setLimitSize(size: 5000 | 10000 | 100000 | 1000000 | 'none') { + await retry.tryForTime(5000, async () => { + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + + // Once clicked, show list of options + await testSubjects.clickWhenNotDisabled('dvESQLLimitSizeSelect'); + for (const option of [5000, 10000, 100000, 1000000, 'none']) { + await testSubjects.existOrFail(`dvESQLLimitSize-${option}`, { timeout: 1000 }); + } + + // Once option selected, assert if limit size is updated + await testSubjects.click(`dvESQLLimitSize-${size}`); + await this.assertLimitSize(size); + }); + }, }; } diff --git a/x-pack/test/functional/services/ml/data_visualizer_index_based.ts b/x-pack/test/functional/services/ml/data_visualizer_index_based.ts index 09566d96f12b..f8e6a7aeea84 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_index_based.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_index_based.ts @@ -22,7 +22,8 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ type RandomSamplerOption = | 'dvRandomSamplerOptionOnAutomatic' | 'dvRandomSamplerOptionOnManual' - | 'dvRandomSamplerOptionOff'; + | 'dvRandomSamplerOptionOff' + | 'none'; return { async assertTimeRangeSelectorSectionExists() { @@ -47,7 +48,9 @@ export function MachineLearningDataVisualizerIndexBasedProvider({ await testSubjects.clickWhenNotDisabledWithoutRetry('mlDatePickerButtonUseFullData'); await testSubjects.clickWhenNotDisabledWithoutRetry('superDatePickerApplyTimeButton'); await PageObjects.header.waitUntilLoadingHasFinished(); - await this.setRandomSamplingOption(randomSamplerOption); + if (randomSamplerOption !== 'none') { + await this.setRandomSamplingOption(randomSamplerOption); + } await await this.assertTotalDocumentCount(expectedFormattedTotalDocCount); }); }, diff --git a/x-pack/test/functional/services/ml/data_visualizer_table.ts b/x-pack/test/functional/services/ml/data_visualizer_table.ts index 1ad3efd90aa5..d0d56da9091d 100644 --- a/x-pack/test/functional/services/ml/data_visualizer_table.ts +++ b/x-pack/test/functional/services/ml/data_visualizer_table.ts @@ -388,8 +388,8 @@ export function MachineLearningDataVisualizerTableProvider( public async assertNumberFieldContents( fieldName: string, docCountFormatted: string, - topValuesCount: number, - viewableInLens: boolean, + topValuesCount?: number, + viewableInLens?: boolean, hasActionMenu = false, checkDistributionPreviewExist = true ) { @@ -402,10 +402,12 @@ export function MachineLearningDataVisualizerTableProvider( this.detailsSelector(fieldName, 'dataVisualizerNumberSummaryTable') ); - await testSubjects.existOrFail( - this.detailsSelector(fieldName, 'dataVisualizerFieldDataTopValues') - ); - await this.assertTopValuesCount(fieldName, topValuesCount); + if (topValuesCount !== undefined) { + await testSubjects.existOrFail( + this.detailsSelector(fieldName, 'dataVisualizerFieldDataTopValues') + ); + await this.assertTopValuesCount(fieldName, topValuesCount); + } if (checkDistributionPreviewExist) { await this.assertDistributionPreviewExist(fieldName); diff --git a/x-pack/test/functional/services/ml/navigation.ts b/x-pack/test/functional/services/ml/navigation.ts index e0136a7c311a..b1f46923efc4 100644 --- a/x-pack/test/functional/services/ml/navigation.ts +++ b/x-pack/test/functional/services/ml/navigation.ts @@ -200,6 +200,10 @@ export function MachineLearningNavigationProvider({ await this.navigateToArea('~mlMainTab & ~dataVisualizer', 'mlPageDataVisualizerSelector'); }, + async navigateToDataESQLDataVisualizer() { + await this.navigateToArea('~mlMainTab & ~esqlDataVisualizer', 'dataVisualizerIndexPage'); + }, + async navigateToDataDrift() { await this.navigateToArea('~mlMainTab & ~dataDrift', 'mlPageDataDrift'); }, diff --git a/x-pack/test/functional_execution_context/tests/browser.ts b/x-pack/test/functional_execution_context/tests/browser.ts index 63f575b798b9..f7d265316dec 100644 --- a/x-pack/test/functional_execution_context/tests/browser.ts +++ b/x-pack/test/functional_execution_context/tests/browser.ts @@ -12,8 +12,7 @@ import { assertLogContains, isExecutionContextLog, readLogFile } from '../test_u export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'home', 'timePicker']); - // FLAKY: https://github.com/elastic/kibana/issues/112103 - describe.skip('Browser apps', () => { + describe('Browser apps', () => { let logs: Ecs[]; const retry = getService('retry'); diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group2/configure.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group2/configure.ts index 7f016ee919a3..29eb8c991952 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group2/configure.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group2/configure.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { CustomFieldTypes } from '@kbn/cases-plugin/common/types/domain'; import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; @@ -57,6 +58,27 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); describe('Custom fields', function () { + before(async () => { + await cases.api.createConfigWithCustomFields({ + customFields: [ + { + key: 'o11y_custom_field', + label: 'My o11y field', + type: CustomFieldTypes.TOGGLE, + required: false, + }, + ], + owner: 'observability', + }); + }); + + it('existing configurations do not interfere', async () => { + // A configuration created in o11y should not be visible in stack + expect(await testSubjects.getVisibleText('empty-custom-fields')).to.be( + 'You do not have any fields yet' + ); + }); + it('adds a custom field', async () => { await testSubjects.existOrFail('custom-fields-form-group'); await common.clickAndValidate('add-custom-field', 'custom-field-flyout'); diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts b/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts index cc83dac4aa1e..9462eae3fb54 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts @@ -5,8 +5,8 @@ * 2.0. */ -import type { CreateChatCompletionResponseChunk } from '@kbn/observability-ai-assistant-plugin/common/types'; import { v4 } from 'uuid'; +import { CreateChatCompletionResponseChunk } from '@kbn/observability-ai-assistant-plugin/common/utils/process_openai_stream'; export function createOpenAiChunk( msg: string | { content?: string; function_call?: { name: string; arguments?: string } } diff --git a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts index 396799686579..78dc47fcb6c2 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts @@ -6,7 +6,7 @@ */ import type { PathsOf, TypeAsArgs, TypeOf } from '@kbn/typed-react-router-config'; -import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-plugin/public/routes/config'; +import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-app-plugin/public/routes/config'; import qs from 'query-string'; import type { Role } from '@kbn/security-plugin-types-common'; import { OBSERVABILITY_AI_ASSISTANT_FEATURE_ID } from '@kbn/observability-ai-assistant-plugin/common/feature'; diff --git a/x-pack/test/rule_registry/spaces_only/tests/trial/__snapshots__/create_rule.snap b/x-pack/test/rule_registry/spaces_only/tests/trial/__snapshots__/create_rule.snap index bc4b903dee43..54ad6fe9f984 100644 --- a/x-pack/test/rule_registry/spaces_only/tests/trial/__snapshots__/create_rule.snap +++ b/x-pack/test/rule_registry/spaces_only/tests/trial/__snapshots__/create_rule.snap @@ -8,6 +8,9 @@ Object { "event.kind": Array [ "signal", ], + "kibana.alert.consecutive_matches": Array [ + 1, + ], "kibana.alert.duration.us": Array [ 0, ], @@ -97,6 +100,9 @@ Object { "event.kind": Array [ "signal", ], + "kibana.alert.consecutive_matches": Array [ + 0, + ], "kibana.alert.evaluation.threshold": Array [ 30, ], diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts index 79984938a792..57f5c0c536dc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/trial_license_complete_tier/execution_logic/query.ts @@ -98,7 +98,8 @@ export default ({ getService }: FtrProviderContext) => { const dataPathBuilder = new EsArchivePathBuilder(isServerless); const auditbeatPath = dataPathBuilder.getPath('auditbeat/hosts'); - describe('@ess @serverless Query type rules', () => { + // FLAKY: https://github.com/elastic/kibana/issues/177101 + describe.skip('@ess @serverless Query type rules', () => { before(async () => { await esArchiver.load(auditbeatPath); await esArchiver.load('x-pack/test/functional/es_archives/security_solution/alerts/8.8.0', { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts index d5918e21fa10..047d56980b85 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule.cy.ts @@ -7,6 +7,7 @@ import { getNewRule } from '../../../../objects/rule'; import { RULE_NAME_HEADER } from '../../../../screens/rule_details'; +import { GLOBAL_SEARCH_BAR_FILTER_ITEM } from '../../../../screens/search_bar'; import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; import { @@ -14,9 +15,12 @@ import { fillAboutRuleMinimumAndContinue, fillDefineCustomRuleAndContinue, createRuleWithoutEnabling, + fillDefineCustomRule, + openAddFilterPopover, } from '../../../../tasks/create_new_rule'; import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; +import { fillAddFilterForm } from '../../../../tasks/search_bar'; import { CREATE_RULE_URL } from '../../../../urls/navigation'; describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => { @@ -42,5 +46,17 @@ describe('Create custom query rule', { tags: ['@ess', '@serverless'] }, () => { cy.log('Asserting we have a new rule created'); cy.get(RULE_NAME_HEADER).should('contain', rule.name); }); + + it('Adds filter on define step', () => { + visit(CREATE_RULE_URL); + fillDefineCustomRule(rule); + openAddFilterPopover(); + fillAddFilterForm({ + key: 'host.name', + operator: 'exists', + }); + // Check that newly added filter exists + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should('have.text', 'host.name: exists'); + }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts index e93a06dd3ca6..bbb34c7a7997 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/custom_query_rule_data_view.cy.ts @@ -47,6 +47,7 @@ import { DATA_VIEW_DETAILS, EDIT_RULE_SETTINGS_LINK, } from '../../../../screens/rule_details'; +import { GLOBAL_SEARCH_BAR_FILTER_ITEM } from '../../../../screens/search_bar'; import { getRulesManagementTableRows, @@ -61,8 +62,10 @@ import { createAndEnableRule, createRuleWithoutEnabling, fillAboutRuleAndContinue, + fillDefineCustomRule, fillDefineCustomRuleAndContinue, fillScheduleRuleAndContinue, + openAddFilterPopover, waitForAlertsToPopulate, } from '../../../../tasks/create_new_rule'; @@ -70,6 +73,7 @@ import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; import { openRuleManagementPageViaBreadcrumbs } from '../../../../tasks/rules_management'; import { getDetails, waitForTheRuleToBeExecuted } from '../../../../tasks/rule_details'; +import { fillAddFilterForm } from '../../../../tasks/search_bar'; import { CREATE_RULE_URL } from '../../../../urls/navigation'; @@ -176,5 +180,17 @@ describe('Custom query rules', { tags: ['@ess', '@serverless'] }, () => { cy.get(RULE_NAME_HEADER).should('contain', 'Edit rule settings'); }); + + it('Adds filter on define step', () => { + visit(CREATE_RULE_URL); + fillDefineCustomRule(rule); + openAddFilterPopover(); + fillAddFilterForm({ + key: 'host.name', + operator: 'exists', + }); + // Check that newly added filter exists + cy.get(GLOBAL_SEARCH_BAR_FILTER_ITEM).should('have.text', 'host.name: exists'); + }); }); }); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts index 86309e80fd7e..3deabd6afa16 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/inspect/inspect_button.cy.ts @@ -24,64 +24,69 @@ import { postDataView } from '../../../tasks/api_calls/common'; const DATA_VIEW = 'auditbeat-*'; -describe('Inspect Explore pages', { tags: ['@ess', '@serverless', '@brokenInServerless'] }, () => { - before(() => { - // illegal_argument_exception: unknown setting [index.lifecycle.name] - cy.task('esArchiverLoad', { archiveName: 'risk_users' }); - cy.task('esArchiverLoad', { archiveName: 'risk_hosts' }); +// FLAKY: https://github.com/elastic/kibana/issues/178367 +describe.skip( + 'Inspect Explore pages', + { tags: ['@ess', '@serverless', '@brokenInServerless'] }, + () => { + before(() => { + // illegal_argument_exception: unknown setting [index.lifecycle.name] + cy.task('esArchiverLoad', { archiveName: 'risk_users' }); + cy.task('esArchiverLoad', { archiveName: 'risk_hosts' }); - login(); - // Create and select data view - postDataView(DATA_VIEW); - }); + login(); + // Create and select data view + postDataView(DATA_VIEW); + }); - after(() => { - cy.task('esArchiverUnload', 'risk_users'); - cy.task('esArchiverUnload', 'risk_hosts'); - }); + after(() => { + cy.task('esArchiverUnload', 'risk_users'); + cy.task('esArchiverUnload', 'risk_hosts'); + }); - INSPECT_BUTTONS_IN_SECURITY.forEach(({ pageName, url, lensVisualizations, tables }) => { - /** - * Group all tests of a page into one "it" call to improve speed - */ - it(`inspect ${pageName} page`, () => { - login(); + INSPECT_BUTTONS_IN_SECURITY.forEach(({ pageName, url, lensVisualizations, tables }) => { + /** + * Group all tests of a page into one "it" call to improve speed + */ + it(`inspect ${pageName} page`, () => { + login(); - visitWithTimeRange(url, { - visitOptions: { - onLoad: () => { - waitForWelcomePanelToBeLoaded(); - selectDataView(DATA_VIEW); + visitWithTimeRange(url, { + visitOptions: { + onLoad: () => { + waitForWelcomePanelToBeLoaded(); + selectDataView(DATA_VIEW); + }, }, - }, - }); + }); + + lensVisualizations.forEach((lens) => { + cy.log(`inspects the ${lens.title} visualization`); + openTab(lens.tab); - lensVisualizations.forEach((lens) => { - cy.log(`inspects the ${lens.title} visualization`); - openTab(lens.tab); + openLensVisualizationsInspectModal(lens, () => { + cy.get(INSPECT_MODAL).should('be.visible'); + cy.get(INSPECT_MODAL_INDEX_PATTERN).should( + 'contain.text', + lens.customIndexPattern ? lens.customIndexPattern : DATA_VIEW + ); + }); + }); + + tables.forEach((table) => { + cy.log(`inspects the ${table.title}`); + openTab(table.tab); - openLensVisualizationsInspectModal(lens, () => { + openTableInspectModal(table); cy.get(INSPECT_MODAL).should('be.visible'); cy.get(INSPECT_MODAL_INDEX_PATTERN).should( 'contain.text', - lens.customIndexPattern ? lens.customIndexPattern : DATA_VIEW + table.customIndexPattern ? table.customIndexPattern : DATA_VIEW ); - }); - }); - tables.forEach((table) => { - cy.log(`inspects the ${table.title}`); - openTab(table.tab); - - openTableInspectModal(table); - cy.get(INSPECT_MODAL).should('be.visible'); - cy.get(INSPECT_MODAL_INDEX_PATTERN).should( - 'contain.text', - table.customIndexPattern ? table.customIndexPattern : DATA_VIEW - ); - - closesModal(); + closesModal(); + }); }); }); - }); -}); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts index 0b521f68a787..992b93713577 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/create_new_rule.ts @@ -60,6 +60,9 @@ export const CUSTOM_QUERY_INPUT = '[data-test-subj="queryInput"]'; export const CUSTOM_QUERY_BAR = '[data-test-subj="detectionEngineStepDefineRuleQueryBar"]'; +export const QUERY_BAR_ADD_FILTER = + '[data-test-subj="detectionEngineStepDefineRuleQueryBar"] [data-test-subj="addFilter"]'; + export const THREAT_MAPPING_COMBO_BOX_INPUT = '[data-test-subj="threatMatchInput"] [data-test-subj="fieldAutocompleteComboBox"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts index 62091e0e39a5..c0d40a7bd764 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/create_new_rule.ts @@ -122,6 +122,7 @@ import { RULE_INDICES, ALERTS_INDEX_BUTTON, INVESTIGATIONS_INPUT, + QUERY_BAR_ADD_FILTER, } from '../screens/create_new_rule'; import { INDEX_SELECTOR, @@ -408,7 +409,7 @@ export const removeAlertsIndex = () => { }); }; -export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => { +export const fillDefineCustomRule = (rule: QueryRuleCreateProps) => { if (rule.data_view_id !== undefined) { cy.get(DATA_VIEW_OPTION).click(); cy.get(DATA_VIEW_COMBO_BOX).type(`${rule.data_view_id}{enter}`); @@ -416,6 +417,10 @@ export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => { cy.get(CUSTOM_QUERY_INPUT) .first() .type(rule.query || ''); +}; + +export const fillDefineCustomRuleAndContinue = (rule: QueryRuleCreateProps) => { + fillDefineCustomRule(rule); cy.get(DEFINE_CONTINUE_BUTTON).should('exist').click({ force: true }); }; @@ -878,3 +883,7 @@ export const uncheckLoadQueryDynamically = () => { cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).click({ force: true }); cy.get(LOAD_QUERY_DYNAMICALLY_CHECKBOX).should('not.be.checked'); }; + +export const openAddFilterPopover = () => { + cy.get(QUERY_BAR_ADD_FILTER).click(); +}; diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index a906808fc5ae..71f6cf3db7c4 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -167,5 +167,6 @@ "@kbn/typed-react-router-config", "@kbn/ftr-common-functional-ui-services", "@kbn/infra-forge", + "@kbn/observability-ai-assistant-app-plugin", ] } diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts index e8ee1743dc94..2297e65d4824 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/alert_documents.ts @@ -36,6 +36,7 @@ import { SPACE_IDS, TAGS, VERSION, + ALERT_CONSECUTIVE_MATCHES, } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../../ftr_provider_context'; import { createEsQueryRule } from './helpers/alerting_api_helper'; @@ -113,6 +114,7 @@ export default function ({ getService }: FtrProviderContext) { expect(typeof hits1[ALERT_UUID]).to.be('string'); expect(typeof hits1[ALERT_URL]).to.be('string'); expect(typeof hits1[VERSION]).to.be('string'); + expect(typeof hits1[ALERT_CONSECUTIVE_MATCHES]).to.be('number'); // remove fields we aren't going to compare directly const fields = [ @@ -129,6 +131,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.uuid', 'kibana.alert.url', 'kibana.version', + 'kibana.alert.consecutive_matches', ]; for (const field of fields) { @@ -240,6 +243,7 @@ export default function ({ getService }: FtrProviderContext) { expect(hits2[EVENT_ACTION]).to.be('active'); expect(hits1[ALERT_DURATION]).to.not.be.lessThan(0); expect(hits2[ALERT_DURATION]).not.to.be(0); + expect(hits2[ALERT_CONSECUTIVE_MATCHES]).to.be.greaterThan(hits1[ALERT_CONSECUTIVE_MATCHES]); // remove fields we know will be different const fields = [ @@ -249,6 +253,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.flapping_history', 'kibana.alert.reason', 'kibana.alert.rule.execution.uuid', + 'kibana.alert.consecutive_matches', ]; for (const field of fields) { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts b/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts index fcda3e0c62cb..e104a7d25520 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/alerting/summary_actions.ts @@ -60,6 +60,7 @@ export default function ({ getService }: FtrProviderContext) { 'kibana.alert.uuid', 'kibana.alert.url', 'kibana.version', + 'kibana.alert.consecutive_matches', ]; afterEach(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts index dba49769ed78..276c940c54c7 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_component_templates.ts @@ -119,7 +119,6 @@ export default function ({ getService }: FtrProviderContext) { const { body } = await getOneComponentTemplate(COMPONENT_NAME).expect(200); expect(body).to.eql({ - isDeprecated: false, name: COMPONENT_NAME, ...COMPONENT, _kbnMeta: { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_templates.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_templates.ts index 82fd6dd057ae..1ec1cdc31b7c 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_templates.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/index_templates.ts @@ -103,6 +103,7 @@ export default function ({ getService }: FtrProviderContext) { 'hasAliases', 'hasMappings', '_kbnMeta', + 'allowAutoCreate', 'composedOf', 'ignoreMissingComponentTemplates', ].sort(); @@ -124,6 +125,7 @@ export default function ({ getService }: FtrProviderContext) { 'indexPatterns', 'template', '_kbnMeta', + 'allowAutoCreate', 'composedOf', 'ignoreMissingComponentTemplates', ].sort(); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts index 2db41e48db09..75413907fbd3 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/response_headers.ts @@ -6,6 +6,7 @@ */ import expect from 'expect'; +import cspParser from 'content-security-policy-parser'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { @@ -13,7 +14,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); describe('security/response_headers', function () { - const defaultCSP = `script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline'; frame-ancestors 'self'`; + const baseCSP = `script-src 'report-sample' 'self'; worker-src 'report-sample' 'self' blob:; style-src 'report-sample' 'self' 'unsafe-inline'; frame-ancestors 'self'`; const defaultCOOP = 'same-origin'; const defaultPermissionsPolicy = 'camera=(), display-capture=(), fullscreen=(self), geolocation=(), microphone=(), web-share=()'; @@ -29,7 +30,7 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); expect(header).toBeDefined(); - expect(header['content-security-policy']).toEqual(defaultCSP); + expectMatchesCSP(baseCSP, header['content-security-policy'] ?? ''); expect(header['cross-origin-opener-policy']).toEqual(defaultCOOP); expect(header['permissions-policy']).toEqual(defaultPermissionsPolicy); expect(header['strict-transport-security']).toEqual(defaultStrictTransportSecurity); @@ -45,7 +46,7 @@ export default function ({ getService }: FtrProviderContext) { .expect(200); expect(header).toBeDefined(); - expect(header['content-security-policy']).toEqual(defaultCSP); + expectMatchesCSP(baseCSP, header['content-security-policy'] ?? ''); expect(header['cross-origin-opener-policy']).toEqual(defaultCOOP); expect(header['permissions-policy']).toEqual(defaultPermissionsPolicy); expect(header['strict-transport-security']).toEqual(defaultStrictTransportSecurity); @@ -55,3 +56,19 @@ export default function ({ getService }: FtrProviderContext) { }); }); } + +/** + * + * @param expectedCSP The minimum set of directives and values we expect to see + * @param actualCSP The actual set of directives and values + */ +function expectMatchesCSP(expectedCSP: string, actualCSP: string) { + const expectedCSPMap = cspParser(expectedCSP); + const actualCSPMap = cspParser(actualCSP); + for (const [expectedDirective, expectedValues] of expectedCSPMap) { + expect(actualCSPMap.has(expectedDirective)).toBe(true); + for (const expectedValue of expectedValues) { + expect(actualCSPMap.get(expectedDirective)).toContain(expectedValue); + } + } +} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts index d803cf06b4c5..78732f6b5282 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/telemetry/telemetry_config.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { expect } from 'expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function telemetryConfigTest({ getService }: FtrProviderContext) { @@ -23,10 +24,11 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) }; it('GET should get the default config', async () => { - await supertest + const { body } = await supertest .get('/api/telemetry/v2/config') .set(svlCommonApi.getCommonRequestHeader()) - .expect(200, baseConfig); + .expect(200); + expect(body).toMatchObject(baseConfig); }); it('GET should get updated labels after dynamically updating them', async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts index 2be964bc579b..41a02950c4f0 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/telemetry/telemetry_config.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { expect } from 'expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default function telemetryConfigTest({ getService }: FtrProviderContext) { @@ -23,10 +24,11 @@ export default function telemetryConfigTest({ getService }: FtrProviderContext) }; it('GET should get the default config', async () => { - await supertest + const { body } = await supertest .get('/api/telemetry/v2/config') .set(svlCommonApi.getCommonRequestHeader()) - .expect(200, baseConfig); + .expect(200); + expect(body).toMatchObject(baseConfig); }); it('GET should get updated labels after dynamically updating them', async () => { diff --git a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts index d453101e55e2..32349e591984 100644 --- a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts +++ b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts @@ -23,6 +23,7 @@ const deploymentAgnosticFunctionalServices = _.pick(functionalServices, [ 'canvasElement', 'cases', 'comboBox', + 'selectable', 'dashboardAddPanel', 'dashboardBadgeActions', 'dashboardCustomizePanel', diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts index a5274115cfba..ffc9b434ebe3 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover.ts @@ -31,7 +31,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { defaultIndex: 'logstash-*', }; - describe('discover test', function describeIndexTests() { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('discover test', function describeIndexTests() { before(async function () { log.debug('load kibana index with default index pattern'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts index 88de8194db3e..a02365ed056e 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group1/_discover_histogram.ts @@ -32,7 +32,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const queryBar = getService('queryBar'); - describe('discover histogram', function describeIndexTests() { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('discover histogram', function describeIndexTests() { before(async () => { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await esArchiver.load('test/functional/fixtures/es_archiver/long_window_logstash'); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts index 1a82e4b73b2b..9c654b518d6f 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover_ml_uptime/discover/search_source_alert.ts @@ -341,7 +341,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await titleElem.getAttribute('value')).to.equal(dataView); }; - describe('Search source Alert', () => { + // Failing: See https://github.com/elastic/kibana/issues/176882 + describe.skip('Search source Alert', () => { before(async () => { await security.testUser.setRoles(['discover_alert']); await PageObjects.svlCommonPage.loginAsAdmin(); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/index.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/index.ts new file mode 100644 index 000000000000..68b59f317407 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './logs_data'; diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/logs_data.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/logs_data.ts new file mode 100644 index 000000000000..f48625686f0a --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/data/logs_data.ts @@ -0,0 +1,158 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { generateLongId, generateShortId, log, timerange } from '@kbn/apm-synthtrace-client'; +import moment from 'moment'; + +enum LogLevel { + INFO = 'info', + DEBUG = 'debug', + ERROR = 'error', +} +interface MessageWithLevel { + message: string; + level: LogLevel; +} +interface Cluster { + clusterId: string; + clusterName: string; +} + +export function getLogsForDataset({ + dataset, + to, + count = 1, + isMalformed = false, +}: { + dataset: string; + to: moment.MomentInput; + count?: number; + isMalformed?: boolean; +}) { + return timerange(moment(to).subtract(count, 'minute'), moment(to)) + .interval('1m') + .rate(1) + .generator((timestamp) => { + return Array(count) + .fill(0) + .flatMap((_, index) => [ + createLogRecord( + timestamp, + dataset, + MESSAGE_LOG_LEVELS[index % MESSAGE_LOG_LEVELS.length], + SERVICE_NAMES[index % SERVICE_NAMES.length], + CLUSTER[index % CLUSTER.length], + CLOUD_PROVIDERS[index % CLOUD_PROVIDERS.length], + CLOUD_REGION[index % CLOUD_REGION.length], + isMalformed + ), + ]); + }); +} + +export function getInitialTestLogs({ to, count = 1 }: { to: string; count?: number }) { + return timerange(moment(to).subtract(count, 'minute'), moment(to)) + .interval('1m') + .rate(1) + .generator((timestamp) => { + return Array(count) + .fill(0) + .flatMap((_, index) => [ + createLogRecord( + timestamp, + datasetNames[0], + MESSAGE_LOG_LEVELS[0], + SERVICE_NAMES[0], + CLUSTER[0], + CLOUD_PROVIDERS[0], + CLOUD_REGION[0], + false + ), + createLogRecord( + timestamp, + datasetNames[1], + MESSAGE_LOG_LEVELS[1], + SERVICE_NAMES[1], + CLUSTER[1], + CLOUD_PROVIDERS[1], + CLOUD_REGION[1], + false + ), + createLogRecord( + timestamp, + datasetNames[2], + MESSAGE_LOG_LEVELS[2], + SERVICE_NAMES[2], + CLUSTER[2], + CLOUD_PROVIDERS[2], + CLOUD_REGION[2], + false + ), + ]); + }); +} + +export function createLogRecord( + timestamp: number, + dataset: string, + msg: MessageWithLevel, + serviceName: string, + cluster: Cluster, + cloudProvider: string, + cloudRegion: string, + isMalformed = false +): ReturnType { + return log + .create() + .dataset(dataset) + .message(msg.message) + .logLevel(isMalformed ? MORE_THAN_1024_CHARS : msg.level) + .service(serviceName) + .namespace(defaultNamespace) + .defaults({ + 'trace.id': generateShortId(), + 'agent.name': 'synth-agent', + 'orchestrator.cluster.name': cluster.clusterName, + 'orchestrator.cluster.id': cluster.clusterId, + 'orchestrator.resource.id': generateShortId(), + 'cloud.provider': cloudProvider, + 'cloud.region': cloudRegion, + 'cloud.availability_zone': isMalformed + ? MORE_THAN_1024_CHARS // "ignore_above": 1024 in mapping + : `${cloudRegion}a`, + 'cloud.project.id': generateShortId(), + 'cloud.instance.id': generateShortId(), + 'log.file.path': `/logs/${generateLongId()}/error.txt`, + }) + .timestamp(timestamp); +} + +export const datasetNames = ['synth.1', 'synth.2', 'synth.3']; +export const defaultNamespace = 'default'; + +// Logs Data logic +const MESSAGE_LOG_LEVELS: MessageWithLevel[] = [ + { message: 'A simple log', level: LogLevel.INFO }, + { + message: 'Another log message', + level: LogLevel.DEBUG, + }, + { message: 'Error with certificate: "ca_trusted_fingerprint"', level: LogLevel.ERROR }, +]; +const CLOUD_PROVIDERS = ['gcp', 'aws', 'azure']; +const CLOUD_REGION = ['eu-central-1', 'us-east-1', 'area-51']; + +const CLUSTER = [ + { clusterId: generateShortId(), clusterName: 'synth-cluster-1' }, + { clusterId: generateShortId(), clusterName: 'synth-cluster-2' }, + { clusterId: generateShortId(), clusterName: 'synth-cluster-3' }, +]; + +const SERVICE_NAMES = [`synth-service-0`, `synth-service-1`, `synth-service-2`]; + +const MORE_THAN_1024_CHARS = + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?'; diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts new file mode 100644 index 000000000000..6b5b9f017c46 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts @@ -0,0 +1,116 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + 'svlCommonNavigation', + 'svlCommonPage', + ]); + const testSubjects = getService('testSubjects'); + const synthtrace = getService('svlLogsSynthtraceClient'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality flyout', () => { + before(async () => { + await PageObjects.svlCommonPage.loginWithRole('admin'); + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('opens the flyout for the right dataset', async () => { + const testDatasetName = datasetNames[1]; + + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + await testSubjects.existOrFail( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFlyoutTitle + ); + }); + + // Fails on Serverless. TODO: Need to update the UI as well as the test + it.skip('shows the correct last activity', async () => { + const testDatasetName = datasetNames[0]; + + // Update last activity for the dataset + await PageObjects.datasetQuality.closeFlyout(); + await synthtrace.index( + getLogsForDataset({ to: new Date().toISOString(), count: 1, dataset: testDatasetName }) + ); + await PageObjects.datasetQuality.refreshTable(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const testDatasetRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === testDatasetName + ); + + const lastActivityText = (await cols['Last Activity'].getCellTexts())[testDatasetRowIndex]; + + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + const lastActivityTextExists = await PageObjects.datasetQuality.doestTextExistInFlyout( + lastActivityText, + `[data-test-subj=${PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFlyoutFieldValue}]` + ); + expect(lastActivityTextExists).to.eql(true); + }); + + it('shows the integration details', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + const apacheIntegrationId = 'apache'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + await PageObjects.datasetQuality.openDatasetFlyout(apacheAccessDatasetHumanName); + + const integrationNameElements = await PageObjects.datasetQuality.getFlyoutElementsByText( + '[data-test-subj=datasetQualityFlyoutFieldValue]', + apacheIntegrationId + ); + + expect(integrationNameElements.length).to.eql(1); + }); + + it('goes to log explorer page when open button is clicked', async () => { + const testDatasetName = datasetNames[2]; + await PageObjects.datasetQuality.openDatasetFlyout(testDatasetName); + + await (await PageObjects.datasetQuality.getFlyoutLogsExplorerButton()).click(); + + // Confirm dataset selector text in observability logs explorer + const datasetSelectorText = + await PageObjects.observabilityLogsExplorer.getDataSourceSelectorButtonText(); + expect(datasetSelectorText).to.eql(testDatasetName); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts new file mode 100644 index 000000000000..c4de6141d6d1 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_summary.ts @@ -0,0 +1,136 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'datasetQuality', + 'svlCommonNavigation', + 'svlCommonPage', + ]); + const synthtrace = getService('svlLogsSynthtraceClient'); + const browser = getService('browser'); + const retry = getService('retry'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality summary', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.svlCommonPage.loginWithRole('admin'); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('shows poor, degraded and good count', async () => { + const summary = await PageObjects.datasetQuality.parseSummaryPanel(); + expect(summary).to.eql({ + datasetHealthPoor: '0', + datasetHealthDegraded: '0', + datasetHealthGood: '3', + activeDatasets: '0 of 3', + estimatedData: '0 Bytes', + }); + }); + + it('updates the poor count when degraded docs are ingested', async () => { + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[2], + isMalformed: true, + }) + ); + + await browser.refresh(); + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const summary = await PageObjects.datasetQuality.parseSummaryPanel(); + const { estimatedData, ...restOfSummary } = summary; + expect(restOfSummary).to.eql({ + datasetHealthPoor: '1', + datasetHealthDegraded: '0', + datasetHealthGood: '2', + activeDatasets: '1 of 3', + }); + }); + }); + + it('updates the degraded count when degraded docs are ingested', async () => { + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[1], + isMalformed: true, + }) + ); + + // Index healthy documents + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 10, + dataset: datasetNames[1], + isMalformed: false, + }) + ); + + await browser.refresh(); + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const { estimatedData, ...restOfSummary } = + await PageObjects.datasetQuality.parseSummaryPanel(); + expect(restOfSummary).to.eql({ + datasetHealthPoor: '1', + datasetHealthDegraded: '1', + datasetHealthGood: '1', + activeDatasets: '2 of 3', + }); + }); + }); + + it('updates active datasets and estimated data KPIs', async () => { + const { estimatedData: _existingEstimatedData } = + await PageObjects.datasetQuality.parseSummaryPanel(); + + // Index document at current time to mark dataset as active + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 4, + dataset: datasetNames[0], + isMalformed: false, + }) + ); + + await browser.refresh(); // Summary panel doesn't update reactively + await PageObjects.datasetQuality.waitUntilSummaryPanelLoaded(); + + await retry.try(async () => { + const { activeDatasets: updatedActiveDatasets, estimatedData: _updatedEstimatedData } = + await PageObjects.datasetQuality.parseSummaryPanel(); + + expect(updatedActiveDatasets).to.eql('3 of 3'); + + // TODO: Investigate. This fails on Serverless. + // expect(_updatedEstimatedData).to.not.eql(_existingEstimatedData); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts new file mode 100644 index 000000000000..e5b1ad738341 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts @@ -0,0 +1,240 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { datasetNames, defaultNamespace, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'navigationalSearch', + 'observabilityLogsExplorer', + 'datasetQuality', + 'svlCommonNavigation', + 'svlCommonPage', + ]); + const synthtrace = getService('svlLogsSynthtraceClient'); + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality table', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.svlCommonPage.loginWithRole('admin'); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('shows the right number of rows in correct order', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('descending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql([...datasetNames].reverse()); + + const namespaceCol = cols.Namespace; + const namespaceColCellTexts = await namespaceCol.getCellTexts(); + expect(namespaceColCellTexts).to.eql([defaultNamespace, defaultNamespace, defaultNamespace]); + + const degradedDocsCol = cols['Degraded Docs']; + const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%']); + + const lastActivityCol = cols['Last Activity']; + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(lastActivityColCellTexts).to.eql([ + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + ]); + }); + + it('shows degraded docs percentage', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('ascending'); + + const degradedDocsCol = cols['Degraded Docs']; + const degradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(degradedDocsColCellTexts).to.eql(['0%', '0%', '0%']); + + // Index malformed document with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 1, + dataset: datasetNames[2], + isMalformed: true, + }) + ); + + // Set time range to Last 5 minute + const filtersContainer = await testSubjects.find( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFiltersContainer + ); + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 5, 'm'); + + const updatedDegradedDocsColCellTexts = await degradedDocsCol.getCellTexts(); + expect(updatedDegradedDocsColCellTexts[2]).to.not.eql('0%'); + }); + + it('shows the updated size of the index', async () => { + const testDatasetIndex = 2; + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + await datasetNameCol.sort('ascending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const datasetToUpdateRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === datasetNames[testDatasetIndex] + ); + + const sizeColCellTexts = await cols.Size.getCellTexts(); + const beforeSize = sizeColCellTexts[datasetToUpdateRowIndex]; + + // Index documents with current timestamp + await synthtrace.index( + getLogsForDataset({ + to: Date.now(), + count: 4, + dataset: datasetNames[testDatasetIndex], + isMalformed: false, + }) + ); + + const colsAfterUpdate = await PageObjects.datasetQuality.parseDatasetTable(); + + // Assert that size has changed + await retry.tryForTime(15000, async () => { + // Refresh the table + await PageObjects.datasetQuality.refreshTable(); + const updatedSizeColCellTexts = await colsAfterUpdate.Size.getCellTexts(); + expect(updatedSizeColCellTexts[datasetToUpdateRowIndex]).to.not.eql(beforeSize); + }); + }); + + it('sorts by dataset name', async () => { + // const header = await PageObjects.datasetQuality.getDatasetTableHeader('Dataset Name'); + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + expect(Object.keys(cols).length).to.eql(7); + + const datasetNameCol = cols['Dataset Name']; + + // Sort ascending + await datasetNameCol.sort('ascending'); + const cellTexts = await datasetNameCol.getCellTexts(); + + const datasetNamesAsc = [...datasetNames].sort(); + + expect(cellTexts).to.eql(datasetNamesAsc); + }); + + it('shows dataset from integration', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + + // Sort ascending + await datasetNameCol.sort('ascending'); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + + const datasetNamesAsc = [...datasetNames, apacheAccessDatasetHumanName].sort(); + + // Assert there are 4 rows + expect(datasetNameColCellTexts.length).to.eql(4); + + expect(datasetNameColCellTexts).to.eql(datasetNamesAsc); + }); + + it('goes to log explorer page when opened', async () => { + const rowIndexToOpen = 1; + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const actionsCol = cols.Actions; + + const datasetName = (await datasetNameCol.getCellTexts())[rowIndexToOpen]; + await (await actionsCol.getCellChildren('a'))[rowIndexToOpen].click(); // Click "Open" + + // Confirm dataset selector text in observability logs explorer + const datasetSelectorText = + await PageObjects.observabilityLogsExplorer.getDataSourceSelectorButtonText(); + expect(datasetSelectorText).to.eql(datasetName); + }); + + it('shows the last activity when in time range', async () => { + await PageObjects.datasetQuality.navigateTo(); + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const lastActivityCol = cols['Last Activity']; + const datasetNameCol = cols['Dataset Name']; + + // Set time range to Last 1 minute + const filtersContainer = await testSubjects.find( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFiltersContainer + ); + + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 1, 's'); + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(lastActivityColCellTexts).to.eql([ + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + PageObjects.datasetQuality.texts.noActivityText, + ]); + + const datasetToUpdate = datasetNames[0]; + await synthtrace.index( + getLogsForDataset({ to: new Date().toISOString(), count: 1, dataset: datasetToUpdate }) + ); + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + const datasetToUpdateRowIndex = datasetNameColCellTexts.findIndex( + (dName: string) => dName === datasetToUpdate + ); + + await PageObjects.datasetQuality.setDatePickerLastXUnits(filtersContainer, 1, 'h'); + + await retry.tryForTime(5000, async () => { + const updatedLastActivityColCellTexts = await lastActivityCol.getCellTexts(); + expect(updatedLastActivityColCellTexts[datasetToUpdateRowIndex]).to.not.eql( + PageObjects.datasetQuality.texts.noActivityText + ); + }); + }); + + it('hides inactive datasets', async () => { + // Get number of rows with Last Activity not equal to "No activity in the selected timeframe" + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const lastActivityCol = cols['Last Activity']; + const lastActivityColCellTexts = await lastActivityCol.getCellTexts(); + const activeDatasets = lastActivityColCellTexts.filter( + (activity) => activity !== PageObjects.datasetQuality.texts.noActivityText + ); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + const rows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(rows.length).to.eql(activeDatasets.length); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts new file mode 100644 index 000000000000..d80dc3b72b30 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts @@ -0,0 +1,120 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { datasetNames, getInitialTestLogs, getLogsForDataset } from './data'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'common', + 'observabilityLogsExplorer', + 'datasetQuality', + 'svlCommonNavigation', + 'svlCommonPage', + ]); + const synthtrace = getService('svlLogsSynthtraceClient'); + const testSubjects = getService('testSubjects'); + const to = '2024-01-01T12:00:00.000Z'; + + describe('Dataset quality table filters', () => { + before(async () => { + await synthtrace.index(getInitialTestLogs({ to, count: 4 })); + await PageObjects.svlCommonPage.loginWithRole('admin'); + await PageObjects.datasetQuality.navigateTo(); + }); + + after(async () => { + await synthtrace.clean(); + }); + + it('hides inactive datasets when toggled', async () => { + const initialRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(initialRows.length).to.eql(3); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + + const afterToggleRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(afterToggleRows.length).to.eql(1); + + await PageObjects.datasetQuality.toggleShowInactiveDatasets(); + + const afterReToggleRows = await PageObjects.datasetQuality.getDatasetTableRows(); + expect(afterReToggleRows.length).to.eql(3); + }); + + it('shows full dataset names when toggled', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql(datasetNames); + + await PageObjects.datasetQuality.toggleShowFullDatasetNames(); + + const datasetNameColCellTextsAfterToggle = await datasetNameCol.getCellTexts(); + const duplicateNames = datasetNames.map((name) => `${name}\n${name}`); + expect(datasetNameColCellTextsAfterToggle).to.eql(duplicateNames); + + await PageObjects.datasetQuality.toggleShowFullDatasetNames(); + const datasetNameColCellTextsAfterReToggle = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTextsAfterReToggle).to.eql(datasetNames); + }); + + it('searches the datasets', async () => { + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql(datasetNames); + + // Search for a dataset + await testSubjects.setValue( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFilterBarFieldSearch, + datasetNames[2] + ); + + const colsAfterSearch = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameColAfterSearch = colsAfterSearch['Dataset Name']; + const datasetNameColCellTextsAfterSearch = await datasetNameColAfterSearch.getCellTexts(); + expect(datasetNameColCellTextsAfterSearch).to.eql([datasetNames[2]]); + await testSubjects.setValue( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityFilterBarFieldSearch, + '' + ); + }); + + it('filters for integration', async () => { + const apacheAccessDatasetName = 'apache.access'; + const apacheAccessDatasetHumanName = 'Apache access logs'; + const apacheIntegrationName = 'Apache HTTP Server'; + + await PageObjects.observabilityLogsExplorer.navigateTo(); + + // Add initial integrations + await PageObjects.observabilityLogsExplorer.setupInitialIntegrations(); + + // Index 10 logs for `logs-apache.access` dataset + await synthtrace.index( + getLogsForDataset({ to, count: 10, dataset: apacheAccessDatasetName }) + ); + + await PageObjects.datasetQuality.navigateTo(); + + const cols = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameCol = cols['Dataset Name']; + const datasetNameColCellTexts = await datasetNameCol.getCellTexts(); + expect(datasetNameColCellTexts).to.eql([apacheAccessDatasetHumanName, ...datasetNames]); + + // Filter for integration + await PageObjects.datasetQuality.filterForIntegrations([apacheIntegrationName]); + + const colsAfterFilter = await PageObjects.datasetQuality.parseDatasetTable(); + const datasetNameColAfterFilter = colsAfterFilter['Dataset Name']; + const datasetNameColCellTextsAfterFilter = await datasetNameColAfterFilter.getCellTexts(); + expect(datasetNameColCellTextsAfterFilter).to.eql([apacheAccessDatasetHumanName]); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/home.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/home.ts new file mode 100644 index 000000000000..cb3e2605925b --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/home.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ getPageObjects, getService }: FtrProviderContext) { + const PageObjects = getPageObjects([ + 'datasetQuality', + 'observabilityLogsExplorer', + 'svlCommonNavigation', + 'svlCommonPage', + ]); + + const testSubjects = getService('testSubjects'); + + describe('Dataset quality home', () => { + before(async () => { + await PageObjects.svlCommonPage.loginWithRole('admin'); + }); + + it('dataset quality table exists', async () => { + await PageObjects.datasetQuality.navigateTo(); + await testSubjects.existOrFail( + PageObjects.datasetQuality.testSubjectSelectors.datasetQualityTable + ); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/index.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/index.ts new file mode 100644 index 000000000000..0706610dd475 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Dataset Quality', function () { + loadTestFile(require.resolve('./home')); + loadTestFile(require.resolve('./dataset_quality_summary')); + loadTestFile(require.resolve('./dataset_quality_table')); + loadTestFile(require.resolve('./dataset_quality_table_filters')); + loadTestFile(require.resolve('./dataset_quality_flyout')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/index.ts b/x-pack/test_serverless/functional/test_suites/observability/index.ts index c8e82d601763..0e93bd7c0ddd 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/index.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/index.ts @@ -12,6 +12,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./landing_page')); loadTestFile(require.resolve('./navigation')); loadTestFile(require.resolve('./observability_logs_explorer')); + loadTestFile(require.resolve('./dataset_quality')); loadTestFile(require.resolve('./rules/rules_list')); loadTestFile(require.resolve('./cases')); loadTestFile(require.resolve('./advanced_settings')); diff --git a/yarn.lock b/yarn.lock index fb346b620f1a..7411655d2dbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1333,7 +1333,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.7", "@babel/runtime@^7.23.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.6.tgz#c05e610dc228855dc92ef1b53d07389ed8ab521d" integrity sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ== @@ -1743,10 +1743,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@93.2.0": - version "93.2.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-93.2.0.tgz#ebe74c4aefcf78cd72a8db7332666a7aa0681954" - integrity sha512-YPJM+hs1Ouv7Fc04JZiEOT5nCNBMFKsQwKmmGqzEwpMDsXpx6NKT0s0AlRO43JabTWBHL9yIRE4aORhAzH6pBQ== +"@elastic/eui@93.3.0": + version "93.3.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-93.3.0.tgz#3fc1052aa4b0192deadbee9c9ac48409d7df2cf4" + integrity sha512-0JNaioZISY8GGt3G+piER4U+e82jQ41cvE2Wz7WotuWiRYJEWVoJrtERWE/DCXubAj95XVCLSetWuQce3EGzmw== dependencies: "@hello-pangea/dnd" "^16.3.0" "@types/lodash" "^4.14.198" @@ -5332,6 +5332,10 @@ version "0.0.0" uid "" +"@kbn/observability-ai-assistant-app-plugin@link:x-pack/plugins/observability_solution/observability_ai_assistant_app": + version "0.0.0" + uid "" + "@kbn/observability-ai-assistant-plugin@link:x-pack/plugins/observability_solution/observability_ai_assistant": version "0.0.0" uid "" @@ -10173,6 +10177,13 @@ "@types/prop-types" "*" "@types/react" "*" +"@types/react-recompose@^0.33.4": + version "0.33.4" + resolved "https://registry.yarnpkg.com/@types/react-recompose/-/react-recompose-0.33.4.tgz#bf47388b644c3b0a30226870e216d78564a41624" + integrity sha512-66LAtWIrfT5yvw01xB4jFNeYuP6b4QTdFrrkvD6OlfGaLGqMNGXSia5VJa/wV4dH4z0gU8KnveQl/4Oi2e/vIg== + dependencies: + "@types/react" "*" + "@types/react-redux@^7.1.20": version "7.1.24" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.24.tgz#6caaff1603aba17b27d20f8ad073e4c077e975c0" @@ -10254,13 +10265,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/recompose@^0.30.10": - version "0.30.10" - resolved "https://registry.yarnpkg.com/@types/recompose/-/recompose-0.30.10.tgz#b6ab1743c279f463f2b62ccb90b82433dcea63c5" - integrity sha512-oF1ulwi5Tz7L9jZE870CCyD6n/nvCLNaGMp/oMEnm4gd7doc67rSHtypM6MFDiI6BKjTXoR87CwhET5JJInDFQ== - dependencies: - "@types/react" "*" - "@types/redux-actions@^2.6.1": version "2.6.1" resolved "https://registry.yarnpkg.com/@types/redux-actions/-/redux-actions-2.6.1.tgz#0940e97fa35ad3004316bddb391d8e01d2efa605" @@ -11754,7 +11758,7 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@^2.0.0, asap@~2.0.3: +asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -13172,7 +13176,7 @@ chance@1.0.18: resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.18.tgz#79788fe6fca4c338bf404321c347eecc80f969ee" integrity sha512-g9YLQVHVZS/3F+zIicfB58vjcxopvYQRp7xHzvyDFDhXH1aRZI/JhwSAO0X5qYiQluoGnaNAU6wByD2KTxJN1A== -change-emitter@^0.1.2: +change-emitter@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= @@ -13855,6 +13859,11 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" +content-security-policy-parser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/content-security-policy-parser/-/content-security-policy-parser-0.6.0.tgz#b361d8587dee0e92def19d308cb23e8d32cc26f6" + integrity sha512-wejtC/p+HLNQ7uaWgg1o3CKHhE8QXC9fJ2GCY0X82L5HUNtZSq1dmUvNSHHEb6R7LS02fpmRBq/vP8i4/+9KCg== + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -13957,11 +13966,6 @@ core-js-pure@^3.8.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.26.0.tgz#7ad8a5dd7d910756f3124374b50026e23265ca9a" integrity sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA== -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" @@ -17104,19 +17108,6 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.1: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -18718,7 +18709,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.5, hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^2.5.5, hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -20043,14 +20034,6 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isomorphic-unfetch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" @@ -23316,7 +23299,7 @@ node-fetch-h2@^2.3.0: dependencies: http2-client "^1.2.5" -node-fetch@^1.0.1, node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -25348,13 +25331,6 @@ promise.prototype.finally@^3.1.0: es-abstract "^1.9.0" function-bind "^1.1.1" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^2.0.1, prompts@^2.4.0, prompts@~2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -26026,7 +26002,7 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -26081,6 +26057,17 @@ react-popper@^2.2.4: react-fast-compare "^3.0.1" warning "^4.0.2" +react-recompose@^0.33.0: + version "0.33.0" + resolved "https://registry.yarnpkg.com/react-recompose/-/react-recompose-0.33.0.tgz#f6946ffc1e576815cd855b18eb2440e0a7d9f019" + integrity sha512-Z5Pzfg3jBGboS2bFtFeZNJplTQ8xqmIeUXo0suTFgZDdb+H7l75GPwjrOndtHzoFsmDMGNHnullX3r9mc0aUqA== + dependencies: + "@babel/runtime" "^7.21.0" + change-emitter "^0.1.6" + hoist-non-react-statics "^2.5.5" + react-lifecycles-compat "^3.0.4" + symbol-observable "^4.0.0" + react-redux@^7.1.0, react-redux@^7.2.8: version "7.2.8" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" @@ -26537,18 +26524,6 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" -recompose@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" - integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== - dependencies: - "@babel/runtime" "^7.0.0" - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - react-lifecycles-compat "^3.0.2" - symbol-observable "^1.0.4" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -29268,11 +29243,16 @@ swagger2openapi@^7.0.6: yaml "^1.10.0" yargs "^17.0.1" -symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: +symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -30163,11 +30143,6 @@ typewise@^1.0.3: dependencies: typewise-core "^1.2.0" -ua-parser-js@^0.7.18: - version "0.7.24" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.24.tgz#8d3ecea46ed4f1f1d63ec25f17d8568105dc027c" - integrity sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw== - uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" @@ -31632,7 +31607,7 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" -whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: +whatwg-fetch@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==