From 1dd0c8d353c875980274601b761dcf55e730dfb9 Mon Sep 17 00:00:00 2001 From: Charis Kalpakis <39087493+fake-haris@users.noreply.github.com> Date: Tue, 13 Aug 2024 17:13:42 +0300 Subject: [PATCH 01/92] Additional validation for painless test (#190226) --- .../application/components/request_flyout.tsx | 2 +- .../functional/apps/painless_lab/index.ts | 1 + .../apps/painless_lab/painless_lab_flyout.ts | 29 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 x-pack/test/functional/apps/painless_lab/painless_lab_flyout.ts diff --git a/x-pack/plugins/painless_lab/public/application/components/request_flyout.tsx b/x-pack/plugins/painless_lab/public/application/components/request_flyout.tsx index 4a4b548834e8b0..3874c00416e3be 100644 --- a/x-pack/plugins/painless_lab/public/application/components/request_flyout.tsx +++ b/x-pack/plugins/painless_lab/public/application/components/request_flyout.tsx @@ -40,7 +40,7 @@ export const RequestFlyout: FunctionComponent = ({ {/* We need an extra div to get out of flex grow */}
- +

{i18n.translate('xpack.painlessLab.flyoutTitle', { defaultMessage: 'API request', diff --git a/x-pack/test/functional/apps/painless_lab/index.ts b/x-pack/test/functional/apps/painless_lab/index.ts index 70aca9309243ec..ced0a266a9b17f 100644 --- a/x-pack/test/functional/apps/painless_lab/index.ts +++ b/x-pack/test/functional/apps/painless_lab/index.ts @@ -10,5 +10,6 @@ import { FtrProviderContext } from '../../ftr_provider_context'; export default ({ loadTestFile }: FtrProviderContext) => { describe('Painless lab app', function () { loadTestFile(require.resolve('./painless_lab')); + loadTestFile(require.resolve('./painless_lab_flyout')); }); }; diff --git a/x-pack/test/functional/apps/painless_lab/painless_lab_flyout.ts b/x-pack/test/functional/apps/painless_lab/painless_lab_flyout.ts new file mode 100644 index 00000000000000..2f03212c72581d --- /dev/null +++ b/x-pack/test/functional/apps/painless_lab/painless_lab_flyout.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const retry = getService('retry'); + const PageObjects = getPageObjects(['common', 'console', 'header']); + const testSubjects = getService('testSubjects'); + + describe('Painless lab', function describeIndexTests() { + before(async () => { + await PageObjects.common.navigateToApp('dev_tools', { hash: '/painless_lab' }); + await retry.waitFor('Wait for editor to be visible', async () => { + return testSubjects.isDisplayed('painless_lab'); + }); + }); + + it('click show API request button and flyout should appear in page', async () => { + await testSubjects.click('btnViewRequest'); + + await testSubjects.existOrFail('painlessLabRequestFlyoutHeader', { timeout: 10 * 1000 }); + }); + }); +} From bd5927fab412bfd4ca1e1a01e934b0847dc1e3a4 Mon Sep 17 00:00:00 2001 From: Robert Oskamp Date: Tue, 13 Aug 2024 16:16:07 +0200 Subject: [PATCH 02/92] Stabilize Discover sidebar tests (#190405) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR tries to stabilize the Discover sidebar tests which started to be flaky when running against MKI. ### Details The serverless Discover sidebar tests (`Common Group 5.x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar·ts`) started to become flaky when running against MKI. 5 out of the last 10 runs failed for the same reason: ``` discover/group6 discover sidebar renders field groups should render even when retrieving documents failed with an error Error: expected '48 available fields. 6 empty fields. 4 meta fields.' to equal '49 available fields. 5 empty fields. 4 meta fields.' at Assertion.assert (expect.js:100:11) at Assertion.apply (expect.js:227:8) at Assertion.be (expect.js:69:22) at Context. (_sidebar.ts:644:83) at processTicksAndRejections (node:internal/process/task_queues:95:5) at Object.apply (wrap_function.js:73:16) ``` So it seems the newly added field is sometimes listed as `empty` instead of `available`. Failure screenshot: ![image](https://github.com/user-attachments/assets/e3615604-90ad-445c-9026-fd7c7865991e) The screenshot shows an active global loading indicator, so that might be the reason for the flakiness (loading not quite done sometimes, so field listed as `empty`). This PR tries to fix this flakiness by adding a wait for the global loading right before fetching the sidebar details. --- test/functional/page_objects/unified_field_list.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/functional/page_objects/unified_field_list.ts b/test/functional/page_objects/unified_field_list.ts index a6cbaf81730df1..0cea844c653724 100644 --- a/test/functional/page_objects/unified_field_list.ts +++ b/test/functional/page_objects/unified_field_list.ts @@ -36,6 +36,7 @@ export class UnifiedFieldListPageObject extends FtrService { } public async getSidebarAriaDescription(): Promise { + await this.header.waitUntilLoadingHasFinished(); return ( (await ( await this.testSubjects.find('fieldListGrouped__ariaDescription') From 919844da4f78fd3dbf60aaa549ae6bafb09da70c Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Tue, 13 Aug 2024 15:30:46 +0100 Subject: [PATCH 03/92] [Entity Analytics] Tidy Asset Criticality API docs (#190037) **Addresses:** https://github.com/elastic/kibana/issues/190038 ## Summary Tidy the asset criticality API docs after reviewing the doc previews for [Serverless](https://bump.sh/per-solution-example/doc/security-solution-api-playground) and [ESS](https://bump.sh/per-solution-example/doc/security-solution-api-playground-ess) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../bulk_upload_asset_criticality.schema.yaml | 4 +++- .../create_asset_criticality.schema.yaml | 4 +++- .../delete_asset_criticality.gen.ts | 5 ++++- .../delete_asset_criticality.schema.yaml | 5 ++++- .../get_asset_criticality.schema.yaml | 2 ++ .../list_asset_criticality.schema.yaml | 6 +++-- ...alytics_api_2023_10_31.bundled.schema.yaml | 22 ++++++++++++------- ...alytics_api_2023_10_31.bundled.schema.yaml | 22 ++++++++++++------- .../services/security_solution_api.gen.ts | 17 +++++++++++++- 9 files changed, 64 insertions(+), 23 deletions(-) diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/bulk_upload_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/bulk_upload_asset_criticality.schema.yaml index 25053de391d87a..1e7a9b6ca3372e 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/bulk_upload_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/bulk_upload_asset_criticality.schema.yaml @@ -1,3 +1,4 @@ +# ⚠️ Updating this file? Also update the public API docs at https://github.com/elastic/security-docs/tree/main/docs/advanced-entity-analytics/api openapi: 3.0.0 info: version: '2023-10-31' @@ -8,7 +9,8 @@ paths: x-labels: [ess, serverless] x-codegen-enabled: true operationId: BulkUpsertAssetCriticalityRecords - summary: Bulk upsert asset criticality data, creating or updating records as needed + summary: Bulk Upsert Asset Criticality Records + description: Bulk upsert up to 1000 asset criticality records, creating or updating them as needed. requestBody: content: application/json: diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml index ea05996e1f9581..13a9e831a2cd5e 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml @@ -1,3 +1,4 @@ +# ⚠️ Updating this file? Also update the public API docs at https://github.com/elastic/security-docs/tree/main/docs/advanced-entity-analytics/api openapi: 3.0.0 info: version: '2023-10-31' @@ -8,7 +9,8 @@ paths: x-labels: [ess, serverless] x-codegen-enabled: true operationId: CreateAssetCriticalityRecord - summary: Create Criticality Record + summary: Upsert Criticality Record + description: Create or update a criticality record for a specific asset. requestBody: required: true content: diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.gen.ts index 4b747b6a486742..de493f0cc0972c 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.gen.ts @@ -44,8 +44,11 @@ export type DeleteAssetCriticalityRecordResponse = z.infer< >; export const DeleteAssetCriticalityRecordResponse = z.object({ /** - * If the record was deleted. If false the record did not exist. + * True if the record was deleted or false if the record did not exist. */ deleted: z.boolean(), + /** + * The deleted record if it existed. + */ record: AssetCriticalityRecord.optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml index 521cacd51406b0..f74cf5791aa210 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml @@ -1,3 +1,4 @@ +# ⚠️ Updating this file? Also update the public API docs at https://github.com/elastic/security-docs/tree/main/docs/advanced-entity-analytics/api openapi: 3.0.0 info: version: '2023-10-31' @@ -9,6 +10,7 @@ paths: x-codegen-enabled: true operationId: DeleteAssetCriticalityRecord summary: Delete Criticality Record + description: Delete the asset criticality record for a specific asset if it exists. parameters: - name: id_value in: query @@ -40,8 +42,9 @@ paths: properties: deleted: type: boolean - description: If the record was deleted. If false the record did not exist. + description: True if the record was deleted or false if the record did not exist. record: + description: The deleted record if it existed. $ref: './common.schema.yaml#/components/schemas/AssetCriticalityRecord' required: - deleted diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml index ce9e8ee03330cf..a162cf3944c69c 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml @@ -1,3 +1,4 @@ +# ⚠️ Updating this file? Also update the public API docs at https://github.com/elastic/security-docs/tree/main/docs/advanced-entity-analytics/api openapi: 3.0.0 info: version: '2023-10-31' @@ -9,6 +10,7 @@ paths: x-codegen-enabled: true operationId: GetAssetCriticalityRecord summary: Get Criticality Record + description: Get the criticality record for a specific asset. parameters: - name: id_value in: query diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml index db338bf5404f9c..020727c4638d79 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/list_asset_criticality.schema.yaml @@ -1,14 +1,16 @@ +# ⚠️ Updating this file? Also update the public API docs at https://github.com/elastic/security-docs/tree/main/docs/advanced-entity-analytics/api openapi: 3.0.0 info: version: '2023-10-31' title: Asset Criticality List Schema paths: /api/asset_criticality/list: - post: + get: x-labels: [ess, serverless] x-codegen-enabled: true operationId: FindAssetCriticalityRecords - summary: List asset criticality data, filtering and sorting as needed + summary: List Asset Criticality Records + description: List asset criticality records, paging, sorting and filtering as needed. parameters: - name: sort_field in: query diff --git a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 35346afa0f1205..fa4998f85b335d 100644 --- a/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/ess/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -13,6 +13,7 @@ servers: paths: /api/asset_criticality: delete: + description: Delete the asset criticality record for a specific asset if it exists. operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. @@ -45,11 +46,12 @@ paths: properties: deleted: description: >- - If the record was deleted. If false the record did not - exist. + True if the record was deleted or false if the record did + not exist. type: boolean record: $ref: '#/components/schemas/AssetCriticalityRecord' + description: The deleted record if it existed. required: - deleted description: Successful response @@ -59,6 +61,7 @@ paths: tags: - Security Solution Entity Analytics API get: + description: Get the criticality record for a specific asset. operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. @@ -89,6 +92,7 @@ paths: tags: - Security Solution Entity Analytics API post: + description: Create or update a criticality record for a specific asset. operationId: CreateAssetCriticalityRecord requestBody: content: @@ -115,11 +119,14 @@ paths: description: Successful response '400': description: Invalid request - summary: Create Criticality Record + summary: Upsert Criticality Record tags: - Security Solution Entity Analytics API /api/asset_criticality/bulk: post: + description: >- + Bulk upsert up to 1000 asset criticality records, creating or updating + them as needed. operationId: BulkUpsertAssetCriticalityRecords requestBody: content: @@ -170,13 +177,12 @@ paths: description: Bulk upload successful '413': description: File too large - summary: >- - Bulk upsert asset criticality data, creating or updating records as - needed + summary: Bulk Upsert Asset Criticality Records tags: - Security Solution Entity Analytics API /api/asset_criticality/list: - post: + get: + description: 'List asset criticality records, paging, sorting and filtering as needed.' operationId: FindAssetCriticalityRecords parameters: - description: The field to sort by. @@ -247,7 +253,7 @@ paths: - per_page - total description: Bulk upload successful - summary: 'List asset criticality data, filtering and sorting as needed' + summary: List Asset Criticality Records tags: - Security Solution Entity Analytics API components: diff --git a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml index 79df809b600c24..d1345790f6b629 100644 --- a/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/plugins/security_solution/docs/openapi/serverless/security_solution_entity_analytics_api_2023_10_31.bundled.schema.yaml @@ -13,6 +13,7 @@ servers: paths: /api/asset_criticality: delete: + description: Delete the asset criticality record for a specific asset if it exists. operationId: DeleteAssetCriticalityRecord parameters: - description: The ID value of the asset. @@ -45,11 +46,12 @@ paths: properties: deleted: description: >- - If the record was deleted. If false the record did not - exist. + True if the record was deleted or false if the record did + not exist. type: boolean record: $ref: '#/components/schemas/AssetCriticalityRecord' + description: The deleted record if it existed. required: - deleted description: Successful response @@ -59,6 +61,7 @@ paths: tags: - Security Solution Entity Analytics API get: + description: Get the criticality record for a specific asset. operationId: GetAssetCriticalityRecord parameters: - description: The ID value of the asset. @@ -89,6 +92,7 @@ paths: tags: - Security Solution Entity Analytics API post: + description: Create or update a criticality record for a specific asset. operationId: CreateAssetCriticalityRecord requestBody: content: @@ -115,11 +119,14 @@ paths: description: Successful response '400': description: Invalid request - summary: Create Criticality Record + summary: Upsert Criticality Record tags: - Security Solution Entity Analytics API /api/asset_criticality/bulk: post: + description: >- + Bulk upsert up to 1000 asset criticality records, creating or updating + them as needed. operationId: BulkUpsertAssetCriticalityRecords requestBody: content: @@ -170,13 +177,12 @@ paths: description: Bulk upload successful '413': description: File too large - summary: >- - Bulk upsert asset criticality data, creating or updating records as - needed + summary: Bulk Upsert Asset Criticality Records tags: - Security Solution Entity Analytics API /api/asset_criticality/list: - post: + get: + description: 'List asset criticality records, paging, sorting and filtering as needed.' operationId: FindAssetCriticalityRecords parameters: - description: The field to sort by. @@ -247,7 +253,7 @@ paths: - per_page - total description: Bulk upload successful - summary: 'List asset criticality data, filtering and sorting as needed' + summary: List Asset Criticality Records tags: - Security Solution Entity Analytics API components: diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index dd2b9eaab6a0b7..b1df28bdf908cf 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -212,6 +212,9 @@ after 30 days. It also deletes other artifacts specific to the migration impleme .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + /** + * Bulk upsert up to 1000 asset criticality records, creating or updating them as needed. + */ bulkUpsertAssetCriticalityRecords(props: BulkUpsertAssetCriticalityRecordsProps) { return supertest .post('/api/asset_criticality/bulk') @@ -252,6 +255,9 @@ Migrations are initiated per index. While the process is neither destructive nor .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + /** + * Create or update a criticality record for a specific asset. + */ createAssetCriticalityRecord(props: CreateAssetCriticalityRecordProps) { return supertest .post('/api/asset_criticality') @@ -296,6 +302,9 @@ Migrations are initiated per index. While the process is neither destructive nor .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, + /** + * Delete the asset criticality record for a specific asset if it exists. + */ deleteAssetCriticalityRecord(props: DeleteAssetCriticalityRecordProps) { return supertest .delete('/api/asset_criticality') @@ -575,9 +584,12 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + /** + * List asset criticality records, paging, sorting and filtering as needed. + */ findAssetCriticalityRecords(props: FindAssetCriticalityRecordsProps) { return supertest - .post('/api/asset_criticality/list') + .get('/api/asset_criticality/list') .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -602,6 +614,9 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, + /** + * Get the criticality record for a specific asset. + */ getAssetCriticalityRecord(props: GetAssetCriticalityRecordProps) { return supertest .get('/api/asset_criticality') From 0719f5c11099717f396e014762cf16608c009989 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 13 Aug 2024 09:48:13 -0500 Subject: [PATCH 04/92] [renovate] Test github action package match (#190427) Another attempt at fixing github action pinning. This scopes us to the actions/checkout package only for now, and we can expand it later. Previously: https://github.com/elastic/kibana/pull/190377, which was successful for the auto-approve-backport acttion. --- renovate.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 525a688221a63a..6f9e87e5e07a0e 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:recommended", "helpers:pinGitHubActionDigests"], + "extends": ["config:recommended", "helpers:pinGitHubActionDigests", "helpers:pinGitHubActionDigestsToSemver"], "ignorePaths": ["**/__fixtures__/**", "**/fixtures/**"], "enabledManagers": ["npm", "github-actions", "custom.regex"], "baseBranches": ["main", "7.17"], @@ -29,6 +29,7 @@ { "groupName": "GitHub actions", "matchManagers": ["github-actions"], + "matchPackageNames": ["actions/checkout"], "reviewers": ["team:kibana-operations"], "matchBaseBranches": ["main"], "labels": ["Team:Operations", "backport:all-open", "release_note:skip"], From 8be5ad8fc9498d381e5b79ec66a4a5bcae31c276 Mon Sep 17 00:00:00 2001 From: Melissa Alvarez Date: Tue, 13 Aug 2024 08:55:55 -0600 Subject: [PATCH 05/92] [ML][Fleet] Link to ML assets from Integration > Assets tab (#189767) ## Summary Related issue: https://github.com/elastic/kibana/issues/182199 This PR adds links for ML assets installed via Integrations. For `transform` and `ml_model` (as they are ES asset types) the manual mappings in [get_bulk_assets.ts](https://github.com/elastic/kibana/blob/ac6f643904c6bb7e8342b68e470e933e33a7c206/x-pack/plugins/fleet/server/services/epm/packages/get_bulk_assets.ts#L21) has been modified to include a link to the Transform management page and the Trained models page, respectively. The pages will be filtered to the asset id. This PR also adds the ability to save state in the url for the Transform list to allow the url to link to a filtered list of transforms. ### To test: - From the side navigation - click the `Add integrations` button at the bottom to get to the Integrations page. image - To test ml models link, install the `Living off the Land Attack Detection` integration - To test transform link, install the `Lateral Movement Detection` integration - Once they are installed you can navigate to the `Installed Integrations` tab on the Integrations page image - Select the installed package you want to view and then go to the `Assets` tab image - You can then expand the desired asset section (Ml models or transforms) and click the link to ensure it takes you to the correct place ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --------- Co-authored-by: Elastic Machine --- x-pack/packages/ml/url_state/index.ts | 2 + .../packages/ml/url_state/src/url_state.tsx | 12 +++- .../types/index_data_visualizer_state.ts | 12 +--- .../services/epm/packages/get_bulk_assets.ts | 6 +- x-pack/plugins/ml/common/types/common.ts | 9 --- x-pack/plugins/ml/common/types/locator.ts | 2 +- .../analytics_list/analytics_list.tsx | 2 +- .../analytics_list/use_table_settings.ts | 2 +- .../pages/analytics_management/page.tsx | 3 +- .../application/jobs/jobs_list/jobs.tsx | 2 +- .../nodes_overview/nodes_list.tsx | 2 +- .../model_management/models_list.tsx | 2 +- .../components/notifications_list.tsx | 2 +- .../locator/formatters/anomaly_detection.ts | 3 +- .../formatters/data_frame_analytics.ts | 3 +- .../locator/formatters/trained_models.ts | 3 +- .../transform_list/transform_list.test.tsx | 2 + .../transform_list/transform_list.tsx | 43 ++++++++++--- .../transform_search_bar_filters.tsx | 6 +- .../transform_list/use_table_settings.ts | 62 +++++++------------ .../transform_management_section.tsx | 25 +++++++- .../epm/__snapshots__/bulk_get_assets.snap | 2 +- 22 files changed, 121 insertions(+), 86 deletions(-) diff --git a/x-pack/packages/ml/url_state/index.ts b/x-pack/packages/ml/url_state/index.ts index c2b3f80c62a150..13443af51bc4d6 100644 --- a/x-pack/packages/ml/url_state/index.ts +++ b/x-pack/packages/ml/url_state/index.ts @@ -15,5 +15,7 @@ export { UrlStateProvider, type Accessor, type Dictionary, + type ListingPageUrlState, + type PageUrlState, type SetUrlState, } from './src/url_state'; diff --git a/x-pack/packages/ml/url_state/src/url_state.tsx b/x-pack/packages/ml/url_state/src/url_state.tsx index 1aa796187f9d40..585761b93cce3b 100644 --- a/x-pack/packages/ml/url_state/src/url_state.tsx +++ b/x-pack/packages/ml/url_state/src/url_state.tsx @@ -31,6 +31,16 @@ export interface Dictionary { [id: string]: TValue; } +export interface ListingPageUrlState { + pageSize: number; + pageIndex: number; + sortField: string; + sortDirection: string; + queryText?: string; + showPerPageOptions?: boolean; + showAll?: boolean; +} + export type Accessor = '_a' | '_g'; export type SetUrlState = ( accessor: Accessor, @@ -241,7 +251,7 @@ export class PageUrlStateService { } } -interface PageUrlState { +export interface PageUrlState { pageKey: string; pageUrlState: object; } diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts index 767179c3c7c378..60ddfed8b88129 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/types/index_data_visualizer_state.ts @@ -8,6 +8,7 @@ import type { Filter } from '@kbn/es-query'; import type { Query } from '@kbn/data-plugin/common/query'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import type { FieldVisConfig } from '../../../../common/types/field_vis_config'; import type { RandomSamplerOption } from '../constants/random_sampler'; @@ -30,15 +31,8 @@ export interface DataVisualizerPageState { documentCountStats?: FieldVisConfig; } -export interface ListingPageUrlState { - pageSize: number; - pageIndex: number; - sortField: string; - sortDirection: string; - queryText?: string; -} - -export interface DataVisualizerIndexBasedAppState extends Omit { +export interface DataVisualizerIndexBasedAppState + extends Omit { searchString?: Query['query']; searchQuery?: Query['query']; searchQueryLanguage?: SearchQueryLanguage; diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get_bulk_assets.ts b/x-pack/plugins/fleet/server/services/epm/packages/get_bulk_assets.ts index 8171ee33f22f72..082691fb0812be 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get_bulk_assets.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get_bulk_assets.ts @@ -33,11 +33,9 @@ const getKibanaLinkForESAsset = (type: ElasticsearchAssetType, id: string): stri case 'data_stream_ilm_policy': return `/app/management/data/index_lifecycle_management/policies/edit/${id}`; case 'transform': - // TODO: Confirm link for transforms - return ''; + return `/app/management/data/transform?_a=(transform:(queryText:${id}))`; case 'ml_model': - // TODO: Confirm link for ml models - return ''; + return `/app/ml/trained_models?_a=(trained_models:(queryText:'model_id:(${id})'))`; default: return ''; } diff --git a/x-pack/plugins/ml/common/types/common.ts b/x-pack/plugins/ml/common/types/common.ts index 3e0213b8ab959f..ec75a2b8d525f0 100644 --- a/x-pack/plugins/ml/common/types/common.ts +++ b/x-pack/plugins/ml/common/types/common.ts @@ -35,15 +35,6 @@ type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly; }; -export interface ListingPageUrlState { - pageSize: number; - pageIndex: number; - sortField: string; - sortDirection: string; - queryText?: string; - showAll?: boolean; -} - export type AppPageState = { [key in MlPages]?: Partial; }; diff --git a/x-pack/plugins/ml/common/types/locator.ts b/x-pack/plugins/ml/common/types/locator.ts index bad72454356d4e..dd9997f7b59f2f 100644 --- a/x-pack/plugins/ml/common/types/locator.ts +++ b/x-pack/plugins/ml/common/types/locator.ts @@ -11,8 +11,8 @@ import type { RefreshInterval, TimeRange } from '@kbn/data-plugin/common/query'; import type { DataFrameAnalysisConfigType } from '@kbn/ml-data-frame-analytics-utils'; import type { InfluencersFilterQuery } from '@kbn/ml-anomaly-utils'; import type { SearchQueryLanguage } from '@kbn/ml-query-utils'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import type { JobId } from './anomaly_detection_jobs/job'; -import type { ListingPageUrlState } from './common'; import type { ML_PAGES } from '../constants/locator'; type OptionalPageState = object | undefined; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx index 73f50f51befc23..e0a12f4187ab33 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx @@ -22,6 +22,7 @@ import { DATA_FRAME_TASK_STATE, type DataFrameAnalyticsId, } from '@kbn/ml-data-frame-analytics-utils'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { useRefreshAnalyticsList } from '../../../../common'; import { usePermissionCheck } from '../../../../../capabilities/check_capabilities'; import { useNavigateToPath } from '../../../../../contexts/kibana'; @@ -38,7 +39,6 @@ import { CreateAnalyticsButton } from '../create_analytics_button'; import { filterAnalytics } from '../../../../common/search_bar_filters'; import { AnalyticsEmptyPrompt } from '../empty_prompt'; import { useTableSettings } from './use_table_settings'; -import type { ListingPageUrlState } from '../../../../../../../common/types/common'; import { JobsAwaitingNodeWarning } from '../../../../../components/jobs_awaiting_node_warning'; import { useRefresh } from '../../../../../routing/use_refresh'; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts index 027175881dcbed..670efb1627ef7e 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings.ts @@ -7,7 +7,7 @@ import type { Direction, EuiBasicTableProps, Pagination } from '@elastic/eui'; import { useCallback, useMemo } from 'react'; -import type { ListingPageUrlState } from '../../../../../../../common/types/common'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; const PAGE_SIZE_OPTIONS = [10, 25, 50]; diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx index d28312b4a90982..583bf7449e463c 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/page.tsx @@ -10,14 +10,13 @@ import React, { useMemo, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useUrlState, usePageUrlState } from '@kbn/ml-url-state'; +import { useUrlState, usePageUrlState, type ListingPageUrlState } from '@kbn/ml-url-state'; import { DataFrameAnalyticsList } from './components/analytics_list'; import { useRefreshInterval } from './components/analytics_list/use_refresh_interval'; import { NodeAvailableWarning } from '../../../components/node_available_warning'; import { SavedObjectsWarning } from '../../../components/saved_objects_warning'; import { UpgradeWarning } from '../../../components/upgrade'; import { JobMap } from '../job_map'; -import type { ListingPageUrlState } from '../../../../../common/types/common'; import { DataFrameAnalyticsListColumn } from './components/analytics_list/common'; import { ML_PAGES } from '../../../../../common/constants/locator'; import { HelpMenu } from '../../../components/help_menu'; diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx index 340a75c5b6a292..0516fa1b7986d3 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/jobs.tsx @@ -9,9 +9,9 @@ import type { FC } from 'react'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { usePageUrlState } from '@kbn/ml-url-state'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { JobsListView } from './components/jobs_list_view'; import { ML_PAGES } from '../../../../common/constants/locator'; -import type { ListingPageUrlState } from '../../../../common/types/common'; import { HelpMenu } from '../../components/help_menu'; import { useMlKibana } from '../../contexts/kibana'; import { MlPageHeader } from '../../components/page_header'; diff --git a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx index c6632adcefccf0..94a17f85aad2c4 100644 --- a/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx +++ b/x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx @@ -19,6 +19,7 @@ import { i18n } from '@kbn/i18n'; import { cloneDeep } from 'lodash'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import { usePageUrlState } from '@kbn/ml-url-state'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import type { ModelsBarStats } from '../../components/stats_bar'; import { StatsBar } from '../../components/stats_bar'; import type { NodeDeploymentStatsResponse } from '../../../../common/types/trained_models'; @@ -28,7 +29,6 @@ import { useTableSettings } from '../../data_frame_analytics/pages/analytics_man import { ExpandedRow } from './expanded_row'; import { MemoryPreviewChart } from './memory_preview_chart'; import { useFieldFormatter } from '../../contexts/kibana/use_field_formatter'; -import type { ListingPageUrlState } from '../../../../common/types/common'; import { useToastNotificationService } from '../../services/toast_notification_service'; import { useRefresh } from '../../routing/use_refresh'; diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index 1080488a788957..bc5c2450ebacf5 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -52,6 +52,7 @@ import { isDefined } from '@kbn/ml-is-defined'; import { useStorage } from '@kbn/ml-local-storage'; import { dynamic } from '@kbn/shared-ux-utility'; import useMountedState from 'react-use/lib/useMountedState'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { getModelStateColor, getModelDeploymentState } from './get_model_state'; import { ML_ELSER_CALLOUT_DISMISSED } from '../../../common/types/storage'; import { TechnicalPreviewBadge } from '../components/technical_preview_badge'; @@ -70,7 +71,6 @@ import type { } from '../../../common/types/trained_models'; import { DeleteModelsModal } from './delete_models_modal'; import { ML_PAGES } from '../../../common/constants/locator'; -import type { ListingPageUrlState } from '../../../common/types/common'; import { useTableSettings } from '../data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings'; import { useToastNotificationService } from '../services/toast_notification_service'; import { useFieldFormatter } from '../contexts/kibana/use_field_formatter'; diff --git a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx index 0cfb482fda7f71..1ebba13d1f520e 100644 --- a/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx +++ b/x-pack/plugins/ml/public/application/notifications/components/notifications_list.tsx @@ -17,6 +17,7 @@ import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import useDebounce from 'react-use/lib/useDebounce'; import useMount from 'react-use/lib/useMount'; import { usePageUrlState } from '@kbn/ml-url-state'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { useTimefilter, useTimeRangeUpdates } from '@kbn/ml-date-picker'; import { EntityFilter } from './entity_filter'; import { useMlNotifications } from '../../contexts/ml/ml_notifications_context'; @@ -26,7 +27,6 @@ import { useToastNotificationService } from '../../services/toast_notification_s import { useFieldFormatter } from '../../contexts/kibana/use_field_formatter'; import { useRefresh } from '../../routing/use_refresh'; import { useTableSettings } from '../../data_frame_analytics/pages/analytics_management/components/analytics_list/use_table_settings'; -import type { ListingPageUrlState } from '../../../../common/types/common'; import { ML_PAGES } from '../../../../common/constants/locator'; import type { MlNotificationMessageLevel, diff --git a/x-pack/plugins/ml/public/locator/formatters/anomaly_detection.ts b/x-pack/plugins/ml/public/locator/formatters/anomaly_detection.ts index 1f9501d07fd433..82a7ea26f68900 100644 --- a/x-pack/plugins/ml/public/locator/formatters/anomaly_detection.ts +++ b/x-pack/plugins/ml/public/locator/formatters/anomaly_detection.ts @@ -7,6 +7,7 @@ import { isEmpty } from 'lodash'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import type { AnomalyDetectionUrlState, ExplorerAppState, @@ -21,7 +22,7 @@ import type { import { ML_PAGES } from '../../../common/constants/locator'; import { formatGenericMlUrl } from './common'; import { getGroupQueryText, getJobQueryText } from '../../../common/util/string_utils'; -import type { AppPageState, ListingPageUrlState } from '../../../common/types/common'; +import type { AppPageState } from '../../../common/types/common'; /** * Creates URL to the Anomaly Detection Job management page diff --git a/x-pack/plugins/ml/public/locator/formatters/data_frame_analytics.ts b/x-pack/plugins/ml/public/locator/formatters/data_frame_analytics.ts index 56ce886536b874..e1d3317364edf5 100644 --- a/x-pack/plugins/ml/public/locator/formatters/data_frame_analytics.ts +++ b/x-pack/plugins/ml/public/locator/formatters/data_frame_analytics.ts @@ -10,6 +10,7 @@ */ import { isEmpty } from 'lodash'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { formatGenericMlUrl } from './common'; import type { DataFrameAnalyticsExplorationQueryState, @@ -21,7 +22,7 @@ import type { } from '../../../common/types/locator'; import { ML_PAGES } from '../../../common/constants/locator'; import { getGroupQueryText, getJobQueryText } from '../../../common/util/string_utils'; -import type { AppPageState, ListingPageUrlState } from '../../../common/types/common'; +import type { AppPageState } from '../../../common/types/common'; export function formatDataFrameAnalyticsJobManagementUrl( appBasePath: string, diff --git a/x-pack/plugins/ml/public/locator/formatters/trained_models.ts b/x-pack/plugins/ml/public/locator/formatters/trained_models.ts index ddf4782005b42f..d3048405be91d6 100644 --- a/x-pack/plugins/ml/public/locator/formatters/trained_models.ts +++ b/x-pack/plugins/ml/public/locator/formatters/trained_models.ts @@ -6,9 +6,10 @@ */ import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import type { MemoryUsageUrlState, TrainedModelsUrlState } from '../../../common/types/locator'; import { ML_PAGES } from '../../../common/constants/locator'; -import type { AppPageState, ListingPageUrlState } from '../../../common/types/common'; +import type { AppPageState } from '../../../common/types/common'; export function formatTrainedModelsManagementUrl( appBasePath: string, diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx index c47c0f0add99f7..ede0470d917f2f 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.test.tsx @@ -40,6 +40,8 @@ describe('Transform: Transform List ', () => { transforms={[]} transformsLoading={false} transformsStatsLoading={false} + pageState={{ pageSize: 10, pageIndex: 0, sortField: 'id', sortDirection: 'asc' }} + updatePageState={jest.fn()} /> diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx index b70de170df6110..b8aa9a749c7657 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_list.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { type FC, type MouseEventHandler, useState } from 'react'; +import React, { type FC, type MouseEventHandler, useCallback, useMemo, useState } from 'react'; import { i18n } from '@kbn/i18n'; import type { EuiSearchBarProps } from '@elastic/eui'; @@ -18,8 +18,10 @@ import { EuiInMemoryTable, EuiPageTemplate, EuiPopover, + EuiSearchBar, EuiTitle, } from '@elastic/eui'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { isReauthorizeActionDisabled, ReauthorizeActionModal, @@ -85,25 +87,36 @@ function getItemIdToExpandedRowMap( interface TransformListProps { isLoading: boolean; onCreateTransform: MouseEventHandler; + pageState: ListingPageUrlState; transformNodes: number; transforms: TransformListRow[]; transformsLoading: boolean; transformsStatsLoading: boolean; + updatePageState: (update: Partial) => void; } export const TransformList: FC = ({ isLoading, onCreateTransform, + pageState, transformNodes, transforms, transformsLoading, transformsStatsLoading, + updatePageState, }) => { const refreshTransformList = useRefreshTransformList(); const { setEditAlertRule } = useAlertRuleFlyout(); - const [query, setQuery] = useState>[0]>(); + const searchQueryText = pageState.queryText ?? ''; + const setSearchQueryText = useCallback( + (value) => { + updatePageState({ queryText: value }); + }, + [updatePageState] + ); + const [searchError, setSearchError] = useState(); const [expandedRowItemIds, setExpandedRowItemIds] = useState([]); const [transformSelection, setTransformSelection] = useState([]); const [isActionsMenuOpen, setIsActionsMenuOpen] = useState(false); @@ -122,7 +135,9 @@ export const TransformList: FC = ({ const { sorting, pagination, onTableChange } = useTableSettings( TRANSFORM_LIST_COLUMN.ID, - transforms + transforms, + pageState, + updatePageState ); const { columns, modals: singleActionModals } = useColumns( @@ -133,10 +148,11 @@ export const TransformList: FC = ({ transformsStatsLoading ); - const searchError = query?.error ? query?.error.message : undefined; - const clauses = query?.query?.ast?.clauses ?? []; - const filteredTransforms = - clauses.length > 0 ? filterTransforms(transforms, clauses) : transforms; + const filteredTransforms = useMemo(() => { + const query = searchQueryText !== '' ? EuiSearchBar.Query.parse(searchQueryText) : undefined; + const clauses = query?.ast?.clauses ?? []; + return clauses.length > 0 ? filterTransforms(transforms, clauses) : transforms; + }, [searchQueryText, transforms]); if (transforms.length === 0) { return ( @@ -317,14 +333,25 @@ export const TransformList: FC = ({ ); + const handleSearchOnChange: EuiSearchBarProps['onChange'] = (search) => { + if (search.error !== null) { + setSearchError(search.error.message); + return; + } + + setSearchError(undefined); + setSearchQueryText(search.queryText); + }; + const search = { toolsLeft: transformSelection.length > 0 ? renderToolsLeft() : undefined, toolsRight, - onChange: setQuery, + onChange: handleSearchOnChange, box: { incremental: true, }, filters: transformFilters, + query: searchQueryText, }; const selection = { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx index c60c302d86e061..67ba6cffa997aa 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/transform_search_bar_filters.tsx @@ -24,7 +24,7 @@ import { TransformHealthColoredDot } from './transform_health_colored_dot'; export const transformFilters: SearchFilterConfig[] = [ { type: 'field_value_selection', - field: 'state.state', + field: 'stats.state', name: i18n.translate('xpack.transform.statusFilter', { defaultMessage: 'Status' }), multiSelect: 'or', options: Object.values(TRANSFORM_STATE).map((val) => ({ @@ -50,7 +50,7 @@ export const transformFilters: SearchFilterConfig[] = [ }, { type: 'field_value_selection', - field: 'health', + field: 'stats.health.status', name: i18n.translate('xpack.transform.healthFilter', { defaultMessage: 'Health' }), multiSelect: false, options: Object.values(TRANSFORM_HEALTH_STATUS).map((val) => ({ @@ -113,7 +113,7 @@ export const filterTransforms = (transforms: TransformListRow[], clauses: Clause } else { ts = transforms.filter((transform) => { if (!transform.stats) return false; - if (c.type === 'field' && c.field === 'health') { + if (c.type === 'field' && c.field === 'stats.health.status') { return transform.stats.health?.status === c.value; } if (c.type === 'field' && c.field === 'mode') { diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts index 9a38986c4c85b4..843737bd0a8dcc 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts +++ b/x-pack/plugins/transform/public/app/sections/transform_management/components/transform_list/use_table_settings.ts @@ -5,10 +5,10 @@ * 2.0. */ -import { useState } from 'react'; +import { useCallback } from 'react'; import type { Direction, EuiBasicTableProps, Pagination, PropertySort } from '@elastic/eui'; +import type { ListingPageUrlState } from '@kbn/ml-url-state'; -const PAGE_SIZE = 10; const PAGE_SIZE_OPTIONS = [10, 25, 50]; // Copying from EUI EuiBasicTable types as type is not correctly picked up for table's onChange @@ -30,15 +30,6 @@ export interface CriteriaWithPagination extends Criteria { }; } -interface AnalyticsBasicTableSettings { - pageIndex: number; - pageSize: number; - totalItemCount: number; - showPerPageOptions: boolean; - sortField: keyof T; - sortDirection: Direction; -} - interface UseTableSettingsReturnValue { onTableChange: EuiBasicTableProps['onChange']; pagination: Pagination; @@ -47,34 +38,29 @@ interface UseTableSettingsReturnValue { export function useTableSettings( sortByField: keyof TypeOfItem, - items: TypeOfItem[] + items: TypeOfItem[], + pageState: ListingPageUrlState, + updatePageState: (update: Partial) => void ): UseTableSettingsReturnValue { - const [tableSettings, setTableSettings] = useState>({ - pageIndex: 0, - pageSize: PAGE_SIZE, - totalItemCount: 0, - showPerPageOptions: true, - sortField: sortByField, - sortDirection: 'asc', - }); + const { pageIndex, pageSize, sortField, sortDirection } = pageState; - const onTableChange: EuiBasicTableProps['onChange'] = ({ - page = { index: 0, size: PAGE_SIZE }, - sort = { field: sortByField, direction: 'asc' }, - }: CriteriaWithPagination) => { - const { index, size } = page; - const { field, direction } = sort; + const onTableChange: EuiBasicTableProps['onChange'] = useCallback( + ({ page, sort }: CriteriaWithPagination) => { + let resultSortField = sort?.field; + if (typeof resultSortField !== 'string') { + resultSortField = pageState.sortField as keyof TypeOfItem; + } - setTableSettings({ - ...tableSettings, - pageIndex: index, - pageSize: size, - sortField: field, - sortDirection: direction, - }); - }; - - const { pageIndex, pageSize, sortField, sortDirection } = tableSettings; + const result = { + pageIndex: page?.index ?? pageState.pageIndex, + pageSize: page?.size ?? pageState.pageSize, + sortField: resultSortField as string, + sortDirection: sort?.direction ?? pageState.sortDirection, + }; + updatePageState(result); + }, + [pageState, updatePageState] + ); const pagination = { pageIndex, @@ -85,8 +71,8 @@ export function useTableSettings( const sorting = { sort: { - field: sortField as string, - direction: sortDirection, + field: sortField, + direction: sortDirection as Direction, }, }; return { onTableChange, pagination, sorting }; diff --git a/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.tsx b/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.tsx index 514ed89a9414e6..5f703a57dff2cd 100644 --- a/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.tsx +++ b/x-pack/plugins/transform/public/app/sections/transform_management/transform_management_section.tsx @@ -20,6 +20,12 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { IHttpFetchError } from '@kbn/core-http-browser'; +import { + usePageUrlState, + UrlStateProvider, + type ListingPageUrlState, + type PageUrlState, +} from '@kbn/ml-url-state'; import { useAppDependencies } from '../../app_dependencies'; import type { TransformListRow } from '../../common'; @@ -28,6 +34,7 @@ import { useGetTransformsStats } from '../../hooks/use_get_transform_stats'; import { useEnabledFeatures } from '../../serverless_context'; import { needsReauthorization } from '../../common/reauthorization_utils'; import { TRANSFORM_STATE } from '../../../../common/constants'; +import { TRANSFORM_LIST_COLUMN } from '../../common'; import { useDocumentationLinks, @@ -50,6 +57,14 @@ import { TransformAlertFlyoutWrapper, } from '../../../alerting/transform_alerting_flyout'; +const getDefaultTransformListState = (): ListingPageUrlState => ({ + pageIndex: 0, + pageSize: 10, + sortField: TRANSFORM_LIST_COLUMN.ID, + sortDirection: 'asc', + showPerPageOptions: true, +}); + const ErrorMessageCallout: FC<{ text: JSX.Element; errorMessage: IHttpFetchError | null; @@ -78,6 +93,10 @@ export const TransformManagement: FC = () => { const { esTransform } = useDocumentationLinks(); const { showNodeInfo } = useEnabledFeatures(); const { dataViewEditor } = useAppDependencies(); + const [transformPageState, setTransformPageState] = usePageUrlState( + 'transform', + getDefaultTransformListState() + ); const deleteTransforms = useDeleteTransforms(); @@ -346,6 +365,8 @@ export const TransformManagement: FC = () => { transforms={transforms} transformsLoading={transformsWithoutStatsLoading} transformsStatsLoading={transformsStatsLoading} + pageState={transformPageState as ListingPageUrlState} + updatePageState={setTransformPageState} /> )} @@ -380,7 +401,9 @@ export const TransformManagementSection: FC = () => { return ( - + + + ); }; diff --git a/x-pack/test/fleet_api_integration/apis/epm/__snapshots__/bulk_get_assets.snap b/x-pack/test/fleet_api_integration/apis/epm/__snapshots__/bulk_get_assets.snap index de3f68ba261153..761ecfa66af7bd 100644 --- a/x-pack/test/fleet_api_integration/apis/epm/__snapshots__/bulk_get_assets.snap +++ b/x-pack/test/fleet_api_integration/apis/epm/__snapshots__/bulk_get_assets.snap @@ -21,7 +21,7 @@ Array [ "type": "data_stream_ilm_policy", }, Object { - "appLink": "", + "appLink": "/app/ml/trained_models?_a=(trained_models:(queryText:'model_id:(default)'))", "attributes": Object {}, "id": "default", "type": "ml_model", From 7fb1577c1d42b670e4109f618c22f0c9541a512a Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Tue, 13 Aug 2024 11:13:23 -0400 Subject: [PATCH 06/92] [Fleet] Fix duplicates in agent version list (#190411) --- .../server/services/agents/versions.test.ts | 36 +++++++++++++++++++ .../fleet/server/services/agents/versions.ts | 10 +++--- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/agents/versions.test.ts b/x-pack/plugins/fleet/server/services/agents/versions.test.ts index 1277099f65f9a0..58e6dadd7f9e00 100644 --- a/x-pack/plugins/fleet/server/services/agents/versions.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/versions.test.ts @@ -221,6 +221,42 @@ describe('getAvailableVersions', () => { expect(res).toEqual(['8.10.0', '8.9.2', '8.1.0', '8.0.0', '7.17.0']); }); + it('should not include duplicate', async () => { + mockKibanaVersion = '300.0.0'; + mockedReadFile.mockResolvedValue(`["8.1.0", "8.0.0", "7.17.0", "7.16.0"]`); + mockedFetch.mockResolvedValueOnce({ + status: 200, + text: jest.fn().mockResolvedValue( + JSON.stringify([ + [ + { + title: 'Elastic Agent 8.1.0', + version_number: '8.1.0', + }, + { + title: 'Elastic Agent 8.10.0', + version_number: '8.10.0', + }, + { + title: 'Elastic Agent 8.10.0', + version_number: '8.10.0+build202407291657', + }, + { + title: 'Elastic Agent 8.9.2', + version_number: '8.9.2', + }, + , + ], + ]) + ), + } as any); + + const res = await getAvailableVersions({ ignoreCache: true }); + + // Should sort, uniquify and filter out versions < 7.17 + expect(res).toEqual(['8.10.0', '8.9.2', '8.1.0', '8.0.0', '7.17.0']); + }); + it('should cache results', async () => { mockKibanaVersion = '9.0.0'; mockedReadFile.mockResolvedValue(`["8.1.0", "8.0.0", "7.17.0", "7.16.0"]`); diff --git a/x-pack/plugins/fleet/server/services/agents/versions.ts b/x-pack/plugins/fleet/server/services/agents/versions.ts index fad0028c806915..f374275bf941bd 100644 --- a/x-pack/plugins/fleet/server/services/agents/versions.ts +++ b/x-pack/plugins/fleet/server/services/agents/versions.ts @@ -111,10 +111,12 @@ export const getAvailableVersions = async ({ // Coerce each version to a semver object and compare to our `MINIMUM_SUPPORTED_VERSION` - we // only want support versions in the final result. We'll also sort by newest version first. - availableVersions = uniq([...availableVersions, ...apiVersions]) - .map((item: any) => semverCoerce(item)?.version || '') - .filter((v: any) => semverGte(v, MINIMUM_SUPPORTED_VERSION)) - .sort((a: any, b: any) => (semverGt(a, b) ? -1 : 1)); + availableVersions = uniq( + [...availableVersions, ...apiVersions] + .map((item: any) => semverCoerce(item)?.version || '') + .filter((v: any) => semverGte(v, MINIMUM_SUPPORTED_VERSION)) + .sort((a: any, b: any) => (semverGt(a, b) ? -1 : 1)) + ); // if api versions are empty (air gapped or API not available), we add current kibana version, as the build file might not contain the latest released version if ( From b85b1cb506df9c6b26e541c5e3cc54c6ab575a61 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 13 Aug 2024 17:21:10 +0200 Subject: [PATCH 07/92] [OAS] Include alerting rule APIs (#189962) ## Summary Includes alerting rule APIs in our OAS snapshots. ## How to test Using bump CLI you can preview the output: ```sh bump preview ./oas_docs/bundle.json # or bump preview ./oas_docs/bundle.serverless.json ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../scripts/steps/capture_oas_snapshot.sh | 2 +- oas_docs/bundle.json | 4709 ++++++++++++++++- oas_docs/bundle.serverless.json | 4709 ++++++++++++++++- .../__snapshots__/generate_oas.test.ts.snap | 18 +- .../src/generate_oas.test.fixture.ts | 6 +- .../mutations/enum.test.ts | 33 + .../post_process_mutations/mutations/enum.ts | 40 +- .../mutations/object.test.ts | 7 +- .../mutations/object.ts | 2 +- .../src/operation_id_counter.test.ts | 31 + .../src/operation_id_counter.ts | 1 + 11 files changed, 9535 insertions(+), 23 deletions(-) create mode 100644 packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts diff --git a/.buildkite/scripts/steps/capture_oas_snapshot.sh b/.buildkite/scripts/steps/capture_oas_snapshot.sh index 9768ff50c8fa5a..fadd7276b47cc9 100755 --- a/.buildkite/scripts/steps/capture_oas_snapshot.sh +++ b/.buildkite/scripts/steps/capture_oas_snapshot.sh @@ -5,7 +5,7 @@ set -euo pipefail source .buildkite/scripts/common/util.sh echo --- Capture OAS snapshot -cmd="node scripts/capture_oas_snapshot --include-path /api/status" +cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules" if is_pr && ! is_auto_commit_disabled; then cmd="$cmd --update" fi diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index 3c6756b1da3695..fbf194c8491a2c 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -344,9 +344,4713 @@ }, "openapi": "3.0.0", "paths": { + "/api/alerting/rule/{id}": { + "delete": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#2", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Delete a rule", + "tags": [ + "alerting" + ] + }, + "get": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Get rule details", + "tags": [ + "alerting" + ] + }, + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%3F%7D#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule. If it is omitted, an ID is randomly generated.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "default": [], + "items": { + "additionalProperties": false, + "description": "An action that runs under defined conditions.", + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Conditions that affect whether the action runs. If you specify multiple conditions, all conditions must be met for the action to run. For example, if an alert occurs within the specified time frame and matches the query, the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "enabled": { + "default": true, + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "name": { + "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "schedule": { + "additionalProperties": false, + "description": "The check interval, which specifies how frequently the rule conditions are checked.", + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "tags": { + "default": [], + "description": "The tags for the rule.", + "items": { + "type": "string" + }, + "type": "array" + }, + "throttle": { + "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "rule_type_id", + "consumer", + "schedule" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Create a rule", + "tags": [ + "alerting" + ] + }, + "put": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#1", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "default": [], + "items": { + "additionalProperties": false, + "description": "An action that runs under defined conditions.", + "properties": { + "alerts_filter": { + "additionalProperties": false, + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "name": { + "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "tags": { + "default": [], + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "schedule" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Update a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_disable": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_disable#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "nullable": true, + "properties": { + "untrack": { + "description": "Defines whether this rule's alerts should be untracked.", + "type": "boolean" + } + }, + "type": "object", + "x-oas-optional": true + } + } + } + }, + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Disable a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_enable": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_enable#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Enable a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_mute_all": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_mute_all#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Mute all alerts", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_unmute_all": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_unmute_all#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Unmute all alerts", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_update_api_key": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_update_api_key#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Update the API key for a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{rule_id}/alert/{alert_id}/_mute": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_mute#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The identifier for the alert.", + "in": "path", + "name": "alert_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Mute an alert", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmute": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_unmute#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The identifier for the alert.", + "in": "path", + "name": "alert_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Unmute an alert", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rules/_find": { + "get": { + "operationId": "%2Fapi%2Falerting%2Frules%2F_find#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The number of rules to return per page.", + "in": "query", + "name": "per_page", + "required": false, + "schema": { + "default": 10, + "minimum": 0, + "type": "number" + } + }, + { + "description": "The page number to return.", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "An Elasticsearch simple_query_string query that filters the objects in the response.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The default operator to use for the simple_query_string.", + "in": "query", + "name": "default_search_operator", + "required": false, + "schema": { + "default": "OR", + "enum": [ + "OR", + "AND" + ], + "type": "string" + } + }, + { + "description": "The fields to perform the simple_query_string parsed query against.", + "in": "query", + "name": "search_fields", + "required": false, + "schema": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + } + }, + { + "description": "Determines which field is used to sort the results. The field must exist in the `attributes` key of the response.", + "in": "query", + "name": "sort_field", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Determines the sort order.", + "in": "query", + "name": "sort_order", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Filters the rules that have a relation with the reference objects with a specific type and identifier.", + "in": "query", + "name": "has_reference", + "required": false, + "schema": { + "additionalProperties": false, + "nullable": true, + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + } + }, + { + "in": "query", + "name": "fields", + "required": false, + "schema": { + "items": { + "description": "The fields to return in the `attributes` key of the response.", + "type": "string" + }, + "type": "array" + } + }, + { + "description": "A KQL string that you filter with an attribute from your saved object. It should look like `savedObjectType.attributes.title: \"myTitle\"`. However, if you used a direct attribute of a saved object, such as `updatedAt`, you must define your filter, for example, `savedObjectType.updatedAt > 2018-12-22`.", + "in": "query", + "name": "filter", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "filter_consumers", + "required": false, + "schema": { + "items": { + "description": "List of consumers to filter.", + "type": "string" + }, + "type": "array" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Get information about rules", + "tags": [ + "alerting" + ] + } + }, "/api/status": { "get": { - "operationId": "/api/status#0", + "operationId": "%2Fapi%2Fstatus#0", "parameters": [ { "description": "The version of the API to use", @@ -435,6 +5139,9 @@ } ], "tags": [ + { + "name": "alerting" + }, { "name": "system" } diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 3c6756b1da3695..fbf194c8491a2c 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -344,9 +344,4713 @@ }, "openapi": "3.0.0", "paths": { + "/api/alerting/rule/{id}": { + "delete": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#2", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Delete a rule", + "tags": [ + "alerting" + ] + }, + "get": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Get rule details", + "tags": [ + "alerting" + ] + }, + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%3F%7D#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule. If it is omitted, an ID is randomly generated.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "default": [], + "items": { + "additionalProperties": false, + "description": "An action that runs under defined conditions.", + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Conditions that affect whether the action runs. If you specify multiple conditions, all conditions must be met for the action to run. For example, if an alert occurs within the specified time frame and matches the query, the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "enabled": { + "default": true, + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "name": { + "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "schedule": { + "additionalProperties": false, + "description": "The check interval, which specifies how frequently the rule conditions are checked.", + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "tags": { + "default": [], + "description": "The tags for the rule.", + "items": { + "type": "string" + }, + "type": "array" + }, + "throttle": { + "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "rule_type_id", + "consumer", + "schedule" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Create a rule", + "tags": [ + "alerting" + ] + }, + "put": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#1", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "default": [], + "items": { + "additionalProperties": false, + "description": "An action that runs under defined conditions.", + "properties": { + "alerts_filter": { + "additionalProperties": false, + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "name": { + "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "default": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "tags": { + "default": [], + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "name", + "schedule" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Update a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_disable": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_disable#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "nullable": true, + "properties": { + "untrack": { + "description": "Defines whether this rule's alerts should be untracked.", + "type": "boolean" + } + }, + "type": "object", + "x-oas-optional": true + } + } + } + }, + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Disable a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_enable": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_enable#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Enable a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_mute_all": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_mute_all#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Mute all alerts", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_unmute_all": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_unmute_all#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Unmute all alerts", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{id}/_update_api_key": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_update_api_key#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Update the API key for a rule", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{rule_id}/alert/{alert_id}/_mute": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_mute#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The identifier for the alert.", + "in": "path", + "name": "alert_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Mute an alert", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmute": { + "post": { + "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_unmute#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "The identifier for the rule.", + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "The identifier for the alert.", + "in": "path", + "name": "alert_id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Indicates a successful call." + } + }, + "summary": "Unmute an alert", + "tags": [ + "alerting" + ] + } + }, + "/api/alerting/rules/_find": { + "get": { + "operationId": "%2Fapi%2Falerting%2Frules%2F_find#0", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The number of rules to return per page.", + "in": "query", + "name": "per_page", + "required": false, + "schema": { + "default": 10, + "minimum": 0, + "type": "number" + } + }, + { + "description": "The page number to return.", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "An Elasticsearch simple_query_string query that filters the objects in the response.", + "in": "query", + "name": "search", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "The default operator to use for the simple_query_string.", + "in": "query", + "name": "default_search_operator", + "required": false, + "schema": { + "default": "OR", + "enum": [ + "OR", + "AND" + ], + "type": "string" + } + }, + { + "description": "The fields to perform the simple_query_string parsed query against.", + "in": "query", + "name": "search_fields", + "required": false, + "schema": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + } + }, + { + "description": "Determines which field is used to sort the results. The field must exist in the `attributes` key of the response.", + "in": "query", + "name": "sort_field", + "required": false, + "schema": { + "type": "string" + } + }, + { + "description": "Determines the sort order.", + "in": "query", + "name": "sort_order", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + { + "description": "Filters the rules that have a relation with the reference objects with a specific type and identifier.", + "in": "query", + "name": "has_reference", + "required": false, + "schema": { + "additionalProperties": false, + "nullable": true, + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "type", + "id" + ], + "type": "object" + } + }, + { + "in": "query", + "name": "fields", + "required": false, + "schema": { + "items": { + "description": "The fields to return in the `attributes` key of the response.", + "type": "string" + }, + "type": "array" + } + }, + { + "description": "A KQL string that you filter with an attribute from your saved object. It should look like `savedObjectType.attributes.title: \"myTitle\"`. However, if you used a direct attribute of a saved object, such as `updatedAt`, you must define your filter, for example, `savedObjectType.updatedAt > 2018-12-22`.", + "in": "query", + "name": "filter", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "filter_consumers", + "required": false, + "schema": { + "items": { + "description": "List of consumers to filter.", + "type": "string" + }, + "type": "array" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "actions": { + "items": { + "additionalProperties": false, + "properties": { + "alerts_filter": { + "additionalProperties": false, + "description": "Defines a period that limits whether the action runs.", + "properties": { + "query": { + "additionalProperties": false, + "properties": { + "dsl": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", + "type": "string" + }, + "filters": { + "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", + "items": { + "additionalProperties": false, + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "A filter can be either specific to an application context or applied globally.", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": {}, + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "kql": { + "description": "A filter written in Kibana Query Language (KQL).", + "type": "string" + } + }, + "required": [ + "kql", + "filters" + ], + "type": "object" + }, + "timeframe": { + "additionalProperties": false, + "properties": { + "days": { + "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", + "items": { + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer" + }, + "type": "array" + }, + "hours": { + "additionalProperties": false, + "properties": { + "end": { + "description": "The end of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + }, + "start": { + "description": "The start of the time frame in 24-hour notation (`hh:mm`).", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" + }, + "timezone": { + "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", + "type": "string" + } + }, + "required": [ + "days", + "hours", + "timezone" + ], + "type": "object" + } + }, + "type": "object" + }, + "connector_type_id": { + "description": "The type of connector. This property appears in responses but cannot be set in requests.", + "type": "string" + }, + "frequency": { + "additionalProperties": false, + "properties": { + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "type": "string" + }, + "summary": { + "description": "Indicates whether the action is a summary.", + "type": "boolean" + }, + "throttle": { + "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "summary", + "notify_when", + "throttle" + ], + "type": "object" + }, + "group": { + "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", + "type": "string" + }, + "id": { + "description": "The identifier for the connector saved object.", + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", + "type": "object" + }, + "use_alert_data_for_template": { + "description": "Indicates whether to use alert data as a template.", + "type": "boolean" + }, + "uuid": { + "description": "A universally unique identifier (UUID) for the action.", + "type": "string" + } + }, + "required": [ + "id", + "connector_type_id", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "active_snoozes": { + "items": { + "description": "List of active snoozes for the rule.", + "type": "string" + }, + "type": "array" + }, + "alert_delay": { + "additionalProperties": false, + "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", + "properties": { + "active": { + "description": "The number of consecutive runs that must meet the rule conditions.", + "type": "number" + } + }, + "required": [ + "active" + ], + "type": "object" + }, + "api_key_created_by_user": { + "description": "Indicates whether the API key that is associated with the rule was created by the user.", + "nullable": true, + "type": "boolean" + }, + "api_key_owner": { + "description": "The owner of the API key that is associated with the rule and used to run background tasks.", + "nullable": true, + "type": "string" + }, + "consumer": { + "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", + "type": "string" + }, + "created_at": { + "description": "The date and time that the rule was created.", + "type": "string" + }, + "created_by": { + "description": "The identifier for the user that created the rule.", + "nullable": true, + "type": "string" + }, + "enabled": { + "description": "Indicates whether you want to run the rule on an interval basis after it is created.", + "type": "boolean" + }, + "execution_status": { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Error message.", + "type": "string" + }, + "reason": { + "description": "Reason for error.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + }, + "last_duration": { + "description": "Duration of last execution of the rule.", + "type": "number" + }, + "last_execution_date": { + "description": "The date and time when rule was executed last.", + "type": "string" + }, + "status": { + "description": "Status of rule execution.", + "enum": [ + "ok", + "active", + "error", + "warning", + "pending", + "unknown" + ], + "type": "string" + }, + "warning": { + "additionalProperties": false, + "properties": { + "message": { + "description": "Warning message.", + "type": "string" + }, + "reason": { + "description": "Reason for warning.", + "enum": [ + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "type": "string" + } + }, + "required": [ + "reason", + "message" + ], + "type": "object" + } + }, + "required": [ + "status", + "last_execution_date" + ], + "type": "object" + }, + "id": { + "description": "The identifier for the rule.", + "type": "string" + }, + "is_snoozed_until": { + "description": "The date when the rule will no longer be snoozed.", + "nullable": true, + "type": "string" + }, + "last_run": { + "additionalProperties": false, + "nullable": true, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "mapped_params": { + "additionalProperties": {}, + "type": "object" + }, + "monitoring": { + "additionalProperties": false, + "description": "Monitoring details of the rule.", + "properties": { + "run": { + "additionalProperties": false, + "description": "Rule run details.", + "properties": { + "calculated_metrics": { + "additionalProperties": false, + "description": "Calculation of different percentiles and success ratio.", + "properties": { + "p50": { + "type": "number" + }, + "p95": { + "type": "number" + }, + "p99": { + "type": "number" + }, + "success_ratio": { + "type": "number" + } + }, + "required": [ + "success_ratio" + ], + "type": "object" + }, + "history": { + "description": "History of the rule run.", + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule run.", + "type": "number" + }, + "outcome": { + "additionalProperties": false, + "properties": { + "alerts_count": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Number of active alerts during last run.", + "nullable": true, + "type": "number" + }, + "ignored": { + "description": "Number of ignored alerts during last run.", + "nullable": true, + "type": "number" + }, + "new": { + "description": "Number of new alerts during last run.", + "nullable": true, + "type": "number" + }, + "recovered": { + "description": "Number of recovered alerts during last run.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "outcome": { + "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", + "enum": [ + "succeeded", + "warning", + "failed" + ], + "type": "string" + }, + "outcome_msg": { + "items": { + "description": "Outcome message generated during last rule run.", + "type": "string" + }, + "nullable": true, + "type": "array" + }, + "outcome_order": { + "description": "Order of the outcome.", + "type": "number" + }, + "warning": { + "description": "Warning of last rule execution.", + "enum": [ + "read", + "decrypt", + "execute", + "unknown", + "license", + "timeout", + "disabled", + "validate", + "maxExecutableActions", + "maxAlerts", + "maxQueuedActions" + ], + "nullable": true, + "type": "string" + } + }, + "required": [ + "outcome", + "alerts_count" + ], + "type": "object" + }, + "success": { + "description": "Indicates whether the rule run was successful.", + "type": "boolean" + }, + "timestamp": { + "description": "Time of rule run.", + "type": "number" + } + }, + "required": [ + "success", + "timestamp" + ], + "type": "object" + }, + "type": "array" + }, + "last_run": { + "additionalProperties": false, + "properties": { + "metrics": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of most recent rule run.", + "type": "number" + }, + "gap_duration_s": { + "description": "Duration in seconds of rule run gap.", + "nullable": true, + "type": "number" + }, + "total_alerts_created": { + "description": "Total number of alerts created during last rule run.", + "nullable": true, + "type": "number" + }, + "total_alerts_detected": { + "description": "Total number of alerts detected during last rule run.", + "nullable": true, + "type": "number" + }, + "total_indexing_duration_ms": { + "description": "Total time spent indexing documents during last rule run in milliseconds.", + "nullable": true, + "type": "number" + }, + "total_search_duration_ms": { + "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", + "nullable": true, + "type": "number" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Time of the most recent rule run.", + "type": "string" + } + }, + "required": [ + "timestamp", + "metrics" + ], + "type": "object" + } + }, + "required": [ + "history", + "calculated_metrics", + "last_run" + ], + "type": "object" + } + }, + "required": [ + "run" + ], + "type": "object" + }, + "mute_all": { + "description": "Indicates whether all alerts are muted.", + "type": "boolean" + }, + "muted_alert_ids": { + "items": { + "description": "List of identifiers of muted alerts. ", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": " The name of the rule.", + "type": "string" + }, + "next_run": { + "description": "Date and time of the next run of the rule.", + "nullable": true, + "type": "string" + }, + "notify_when": { + "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "enum": [ + "onActionGroupChange", + "onActiveAlert", + "onThrottleInterval" + ], + "nullable": true, + "type": "string" + }, + "params": { + "additionalProperties": {}, + "description": "The parameters for the rule.", + "type": "object" + }, + "revision": { + "description": "The rule revision number.", + "type": "number" + }, + "rule_type_id": { + "description": "The rule type identifier.", + "type": "string" + }, + "running": { + "description": "Indicates whether the rule is running.", + "nullable": true, + "type": "boolean" + }, + "schedule": { + "additionalProperties": false, + "properties": { + "interval": { + "description": "The interval is specified in seconds, minutes, hours, or days.", + "type": "string" + } + }, + "required": [ + "interval" + ], + "type": "object" + }, + "scheduled_task_id": { + "description": "Identifier of the scheduled task.", + "type": "string" + }, + "snooze_schedule": { + "items": { + "additionalProperties": false, + "properties": { + "duration": { + "description": "Duration of the rule snooze schedule.", + "type": "number" + }, + "id": { + "description": "Identifier of the rule snooze schedule.", + "type": "string" + }, + "rRule": { + "additionalProperties": false, + "properties": { + "byhour": { + "items": { + "description": "Indicates hours of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "byminute": { + "items": { + "description": "Indicates minutes of the hour to recur.", + "type": "number" + }, + "type": "array" + }, + "bymonth": { + "items": { + "description": "Indicates months of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "bymonthday": { + "items": { + "description": "Indicates the days of the month to recur.", + "type": "number" + }, + "type": "array" + }, + "bysecond": { + "items": { + "description": "Indicates seconds of the day to recur.", + "type": "number" + }, + "type": "array" + }, + "bysetpos": { + "items": { + "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", + "type": "number" + }, + "type": "array" + }, + "byweekday": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ], + "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." + }, + "type": "array" + }, + "byweekno": { + "items": { + "description": "Indicates number of the week hours to recur.", + "type": "number" + }, + "type": "array" + }, + "byyearday": { + "items": { + "description": "Indicates the days of the year that this rule should recur.", + "type": "number" + }, + "type": "array" + }, + "count": { + "description": "Number of times the rule should recur until it stops.", + "type": "number" + }, + "dtstart": { + "description": "Rule start date in Coordinated Universal Time (UTC).", + "type": "string" + }, + "freq": { + "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer" + }, + "interval": { + "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", + "type": "number" + }, + "tzid": { + "description": "Indicates timezone abbreviation.", + "type": "string" + }, + "until": { + "description": "Recur the rule until this date.", + "type": "string" + }, + "wkst": { + "description": "Indicates the start of week, defaults to Monday.", + "enum": [ + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU" + ], + "type": "string" + } + }, + "required": [ + "dtstart", + "tzid" + ], + "type": "object" + }, + "skipRecurrences": { + "items": { + "description": "Skips recurrence of rule on this date.", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "duration", + "rRule" + ], + "type": "object" + }, + "type": "array" + }, + "tags": { + "items": { + "description": "The tags for the rule.", + "type": "string" + }, + "type": "array" + }, + "throttle": { + "deprecated": true, + "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", + "nullable": true, + "type": "string" + }, + "updated_at": { + "description": "The date and time that the rule was updated most recently.", + "type": "string" + }, + "updated_by": { + "description": "The identifier for the user that updated this rule most recently.", + "nullable": true, + "type": "string" + }, + "view_in_app_relative_url": { + "description": "Relative URL to view rule in the app.", + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "enabled", + "name", + "tags", + "rule_type_id", + "consumer", + "schedule", + "actions", + "params", + "created_by", + "updated_by", + "created_at", + "updated_at", + "api_key_owner", + "mute_all", + "muted_alert_ids", + "execution_status", + "revision" + ], + "type": "object" + } + } + }, + "description": "Indicates a successful call." + } + }, + "summary": "Get information about rules", + "tags": [ + "alerting" + ] + } + }, "/api/status": { "get": { - "operationId": "/api/status#0", + "operationId": "%2Fapi%2Fstatus#0", "parameters": [ { "description": "The version of the API to use", @@ -435,6 +5139,9 @@ } ], "tags": [ + { + "name": "alerting" + }, { "name": "system" } diff --git a/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap index 3e16455f5006eb..a3c634f582d436 100644 --- a/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap +++ b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap @@ -44,7 +44,7 @@ Object { "paths": Object { "/foo/{id}": Object { "get": Object { - "operationId": "/foo/{id}#0", + "operationId": "%2Ffoo%2F%7Bid%7D#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -138,7 +138,7 @@ Object { "/bar": Object { "get": Object { "deprecated": true, - "operationId": "/bar#0", + "operationId": "%2Fbar#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -229,7 +229,7 @@ OK response oas-test-version-2", "/foo/{id}/{path*}": Object { "delete": Object { "description": "route description", - "operationId": "/foo/{id}/{path*}#2", + "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#2", "parameters": Array [ Object { "description": "The version of the API to use", @@ -267,7 +267,7 @@ OK response oas-test-version-2", }, "get": Object { "description": "route description", - "operationId": "/foo/{id}/{path*}#0", + "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -413,7 +413,7 @@ OK response oas-test-version-2", }, "post": Object { "description": "route description", - "operationId": "/foo/{id}/{path*}#1", + "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#1", "parameters": Array [ Object { "description": "The version of the API to use", @@ -570,7 +570,7 @@ OK response oas-test-version-2", }, "/no-xsrf/{id}/{path*}": Object { "post": Object { - "operationId": "/no-xsrf/{id}/{path*}#1", + "operationId": "%2Fno-xsrf%2F%7Bid%7D%2F%7Bpath*%7D#1", "parameters": Array [ Object { "description": "The version of the API to use", @@ -721,7 +721,7 @@ Object { "paths": Object { "/recursive": Object { "get": Object { - "operationId": "/recursive#0", + "operationId": "%2Frecursive#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -804,7 +804,7 @@ Object { "paths": Object { "/foo/{id}": Object { "get": Object { - "operationId": "/foo/{id}#0", + "operationId": "%2Ffoo%2F%7Bid%7D#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -842,7 +842,7 @@ Object { }, "/test": Object { "get": Object { - "operationId": "/test#0", + "operationId": "%2Ftest#0", "parameters": Array [ Object { "description": "The version of the API to use", diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts b/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts index 09bb6064c2bcb7..760deff0200226 100644 --- a/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts +++ b/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts @@ -33,7 +33,7 @@ export const sharedOas = { '/bar': { get: { deprecated: true, - operationId: '/bar#0', + operationId: '%2Fbar#0', parameters: [ { description: 'The version of the API to use', @@ -152,7 +152,7 @@ export const sharedOas = { '/foo/{id}/{path*}': { get: { description: 'route description', - operationId: '/foo/{id}/{path*}#0', + operationId: '%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#0', parameters: [ { description: 'The version of the API to use', @@ -276,7 +276,7 @@ export const sharedOas = { }, post: { description: 'route description', - operationId: '/foo/{id}/{path*}#1', + operationId: '%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#1', parameters: [ { description: 'The version of the API to use', diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts index 5c783e739d0453..71f3ff1eeca70d 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts @@ -110,6 +110,39 @@ describe('processEnum', () => { ], }, }, + { + name: 'correctly transforms schema.nullable inputs', + input: { + anyOf: [ + { + description: 'test', + type: 'object', + properties: { + test: { + type: 'string', + }, + }, + required: ['test'], + }, + { + enum: [], + nullable: true, + type: undefined, + }, + ], + } as OpenAPIV3.SchemaObject, + expected: { + description: 'test', + type: 'object', + properties: { + test: { + type: 'string', + }, + }, + required: ['test'], + nullable: true, + }, + }, ])('$name', ({ input, expected }) => { processEnum(input); expect(input).toEqual(expected); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts index 7bbb7ae2c26d0a..fb2e3856ae4950 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts @@ -9,8 +9,38 @@ import type { OpenAPIV3 } from 'openapi-types'; import { isReferenceObject } from '../../../common'; -export const processEnum = (schema: OpenAPIV3.SchemaObject) => { - if (!schema.anyOf) return; +/** Identify special case output of schema.nullable() */ +const isNullableOutput = (schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject) => { + return ( + !isReferenceObject(schema) && + Object.keys(schema).length === 3 && + schema.enum?.length === 0 && + schema.nullable === true && + schema.type === undefined + ); +}; + +/** + * Handle special case output of schema.nullable() + * + * We go from: + * { anyOf: [ { type: 'string' }, { nullable: true, enum: [] } ] } + * + * To: + * { type: 'string', nullable: true } + */ +const processNullableOutput = (schema: OpenAPIV3.SchemaObject) => { + if (schema.anyOf!.length !== 2) return false; + const idx = schema.anyOf!.findIndex((item) => isNullableOutput(item)); + if (idx === -1) return false; + const anyOf = schema.anyOf!; + delete schema.anyOf; + schema.nullable = true; + Object.assign(schema, anyOf[1 - idx]); + return true; +}; + +const prettifyEnum = (schema: OpenAPIV3.SchemaObject) => { const result: unknown[] = []; let type: OpenAPIV3.SchemaObject['type']; for (const item of schema.anyOf!) { @@ -24,3 +54,9 @@ export const processEnum = (schema: OpenAPIV3.SchemaObject) => { schema.enum = result; delete schema.anyOf; }; + +export const processEnum = (schema: OpenAPIV3.SchemaObject) => { + if (!schema.anyOf) return; + if (processNullableOutput(schema)) return; + prettifyEnum(schema); +}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts index fd7b127ef87260..ae257aaec1edff 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts @@ -11,13 +11,10 @@ import { joi2JsonInternal } from '../../parse'; import { processObject } from './object'; test.each([ - [ - schema.object({}), - { type: 'object', properties: {}, additionalProperties: false, required: [] }, - ], + [schema.object({}), { type: 'object', properties: {}, additionalProperties: false }], [ schema.object({ never: schema.never() }), - { type: 'object', properties: {}, additionalProperties: false, required: [] }, + { type: 'object', properties: {}, additionalProperties: false }, ], [ schema.object( diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts index ec5888f986bd60..0b21134061c78e 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts @@ -38,7 +38,7 @@ const populateRequiredFields = (schema: OpenAPIV3.SchemaObject): void => { } } - schema.required = required; + if (required.length > 0) schema.required = required; }; const removeNeverType = (schema: OpenAPIV3.SchemaObject): void => { diff --git a/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts b/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts new file mode 100644 index 00000000000000..270b6b6e2c9820 --- /dev/null +++ b/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { createOperationIdCounter } from './operation_id_counter'; + +test('empty case', () => { + const opIdCounter = createOperationIdCounter(); + expect(opIdCounter('')).toBe('#0'); +}); + +test('other cases', () => { + const opIdCounter = createOperationIdCounter(); + const tests = [ + ['/', '%2F#0'], + ['/api/cool', '%2Fapi%2Fcool#0'], + ['/api/cool', '%2Fapi%2Fcool#1'], + ['/api/cool', '%2Fapi%2Fcool#2'], + ['/api/cool/{variable}', '%2Fapi%2Fcool%2F%7Bvariable%7D#0'], + ['/api/cool/{optionalVariable?}', '%2Fapi%2Fcool%2F%7BoptionalVariable%3F%7D#0'], + ['/api/cool/{optionalVariable?}', '%2Fapi%2Fcool%2F%7BoptionalVariable%3F%7D#1'], + ]; + + tests.forEach(([input, expected]) => { + expect(opIdCounter(input)).toBe(expected); + }); +}); diff --git a/packages/kbn-router-to-openapispec/src/operation_id_counter.ts b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts index 91fe2adf395d84..0842ec88d094f7 100644 --- a/packages/kbn-router-to-openapispec/src/operation_id_counter.ts +++ b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts @@ -11,6 +11,7 @@ export type OperationIdCounter = (name: string) => string; export const createOperationIdCounter = () => { const operationIdCounters = new Map(); return (name: string): string => { + name = encodeURIComponent(name); // Aliases an operationId to ensure it is unique across // multiple method+path combinations sharing a name. // "search" -> "search#0", "search#1", etc. From 386d290ea4cdddba109787a47a8b35e1a9978991 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 13 Aug 2024 17:29:48 +0200 Subject: [PATCH 08/92] [Synthetics] Unskip get too many monitors test !! (#190404) ## Summary Fixes https://github.com/elastic/kibana/issues/169753 !! Flaky test runner https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6753 --- .../apis/synthetics/get_monitor.ts | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts index 41c299b4ed3caf..98fbefd89acc27 100644 --- a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts @@ -25,6 +25,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const kibanaServer = getService('kibanaServer'); + const retry = getService('retry'); let _monitors: MonitorFields[]; let monitors: MonitorFields[]; @@ -59,8 +60,7 @@ export default function ({ getService }: FtrProviderContext) { monitors = _monitors; }); - // FLAKY: https://github.com/elastic/kibana/issues/169753 - describe.skip('get many monitors', () => { + describe('get many monitors', () => { it('without params', async () => { const [mon1, mon2] = await Promise.all(monitors.map(saveMonitor)); @@ -101,18 +101,20 @@ export default function ({ getService }: FtrProviderContext) { .map(saveMonitor) ); - const firstPageResp = await supertest - .get(`${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}?page=1&perPage=2`) - .expect(200); - const secondPageResp = await supertest - .get(`${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}?page=2&perPage=3`) - .expect(200); + await retry.try(async () => { + const firstPageResp = await supertest + .get(`${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}?page=1&perPage=2`) + .expect(200); + const secondPageResp = await supertest + .get(`${SYNTHETICS_API_URLS.SYNTHETICS_MONITORS}?page=2&perPage=3`) + .expect(200); - expect(firstPageResp.body.total).greaterThan(6); - expect(firstPageResp.body.monitors.length).eql(2); - expect(secondPageResp.body.monitors.length).eql(3); + expect(firstPageResp.body.total).greaterThan(6); + expect(firstPageResp.body.monitors.length).eql(2); + expect(secondPageResp.body.monitors.length).eql(3); - expect(firstPageResp.body.monitors[0].id).not.eql(secondPageResp.body.monitors[0].id); + expect(firstPageResp.body.monitors[0].id).not.eql(secondPageResp.body.monitors[0].id); + }); }); it('with single monitorQueryId filter', async () => { From 74d88580a5e3d24c6421942f2c96a8dfd56d39d1 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Tue, 13 Aug 2024 11:30:19 -0400 Subject: [PATCH 09/92] Migrate codebase to use Object.hasOwn instead of Object.hasOwnProperty (#186829) ## Summary This PR has breadth, but not depth. This adds 3 new `eslint` rules. The first two protect against the use of code generated from strings (`eval` and friends), which will not work client-side due to our CSP, and is not something we wish to support server-side. The last rule aims to prevent a subtle class of bugs, and to defend against a subset of prototype pollution exploits: - `no-new-func` to be compliant with our CSP, and to prevent code execution from strings server-side: https://eslint.org/docs/latest/rules/no-new-func - `no-implied-eval` to be compliant with our CSP, and to prevent code execution from strings server-side: https://eslint.org/docs/latest/rules/no-implied-eval. Note that this function implies that it prevents no-new-func, but I don't see [test cases](https://github.com/eslint/eslint/blob/main/tests/lib/rules/no-implied-eval.js) covering this behavior, so I think we should play it safe and enable both rules. - `no-prototype-builtins` to prevent accessing shadowed properties: https://eslint.org/docs/latest/rules/no-prototype-builtins In order to be compliant with `no-prototype-builtins`, I've migrated all usages and variants of `Object.hasOwnProperty` to use the newer [`Object.hasOwn`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn). --- .../search/search_react_embeddable.tsx | 4 +- .../public/trigger_context_example.tsx | 2 +- .../src/client_config.test.ts | 2 +- .../src/core/build_active_mappings.ts | 2 +- .../src/core/build_index_map.ts | 2 +- .../src/core/build_types_mappings.ts | 2 +- .../src/clients/base_ui_settings_client.ts | 2 +- .../src/clients/ui_settings_client_common.ts | 4 +- .../src/ui_settings_service.ts | 2 +- .../modes/x_json/worker/x_json.ace.worker.js | 8 ++-- packages/kbn-cli-dev-mode/src/optimizer.ts | 2 +- .../src/search/tabify/tabify_docs.ts | 4 +- .../src/lib/indices/__mocks__/stubs.ts | 2 +- packages/kbn-eslint-config/.eslintrc.js | 4 ++ packages/kbn-expect/expect.js | 4 +- packages/kbn-flot-charts/lib/jquery_flot.js | 2 +- .../src/spec/index.regressions.test.ts | 2 +- packages/kbn-handlebars/src/utils.ts | 1 + packages/kbn-handlebars/src/visitor.ts | 2 +- .../src/update_vscode_config.ts | 2 +- .../field_input/input/select_input.tsx | 2 +- .../settings/components/form/use_save.ts | 2 +- .../public/role_switcher.tsx | 2 +- packages/kbn-safer-lodash-set/README.md | 2 +- .../test/fp_patch_test.js | 2 +- .../kbn-safer-lodash-set/test/patch_test.js | 2 +- .../src/default_validation_error_handler.ts | 2 +- packages/kbn-std/src/ensure_deep_object.ts | 2 +- .../src/ensure_no_unsafe_properties.ts | 10 +--- .../lib/providers/async_instance.ts | 6 +-- .../lib/providers/verbose_instance.ts | 2 +- .../src/jest/setup/polyfills.jsdom.js | 10 ++-- .../src/kbn_client/kbn_client_ui_settings.ts | 2 +- .../src/tooling_log_text_writer.ts | 2 +- .../field_examples_calculator.ts | 2 +- .../interfaces/has_execution_context.ts | 2 +- .../shared-ux/chrome/navigation/src/utils.ts | 2 +- src/dev/storybook/run_storybook_cli.ts | 2 +- .../metric_trendline_function.ts | 2 +- .../public/utils/layers/get_color.ts | 6 +-- .../convert_mapbox_vector_tile_to_json.ts | 2 +- .../legacy_core_editor/mode/worker/worker.js | 5 +- .../server/custom_integration_registry.ts | 2 +- .../lib/dashboard_panel_converters.test.ts | 6 +-- .../search_source/search_source.test.ts | 2 +- .../search/search_source/search_source.ts | 4 +- .../common/search/tabify/response_writer.ts | 2 +- .../data/public/utils/shallow_equal.ts | 2 +- .../server/search/session/session_service.ts | 2 +- .../lib/field_capabilities/overrides.ts | 2 +- .../expressions/common/ast/build_function.ts | 6 +-- .../field_formats/common/converters/url.ts | 2 +- .../public/management_sections_service.ts | 4 +- .../objects_table/components/table.test.tsx | 2 +- .../filter_editor/phrase_suggestor.tsx | 3 +- .../query_string_input/query_string_input.tsx | 6 ++- .../public/utils/shallow_equal.ts | 2 +- .../public/components/agg_params.tsx | 4 +- .../utils/table_vis_response_handler.ts | 2 +- .../timelion/server/series_functions/props.js | 2 +- .../components/inspector_data_grid.tsx | 2 +- .../vislib/public/vislib/lib/data.js | 2 +- .../vislib/public/vislib/response_handler.js | 2 +- .../dev-tools/api_debug/request_from_api.js | 2 +- x-pack/packages/ml/data_grid/lib/common.ts | 4 +- .../packages/ml/url_state/src/url_state.tsx | 2 +- x-pack/plugins/actions/server/index.ts | 8 ++-- .../actions/server/lib/mustache_renderer.ts | 2 +- .../saved_objects/actions_migrations.ts | 10 ++-- .../public/application/utils/search_utils.ts | 2 +- ...log_rate_analysis_results_table_groups.tsx | 2 +- .../use_columns.tsx | 2 +- .../server/alerts_client/alerts_client.ts | 4 +- .../alerts_client/legacy_alerts_client.ts | 2 +- .../alerting/server/lib/process_alerts.ts | 8 ++-- .../index.ts | 4 +- .../server/rules_client/lib/update_meta.ts | 2 +- .../lib/update_meta_attributes.ts | 2 +- .../saved_objects/migrations/7.11/index.ts | 2 +- .../public/components/user_actions/status.tsx | 3 +- .../cloud_defend/public/common/utils.ts | 2 +- .../control_general_view_selector/index.tsx | 8 ++-- .../server/assets/fullstory_library.js | 2 +- .../components/fleet_extensions/utils.ts | 2 +- .../follower_index_pause_provider.js | 1 - .../common/types/field_vis_config.ts | 4 +- .../combined_fields/combined_fields_form.tsx | 2 +- .../results_links/results_links.tsx | 2 +- .../common/components/utils/utils.ts | 2 +- .../hooks/use_overall_stats.ts | 2 +- .../index_data_visualizer.tsx | 2 +- .../search_strategy/requests/overall_stats.ts | 10 ++-- .../utils/saved_search_utils.ts | 2 +- .../curations/curation/results/utils.ts | 2 +- .../curation_suggestion_logic.ts | 2 +- .../ignored_queries_logic.ts | 2 +- .../components/relevance_tuning/utils.ts | 2 +- .../result_settings/result_settings_logic.ts | 2 +- .../components/schema/schema_logic.ts | 2 +- .../docs_explorer/convert_results.ts | 2 +- .../pipelines_json_configurations_logic.ts | 2 +- .../shared/pipelines/is_managed.ts | 2 +- .../get_ml_inference_pipeline_processors.ts | 4 +- .../fields_metadata_client.test.ts | 48 +++++++++---------- .../integration_fields_repository.ts | 4 +- .../fleet/public/applications/fleet/app.tsx | 2 - .../public/applications/integrations/app.tsx | 2 - .../cloud_security_posture/to_v8_11_0.ts | 5 +- .../services/api_keys/transform_api_keys.ts | 4 +- .../epm/elasticsearch/template/install.ts | 2 +- .../epm/elasticsearch/template/template.ts | 8 ++-- .../transform/transform_utils.ts | 2 +- .../workspace/graph_client_workspace.js | 8 ++-- .../shared_fields/index_priority_field.tsx | 9 ++-- .../server/graphs/ecs/validate.ts | 2 +- .../form_based/dimension_panel/time_shift.tsx | 2 +- .../visualizations/xy/xy_suggestions.ts | 2 +- .../server/migrations/common_migrations.ts | 2 +- x-pack/plugins/licensing/common/license.ts | 2 +- .../elasticsearch_geo_utils.test.js | 6 +-- .../common/elasticsearch_util/es_agg_utils.ts | 4 +- .../ems_vector_tile_layer.tsx | 4 +- .../sources/es_agg_source/es_agg_source.ts | 2 +- .../process_distance_response.ts | 2 +- .../join_sources/table_source/table_source.ts | 4 +- .../mvt_single_layer_vector_source.tsx | 2 +- .../mb_map/remove_orphaned.ts | 2 +- .../lens/choropleth_chart/suggestions.ts | 2 +- .../maps/public/selectors/map_selectors.ts | 2 +- .../map_stats/map_stats_collector.ts | 6 +-- x-pack/plugins/ml/common/types/alerts.ts | 6 +-- x-pack/plugins/ml/common/util/es_utils.ts | 3 +- x-pack/plugins/ml/common/util/job_utils.ts | 4 +- .../ml/common/util/validation_utils.ts | 2 +- .../revert_model_snapshot_flyout.tsx | 2 - .../data_frame_analytics/common/analytics.ts | 2 +- .../action_clone/clone_action_name.tsx | 4 +- .../hooks/use_create_analytics_form/state.ts | 2 +- .../explorer_anomalies_container.tsx | 2 - .../explorer/swimlane_container.tsx | 2 +- .../group_selector/group_selector.js | 4 +- ...ference_properties_from_pipeline_config.ts | 4 +- .../model_management/models_list.tsx | 2 +- .../anomaly_detection_panel.tsx | 2 +- .../services/field_format_service.ts | 2 +- .../series_controls/series_controls.tsx | 4 +- .../application/util/custom_url_utils.ts | 5 +- .../plugins/ml/public/maps/anomaly_source.tsx | 2 +- x-pack/plugins/ml/public/maps/util.ts | 4 +- .../models/data_visualizer/data_visualizer.ts | 8 ++-- .../models/fields_service/fields_service.ts | 12 ++--- .../ml/server/models/job_service/jobs.ts | 2 +- .../job_validation/validate_cardinality.ts | 4 +- .../notifications_service_provider.ts | 2 +- .../contexts/global_state_context.tsx | 2 +- .../models/graph/plugin_vertex.js | 4 +- .../monitoring/public/lib/form_validation.ts | 2 +- .../server/lib/alerts/fetch_available_ccs.ts | 4 +- .../nodes/get_nodes/get_paginated_nodes.ts | 2 +- .../lib/elasticsearch_settings/cluster.ts | 2 +- .../lib/logstash/get_pipeline_vertex.ts | 2 +- .../telemetry_collection/get_beats_stats.ts | 8 ++-- .../logstash_agent_monitoring.ts | 4 +- .../logstash_metricbeat_monitoring.ts | 6 +-- .../logstash_self_monitoring.ts | 6 +-- .../monitoring_collection/server/plugin.ts | 4 +- .../settings_page/settings_page.tsx | 2 +- .../shared/stacktrace/stackframe.tsx | 2 +- .../entities/utils/calculate_avg_metrics.ts | 2 +- .../alerting/logs/log_threshold/types.ts | 2 +- .../asset_details/tabs/metadata/utils.ts | 2 +- .../metric_threshold/lib/metric_query.test.ts | 4 +- .../logs_explorer/public/utils/proxies.ts | 2 +- .../alerts_flyout/alerts_flyout.stories.tsx | 1 - .../custom_threshold/lib/metric_query.test.ts | 6 +-- .../public/utils/create_initialized_object.ts | 2 +- .../server/lib/get_fallback_urls.ts | 6 ++- .../grouped_slos/hooks/use_group_name.ts | 2 +- .../osquery/public/agents/agents_table.tsx | 3 +- .../server/lib/notebook_catalog.ts | 2 +- .../services/role_template_type.ts | 6 ++- .../users/edit_user/edit_user_page.tsx | 4 -- .../management/users/edit_user/user_form.tsx | 2 - .../authentication/can_redirect_request.ts | 4 +- .../authorization/disable_ui_capabilities.ts | 6 +-- .../routes/feature_check/feature_check.ts | 2 +- .../assistant/comment_actions/index.tsx | 3 -- .../body/renderers/suricata/suricata_links.ts | 4 +- .../scripts/run_cypress/utils.ts | 1 + .../logic/rule_actions/legacy_migrations.ts | 2 +- .../utils/filter_field_entries.ts | 3 +- .../capabilities/capabilities_switcher.ts | 8 ++-- .../migrations/space_migrations.ts | 2 +- .../server/spaces_client/spaces_client.ts | 8 ++-- .../es_query/lib/fetch_esql_query.ts | 34 ++++++++++++- .../geo_containment/lib/transform_results.ts | 2 +- .../common/slack_api/schema.ts | 2 +- .../connector_types/jira/jira_params.tsx | 8 ++-- .../connector_types/slack_api/slack_api.tsx | 2 +- .../transform/common/utils/es_utils.ts | 3 +- .../public/app/hooks/use_delete_transform.tsx | 2 +- .../app/hooks/use_reauthorize_transform.tsx | 2 +- .../public/app/hooks/use_reset_transform.tsx | 2 +- .../app/hooks/use_schedule_now_transform.tsx | 2 +- .../public/app/hooks/use_start_transform.tsx | 2 +- .../public/app/hooks/use_stop_transform.tsx | 2 +- .../app/hooks/use_transform_config_data.ts | 2 +- .../advanced_runtime_mappings_settings.tsx | 6 +-- .../filter_agg/components/filter_agg_form.tsx | 2 +- .../sections/rule_form/rule_conditions.tsx | 2 +- .../upgrade_assistant/public/plugin.ts | 2 +- .../watcher/public/legacy/time_buckets.js | 4 +- .../server/models/settings/settings.js | 4 +- .../apps/group2/ml_anomaly_detection.ts | 12 ++--- .../management/index_management/settings.ts | 2 +- .../apis/management/index_management/stats.ts | 2 +- .../apis/ml/job_validation/validate.ts | 2 +- .../apis/ml/modules/recognize_module.ts | 2 +- .../apis/ml/modules/setup_module.ts | 6 +-- .../apis/agents/delete.ts | 2 +- .../fleet_api_integration/apis/test_users.ts | 2 +- .../apps/maps/group2/es_geo_grid_source.js | 4 +- .../test/functional/apps/maps/group4/joins.js | 4 +- .../ml/anomaly_detection_jobs/advanced_job.ts | 48 +++++++++---------- .../convert_jobs_to_advanced_job.ts | 16 +++---- .../anomaly_detection_jobs/date_nanos_job.ts | 22 ++++----- .../page_objects/infra_logs_page.ts | 2 +- .../functional/page_objects/uptime_page.ts | 2 +- .../discover_timeline_state_integration.cy.ts | 4 +- .../common/index_management/settings.ts | 2 +- 230 files changed, 458 insertions(+), 437 deletions(-) diff --git a/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx index ef73c179b8f8ee..eea33aff7bf5a9 100644 --- a/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/search/search_react_embeddable.tsx @@ -111,10 +111,10 @@ export const getSearchEmbeddableFactory = (services: Services) => { ) .subscribe((next) => { dataLoading$.next(false); - if (next && next.hasOwnProperty('count') && next.count !== undefined) { + if (next && Object.hasOwn(next, 'count') && next.count !== undefined) { count$.next(next.count); } - if (next && next.hasOwnProperty('error')) { + if (next && Object.hasOwn(next, 'error')) { blockingError$.next(next.error); } }); diff --git a/examples/ui_actions_explorer/public/trigger_context_example.tsx b/examples/ui_actions_explorer/public/trigger_context_example.tsx index 3e94cd253a215f..5769c4c6c02b9a 100644 --- a/examples/ui_actions_explorer/public/trigger_context_example.tsx +++ b/examples/ui_actions_explorer/public/trigger_context_example.tsx @@ -108,7 +108,7 @@ export function TriggerContextExample({ uiActionsApi }: Props) { const renderCellValue = useMemo(() => { return ({ rowIndex, columnId }: EuiDataGridCellValueElementProps) => { - return rows.hasOwnProperty(rowIndex) ? rows[rowIndex][columnId] : null; + return Object.hasOwn(rows, rowIndex) ? rows[rowIndex][columnId] : null; }; }, [rows]); diff --git a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/client_config.test.ts b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/client_config.test.ts index de0702b62aa66e..078287a9cb1518 100644 --- a/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/client_config.test.ts +++ b/packages/core/elasticsearch/core-elasticsearch-client-server-internal/src/client_config.test.ts @@ -80,7 +80,7 @@ describe('parseClientOptions', () => { it('`customHeaders` take precedence to default kibana headers', () => { const customHeader: Record = {}; for (const header in defaultHeaders) { - if (defaultHeaders.hasOwnProperty(header)) { + if (Object.hasOwn(defaultHeaders, header)) { customHeader[header] = 'foo'; } } diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_active_mappings.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_active_mappings.ts index 5525814c072389..5fabc74d118d74 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_active_mappings.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_active_mappings.ts @@ -106,7 +106,7 @@ function validateAndMerge( if (k.startsWith('_')) { throw new Error(`Invalid mapping "${k}". Mappings cannot start with _.`); } - if (dest.hasOwnProperty(k)) { + if (Object.hasOwn(dest, k)) { throw new Error(`Cannot redefine core mapping "${k}".`); } }); diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_index_map.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_index_map.ts index 225b3bb422925a..125eec08e52b35 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_index_map.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_index_map.ts @@ -32,7 +32,7 @@ export function createIndexMap({ kibanaIndexName, registry, indexMap }: CreateIn const script = typeDef?.convertToAliasScript; // Defaults to kibanaIndexName if indexPattern isn't defined const indexPattern = typeDef?.indexPattern || kibanaIndexName; - if (!map.hasOwnProperty(indexPattern as string)) { + if (!Object.hasOwn(map, indexPattern as string)) { map[indexPattern] = { typeMappings: {} }; } map[indexPattern].typeMappings[type] = indexMap[type]; diff --git a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_types_mappings.ts b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_types_mappings.ts index 18aa689149c240..d5845c278273ed 100644 --- a/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_types_mappings.ts +++ b/packages/core/saved-objects/core-saved-objects-migration-server-internal/src/core/build_types_mappings.ts @@ -16,7 +16,7 @@ export const buildTypesMappings = ( types: SavedObjectsType[] ): SavedObjectsTypeMappingDefinitions => { return types.reduce((acc, { name: type, mappings }) => { - const duplicate = acc.hasOwnProperty(type); + const duplicate = Object.hasOwn(acc, type); if (duplicate) { throw new Error(`Type ${type} is already defined.`); } diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/base_ui_settings_client.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/base_ui_settings_client.ts index 04da5a75788ec3..b82b1343b4688b 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/base_ui_settings_client.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/base_ui_settings_client.ts @@ -66,7 +66,7 @@ export abstract class BaseUiSettingsClient implements IUiSettingsClient { } isOverridden(key: string) { - return this.overrides.hasOwnProperty(key); + return Object.hasOwn(this.overrides, key); } isSensitive(key: string): boolean { diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts index c923feaf9da92a..e7b0db9e2394aa 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/clients/ui_settings_client_common.ts @@ -93,7 +93,7 @@ export abstract class UiSettingsClientCommon extends BaseUiSettingsClient { } private assertUpdateAllowed(key: string) { - if (this.overrides.hasOwnProperty(key)) { + if (Object.hasOwn(this.overrides, key)) { throw new CannotOverrideError(`Unable to update "${key}" because it is overridden`); } } @@ -113,7 +113,7 @@ export abstract class UiSettingsClientCommon extends BaseUiSettingsClient { // validate value read from saved objects as it can be changed via SO API const filteredValues: UserProvided = {}; for (const [key, userValue] of Object.entries(values)) { - if (userValue === null || this.overrides.hasOwnProperty(key)) continue; + if (userValue === null || Object.hasOwn(this.overrides, key)) continue; try { this.validateKey(key, userValue); filteredValues[key] = { diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/ui_settings_service.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/ui_settings_service.ts index 02dfd1562c3b32..cfd12e24328354 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/ui_settings_service.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/ui_settings_service.ts @@ -94,7 +94,7 @@ export class UiSettingsService registerInternalRoutes(router); // Register public routes by default unless the publicApiEnabled config setting is set to false - if (!config.hasOwnProperty('publicApiEnabled') || config.publicApiEnabled === true) { + if (!Object.hasOwn(config, 'publicApiEnabled') || config.publicApiEnabled === true) { registerRoutes(router); } diff --git a/packages/kbn-ace/src/ace/modes/x_json/worker/x_json.ace.worker.js b/packages/kbn-ace/src/ace/modes/x_json/worker/x_json.ace.worker.js index c27e96624a8b77..c3720e55466288 100644 --- a/packages/kbn-ace/src/ace/modes/x_json/worker/x_json.ace.worker.js +++ b/packages/kbn-ace/src/ace/modes/x_json/worker/x_json.ace.worker.js @@ -472,9 +472,9 @@ }, this.createAnchor = function(row, column) { return new Anchor(this, row, column) }, this.$split = 0 === "aaa".split(/a/).length ? function(text) { - return text.replace(/\r\n|\r/g, "\n").split("\n") + return text.replace(/\r\n|\r/g, "\n").split("\n"); } : function(text) { - return text.split(/\r\n|\r|\n/) + return text.split(/\r\n|\r|\n/); }, this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n", this._signal("changeNewLineMode") @@ -711,9 +711,9 @@ }, exports.arrayRemove = function(array, value) { for (var i = 0; array.length >= i; i++) value === array[i] && array.splice(i, 1) }, exports.escapeRegExp = function(str) { - return str.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1") + return str.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1"); }, exports.escapeHTML = function(str) { - return str.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/(obj: T, x: any): x is keyof T => obj.hasOwnProperty(x); + const has = (obj: T, x: any): x is keyof T => Object.hasOwn(obj, x); log.setWriters([ { diff --git a/packages/kbn-data-service/src/search/tabify/tabify_docs.ts b/packages/kbn-data-service/src/search/tabify/tabify_docs.ts index ceb60b7492d92b..5f8912c32ae20d 100644 --- a/packages/kbn-data-service/src/search/tabify/tabify_docs.ts +++ b/packages/kbn-data-service/src/search/tabify/tabify_docs.ts @@ -48,7 +48,7 @@ function flattenAccum( params?: TabifyDocsOptions ) { for (const k in obj) { - if (!obj.hasOwnProperty(k)) { + if (!Object.hasOwn(obj, k)) { continue; } const val = obj[k]; @@ -114,7 +114,7 @@ export function flattenHit(hit: Hit, indexPattern?: DataView, params?: TabifyDoc // merged, since we would otherwise duplicate values, since ignore_field_values and _source // contain the same values. for (const fieldName in hit.ignored_field_values) { - if (!hit.ignored_field_values.hasOwnProperty(fieldName)) { + if (!Object.hasOwn(hit.ignored_field_values, fieldName)) { continue; } const fieldValue = hit.ignored_field_values[fieldName]; diff --git a/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts b/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts index 1bfbc80f52a19f..f6b602b734bd00 100644 --- a/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts +++ b/packages/kbn-es-archiver/src/lib/indices/__mocks__/stubs.ts @@ -121,7 +121,7 @@ export const createStubClient = ( return { body: { ok: true } }; }), create: sinon.spy(async ({ index }) => { - if (existingIndices.includes(index) || aliases.hasOwnProperty(index)) { + if (existingIndices.includes(index) || Object.hasOwn(aliases, index)) { throw createEsClientError('resource_already_exists_exception'); } else { existingIndices.push(index); diff --git a/packages/kbn-eslint-config/.eslintrc.js b/packages/kbn-eslint-config/.eslintrc.js index 1391c842b235a7..028309aa057740 100644 --- a/packages/kbn-eslint-config/.eslintrc.js +++ b/packages/kbn-eslint-config/.eslintrc.js @@ -312,5 +312,9 @@ module.exports = { '@kbn/imports/uniform_imports': 'error', '@kbn/imports/no_unused_imports': 'error', '@kbn/imports/no_boundary_crossing': 'error', + + 'no-new-func': 'error', + 'no-implied-eval': 'error', + 'no-prototype-builtins': 'error', }, }; diff --git a/packages/kbn-expect/expect.js b/packages/kbn-expect/expect.js index 8a7d1802a7e0e5..1a48d75a4615d9 100644 --- a/packages/kbn-expect/expect.js +++ b/packages/kbn-expect/expect.js @@ -45,7 +45,7 @@ function Assertion (obj, flag, parent) { this.flags[flag] = true; for (var i in parent.flags) { - if (parent.flags.hasOwnProperty(i)) { + if (Object.hasOwn(parent.flags, i)) { this.flags[i] = true; } } @@ -70,7 +70,7 @@ function Assertion (obj, flag, parent) { }; for (var fn in Assertion.prototype) { - if (Assertion.prototype.hasOwnProperty(fn) && fn != name) { + if (Object.hasOwn(Assertion.prototype, fn) && fn != name) { if (typeof this[name] === 'function' && fn === 'length') { continue; } diff --git a/packages/kbn-flot-charts/lib/jquery_flot.js b/packages/kbn-flot-charts/lib/jquery_flot.js index 5252356279e51c..3b13b317c616c5 100644 --- a/packages/kbn-flot-charts/lib/jquery_flot.js +++ b/packages/kbn-flot-charts/lib/jquery_flot.js @@ -2750,7 +2750,7 @@ Licensed under the MIT license. var ascending = options.legend.sorted != "descending"; entries.sort(function(a, b) { return a.label == b.label ? 0 : ( - (a.label < b.label) != ascending ? 1 : -1 // Logical XOR + ((a.label < b.label) != ascending ? 1 : -1) // Logical XOR ); }); } diff --git a/packages/kbn-handlebars/src/spec/index.regressions.test.ts b/packages/kbn-handlebars/src/spec/index.regressions.test.ts index fc2065fe7585db..5ff37a3dd9849e 100644 --- a/packages/kbn-handlebars/src/spec/index.regressions.test.ts +++ b/packages/kbn-handlebars/src/spec/index.regressions.test.ts @@ -231,7 +231,7 @@ describe('Regressions', () => { // It's valid to execute a block against an undefined context, but // helpers can not do so, so we expect to have an empty object here; for (const name in this) { - if (Object.prototype.hasOwnProperty.call(this, name)) { + if (Object.hasOwn(this, name)) { return 'found'; } } diff --git a/packages/kbn-handlebars/src/utils.ts b/packages/kbn-handlebars/src/utils.ts index b44f4a9791f025..d33bafcd0ef5e3 100644 --- a/packages/kbn-handlebars/src/utils.ts +++ b/packages/kbn-handlebars/src/utils.ts @@ -63,6 +63,7 @@ export function allowUnsafeEval() { try { // Do not remove the `kbnUnsafeEvalTest` parameter. // It is used for filtering out expected CSP failures, and must be the first piece of content in this function. + // eslint-disable-next-line no-new-func new Function('kbnUnsafeEvalTest', 'return true;'); return true; } catch (e) { diff --git a/packages/kbn-handlebars/src/visitor.ts b/packages/kbn-handlebars/src/visitor.ts index 16dc151df86401..2195820bf46de6 100644 --- a/packages/kbn-handlebars/src/visitor.ts +++ b/packages/kbn-handlebars/src/visitor.ts @@ -112,7 +112,7 @@ export class ElasticHandlebarsVisitor extends Handlebars.Visitor { if (result == null) { return result; } - if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + if (Object.hasOwn(parent, propertyName)) { return result; } diff --git a/packages/kbn-managed-vscode-config/src/update_vscode_config.ts b/packages/kbn-managed-vscode-config/src/update_vscode_config.ts index d327ab98ae82cb..2e3a3a5d255633 100644 --- a/packages/kbn-managed-vscode-config/src/update_vscode_config.ts +++ b/packages/kbn-managed-vscode-config/src/update_vscode_config.ts @@ -141,7 +141,7 @@ const mergeManagedProperties = ( if ( isBasicObjectProp(prop) && isManaged(prop) && - !Object.prototype.hasOwnProperty.call(managedValue, prop.key.value) + !Object.hasOwn(managedValue, prop.key.value) ) { remove(properties, prop); } diff --git a/packages/kbn-management/settings/components/field_input/input/select_input.tsx b/packages/kbn-management/settings/components/field_input/input/select_input.tsx index 9421d4d3e83b17..a02dbf61bd16f9 100644 --- a/packages/kbn-management/settings/components/field_input/input/select_input.tsx +++ b/packages/kbn-management/settings/components/field_input/input/select_input.tsx @@ -42,7 +42,7 @@ export const SelectInput = ({ const options = useMemo( () => optionsProp?.map((option) => ({ - text: optionLabels.hasOwnProperty(option) ? optionLabels[option] : option, + text: Object.hasOwn(optionLabels, option) ? optionLabels[option] : option, value: option, })), [optionsProp, optionLabels] diff --git a/packages/kbn-management/settings/components/form/use_save.ts b/packages/kbn-management/settings/components/form/use_save.ts index 53af23e476d744..5268e6fcb9a5cd 100644 --- a/packages/kbn-management/settings/components/form/use_save.ts +++ b/packages/kbn-management/settings/components/form/use_save.ts @@ -39,7 +39,7 @@ export const useSave = (params: UseSaveParameters) => { await saveChanges(changes, params.scope); params.clearChanges(); const requiresReload = params.fields.some( - (setting) => changes.hasOwnProperty(setting.id) && setting.requiresPageReload + (setting) => Object.hasOwn(changes, setting.id) && setting.requiresPageReload ); if (requiresReload) { showReloadPagePrompt(); diff --git a/packages/kbn-mock-idp-plugin/public/role_switcher.tsx b/packages/kbn-mock-idp-plugin/public/role_switcher.tsx index 7ef4e435e4e658..63bf43f4aa52e9 100644 --- a/packages/kbn-mock-idp-plugin/public/role_switcher.tsx +++ b/packages/kbn-mock-idp-plugin/public/role_switcher.tsx @@ -145,7 +145,7 @@ const createForm = (url: string, fields: Record) => { form.setAttribute('action', url); for (const key in fields) { - if (!fields.hasOwnProperty(key)) { + if (!Object.hasOwn(fields, key)) { continue; } const input = document.createElement('input'); diff --git a/packages/kbn-safer-lodash-set/README.md b/packages/kbn-safer-lodash-set/README.md index 823b1acff3b013..110a06421e45ef 100644 --- a/packages/kbn-safer-lodash-set/README.md +++ b/packages/kbn-safer-lodash-set/README.md @@ -78,7 +78,7 @@ set(child, 'foo', 3); // object and the `parent` object has not been modified: console.log(child.foo); // 3 console.log(parent.foo); // 1 -console.log(Object.prototype.hasOwnProperty.call(child, 'foo')); // true +console.log(Object.hasOwn(child, 'foo')); // true ``` ### The `path` must not access function prototypes diff --git a/packages/kbn-safer-lodash-set/test/fp_patch_test.js b/packages/kbn-safer-lodash-set/test/fp_patch_test.js index a7a900bd7601f8..abc2ce348f5a75 100644 --- a/packages/kbn-safer-lodash-set/test/fp_patch_test.js +++ b/packages/kbn-safer-lodash-set/test/fp_patch_test.js @@ -190,7 +190,7 @@ setFunctions.forEach(([testPermutations, set, testName]) => { t.notStrictEqual(arr, result); t.ok(Array.isArray(result)); Object.keys(expected).forEach((key) => { - t.ok(Object.prototype.hasOwnProperty.call(result, key)); + t.ok(Object.hasOwn(result, key)); t.deepEqual(result[key], expected[key]); }); }); diff --git a/packages/kbn-safer-lodash-set/test/patch_test.js b/packages/kbn-safer-lodash-set/test/patch_test.js index f83cbe1e40b85f..cbd2f879dd6095 100644 --- a/packages/kbn-safer-lodash-set/test/patch_test.js +++ b/packages/kbn-safer-lodash-set/test/patch_test.js @@ -115,7 +115,7 @@ setAndSetWithFunctions.forEach(([set, testName]) => { const arr = []; set(arr, path, 'foo'); Object.keys(expected).forEach((key) => { - t.ok(Object.prototype.hasOwnProperty.call(arr, key)); + t.ok(Object.hasOwn(arr, key)); t.deepEqual(arr[key], expected[key]); }); t.end(); diff --git a/packages/kbn-server-http-tools/src/default_validation_error_handler.ts b/packages/kbn-server-http-tools/src/default_validation_error_handler.ts index d2f4e993f3e4b2..9ee8bac238c44a 100644 --- a/packages/kbn-server-http-tools/src/default_validation_error_handler.ts +++ b/packages/kbn-server-http-tools/src/default_validation_error_handler.ts @@ -43,7 +43,7 @@ export function defaultValidationErrorHandler( // // The Hapi code we're 'overwriting' can be found here: // https://github.com/hapijs/hapi/blob/master/lib/validation.js#L102 - if (err && err.name === 'ValidationError' && err.hasOwnProperty('output')) { + if (err && err.name === 'ValidationError' && Object.hasOwn(err, 'output')) { const validationError: HapiValidationError = err as HapiValidationError; const validationKeys: string[] = []; diff --git a/packages/kbn-std/src/ensure_deep_object.ts b/packages/kbn-std/src/ensure_deep_object.ts index 42550bd09436f0..b815c16ac5c6ee 100644 --- a/packages/kbn-std/src/ensure_deep_object.ts +++ b/packages/kbn-std/src/ensure_deep_object.ts @@ -49,7 +49,7 @@ function walk(obj: any, keys: string[], value: any, path: string[]) { return; } - if (!obj.hasOwnProperty(key)) { + if (!Object.hasOwn(obj, key)) { obj[key] = {}; } diff --git a/packages/kbn-std/src/ensure_no_unsafe_properties.ts b/packages/kbn-std/src/ensure_no_unsafe_properties.ts index b053a40d62530b..cff9946d761fad 100644 --- a/packages/kbn-std/src/ensure_no_unsafe_properties.ts +++ b/packages/kbn-std/src/ensure_no_unsafe_properties.ts @@ -11,12 +11,6 @@ interface StackItem { previousKey: string | null; } -// we have to do Object.prototype.hasOwnProperty because when you create an object using -// Object.create(null), and I assume other methods, you get an object without a prototype, -// so you can't use current.hasOwnProperty -const hasOwnProperty = (obj: any, property: string) => - Object.prototype.hasOwnProperty.call(obj, property); - const isObject = (obj: any) => typeof obj === 'object' && obj !== null; // we're using a stack instead of recursion so we aren't limited by the call stack @@ -40,11 +34,11 @@ export function ensureNoUnsafeProperties(obj: any) { continue; } - if (hasOwnProperty(value, '__proto__')) { + if (Object.hasOwn(value, '__proto__')) { throw new Error(`'__proto__' is an invalid key`); } - if (hasOwnProperty(value, 'prototype') && previousKey === 'constructor') { + if (Object.hasOwn(value, 'prototype') && previousKey === 'constructor') { throw new Error(`'constructor.prototype' is an invalid key`); } diff --git a/packages/kbn-test/src/functional_test_runner/lib/providers/async_instance.ts b/packages/kbn-test/src/functional_test_runner/lib/providers/async_instance.ts index 1f0fb31ccd41dd..c870a1538ec294 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/providers/async_instance.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/providers/async_instance.ts @@ -73,7 +73,7 @@ export const createAsyncInstance = ( }, get(_, prop, receiver) { - if (loadingTarget.hasOwnProperty(prop)) { + if (Object.hasOwn(loadingTarget, prop)) { return Reflect.get(loadingTarget as any, prop, receiver); } @@ -84,7 +84,7 @@ export const createAsyncInstance = ( }, getOwnPropertyDescriptor(_, prop) { - if (loadingTarget.hasOwnProperty(prop)) { + if (Object.hasOwn(loadingTarget, prop)) { return Reflect.getOwnPropertyDescriptor(loadingTarget, prop); } @@ -100,7 +100,7 @@ export const createAsyncInstance = ( }, has(_, prop) { - if (!loadingTarget.hasOwnProperty(prop)) { + if (!Object.hasOwn(loadingTarget, prop)) { return Reflect.has(loadingTarget, prop); } diff --git a/packages/kbn-test/src/functional_test_runner/lib/providers/verbose_instance.ts b/packages/kbn-test/src/functional_test_runner/lib/providers/verbose_instance.ts index ca4109961b51cc..d4ed0b7099468e 100644 --- a/packages/kbn-test/src/functional_test_runner/lib/providers/verbose_instance.ts +++ b/packages/kbn-test/src/functional_test_runner/lib/providers/verbose_instance.ts @@ -59,7 +59,7 @@ export function createVerboseInstance( }; } - if (result.hasOwnProperty('thrown')) { + if (Object.hasOwn(result, 'thrown')) { log.indent(-2); throw result.thrown; } diff --git a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js index 0867862b2d4ca4..80fc5185dc115d 100644 --- a/packages/kbn-test/src/jest/setup/polyfills.jsdom.js +++ b/packages/kbn-test/src/jest/setup/polyfills.jsdom.js @@ -11,12 +11,12 @@ Object.defineProperty(window, 'MutationObserver', { value: MutationObserver }); require('whatwg-fetch'); -if (!global.URL.hasOwnProperty('createObjectURL')) { +if (!Object.hasOwn(global.URL, 'createObjectURL')) { Object.defineProperty(global.URL, 'createObjectURL', { value: () => '' }); } // https://github.com/jsdom/jsdom/issues/2524 -if (!global.hasOwnProperty('TextEncoder')) { +if (!Object.hasOwn(global, 'TextEncoder')) { const customTextEncoding = require('@kayahr/text-encoding'); global.TextEncoder = customTextEncoding.TextEncoder; global.TextDecoder = customTextEncoding.TextDecoder; @@ -29,11 +29,11 @@ if (!global.hasOwnProperty('TextEncoder')) { // https://github.com/jsdom/jsdom/issues/2555 global.Blob = require('blob-polyfill').Blob; -if (!global.hasOwnProperty('ResizeObserver')) { +if (!Object.hasOwn(global, 'ResizeObserver')) { global.ResizeObserver = require('resize-observer-polyfill'); } -if (!global.hasOwnProperty('Worker')) { +if (!Object.hasOwn(global, 'Worker')) { class Worker { constructor(stringUrl) { this.url = stringUrl; @@ -49,7 +49,7 @@ if (!global.hasOwnProperty('Worker')) { // Mocking matchMedia to resolve TypeError: window.matchMedia is not a function // For more info, see https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom - if (!global.hasOwnProperty('matchMedia')) { + if (!Object.hasOwn(global, 'matchMedia')) { Object.defineProperty(global, 'matchMedia', { writable: true, // eslint-disable-next-line no-undef diff --git a/packages/kbn-test/src/kbn_client/kbn_client_ui_settings.ts b/packages/kbn-test/src/kbn_client/kbn_client_ui_settings.ts index 599184b30a4612..a5a1102a0d44e7 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_ui_settings.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_ui_settings.ts @@ -69,7 +69,7 @@ export class KbnClientUiSettings { }; for (const [name, { isOverridden }] of Object.entries(await this.getAll())) { - if (!isOverridden && !changes.hasOwnProperty(name)) { + if (!isOverridden && !Object.hasOwn(changes, name)) { changes[name] = null; } } diff --git a/packages/kbn-tooling-log/src/tooling_log_text_writer.ts b/packages/kbn-tooling-log/src/tooling_log_text_writer.ts index 4fe33241cf77e0..063edd75a14cb7 100644 --- a/packages/kbn-tooling-log/src/tooling_log_text_writer.ts +++ b/packages/kbn-tooling-log/src/tooling_log_text_writer.ts @@ -25,7 +25,7 @@ const MSG_PREFIXES = { error: `${red('ERROR')} `, }; -const has = (obj: T, key: any): key is keyof T => obj.hasOwnProperty(key); +const has = (obj: T, key: any): key is keyof T => Object.hasOwn(obj, key); export interface ToolingLogTextWriterConfig { /** diff --git a/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts index ac03aff1387dbe..878bc240971515 100644 --- a/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts +++ b/packages/kbn-unified-field-list/src/services/field_examples_calculator/field_examples_calculator.ts @@ -97,7 +97,7 @@ export function groupValues( return; } - if (groups.hasOwnProperty(value)) { + if (Object.hasOwn(groups, value)) { groups[value].count++; } else { groups[value] = { diff --git a/packages/presentation/presentation_publishing/interfaces/has_execution_context.ts b/packages/presentation/presentation_publishing/interfaces/has_execution_context.ts index 8aa4d633e1a0ee..aa002114b1b68e 100644 --- a/packages/presentation/presentation_publishing/interfaces/has_execution_context.ts +++ b/packages/presentation/presentation_publishing/interfaces/has_execution_context.ts @@ -16,6 +16,6 @@ export const apiHasExecutionContext = ( unknownApi: null | unknown ): unknownApi is HasExecutionContext => { return Boolean( - unknownApi && typeof unknownApi === 'object' && unknownApi.hasOwnProperty('executionContext') + unknownApi && typeof unknownApi === 'object' && Object.hasOwn(unknownApi, 'executionContext') ); }; diff --git a/packages/shared-ux/chrome/navigation/src/utils.ts b/packages/shared-ux/chrome/navigation/src/utils.ts index f63ff518a18d41..e8ab1cb3eb689a 100644 --- a/packages/shared-ux/chrome/navigation/src/utils.ts +++ b/packages/shared-ux/chrome/navigation/src/utils.ts @@ -44,4 +44,4 @@ export const isAccordionNode = ( node: Pick ) => node.renderAs === 'accordion' || - ['defaultIsCollapsed', 'isCollapsible'].some((prop) => node.hasOwnProperty(prop)); + ['defaultIsCollapsed', 'isCollapsible'].some((prop) => Object.hasOwn(node, prop)); diff --git a/src/dev/storybook/run_storybook_cli.ts b/src/dev/storybook/run_storybook_cli.ts index 7a6ea7f34d825a..587dab475145fc 100644 --- a/src/dev/storybook/run_storybook_cli.ts +++ b/src/dev/storybook/run_storybook_cli.ts @@ -32,7 +32,7 @@ run( throw createFlagError('Missing alias'); } - if (!storybookAliases.hasOwnProperty(alias)) { + if (!Object.hasOwn(storybookAliases, alias)) { throw createFlagError(`Unknown alias [${alias}]`); } diff --git a/src/plugins/chart_expressions/expression_metric/common/expression_functions/metric_trendline_function.ts b/src/plugins/chart_expressions/expression_metric/common/expression_functions/metric_trendline_function.ts index 4d980b85cf0590..12bcab058d5d48 100644 --- a/src/plugins/chart_expressions/expression_metric/common/expression_functions/metric_trendline_function.ts +++ b/src/plugins/chart_expressions/expression_metric/common/expression_functions/metric_trendline_function.ts @@ -126,7 +126,7 @@ export const metricTrendlineFunction = (): TrendlineExpressionFunctionDefinition }); for (const breakdownTerm in rowsByBreakdown) { - if (!rowsByBreakdown.hasOwnProperty(breakdownTerm)) continue; + if (!Object.hasOwn(rowsByBreakdown, breakdownTerm)) continue; trends[breakdownTerm] = rowsByBreakdown[breakdownTerm].map((row) => ({ x: row[timeColId] !== null ? row[timeColId] : NaN, y: row[metricColId] !== null ? row[metricColId] : NaN, diff --git a/src/plugins/chart_expressions/expression_partition_vis/public/utils/layers/get_color.ts b/src/plugins/chart_expressions/expression_partition_vis/public/utils/layers/get_color.ts index b7cd7349880b14..7d4ff89a027ccb 100644 --- a/src/plugins/chart_expressions/expression_partition_vis/public/utils/layers/get_color.ts +++ b/src/plugins/chart_expressions/expression_partition_vis/public/utils/layers/get_color.ts @@ -79,13 +79,13 @@ const getDistinctColor = ( formattedCategoricalKey: string ) => { // TODO move away from Record to a Map to avoid issues with reserved JS keywords - if (overwriteColors.hasOwnProperty(categoricalKey)) { + if (Object.hasOwn(overwriteColors, categoricalKey)) { return overwriteColors[categoricalKey]; } // this is for supporting old visualizations (created by vislib plugin) // it seems that there for some aggs, the uiState saved from vislib is // different from how es-charts handles it - if (overwriteColors.hasOwnProperty(formattedCategoricalKey)) { + if (Object.hasOwn(overwriteColors, formattedCategoricalKey)) { return overwriteColors[formattedCategoricalKey]; } @@ -181,7 +181,7 @@ const overrideColors = ( ) => { let overwriteColor; - if (overwriteColors.hasOwnProperty(name)) { + if (Object.hasOwn(overwriteColors, name)) { overwriteColor = overwriteColors[name]; } diff --git a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts index 5a64dd98fe1605..37c97c08bb9981 100644 --- a/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts +++ b/src/plugins/console/public/application/containers/editor/legacy/console_editor/mapbox_vector_tile/convert_mapbox_vector_tile_to_json.ts @@ -16,7 +16,7 @@ export function convertMapboxVectorTileToJson(response: VectorTile) { const output: MapboxVectorTileJson = {}; for (const property in data) { - if (data.hasOwnProperty(property)) { + if (Object.hasOwn(data, property)) { const propertyObject: VectorTileLayer = data[property]; const featuresArray = []; diff --git a/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js index e8953152a59327..307d7403125fab 100644 --- a/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js +++ b/src/plugins/console/public/application/models/legacy_core_editor/mode/worker/worker.js @@ -53,10 +53,7 @@ function init(window) { let alias = paths[testPath]; if ('string' === typeof alias) return alias + tail; if (alias) - {return ( - alias.location.replace(/\/*$/, '/') + - (tail || alias.main || alias.name) - );} + {return (alias.location.replace(/\/*$/, '/') + (tail || alias.main || alias.name));} if (alias === !1) return ''; let i = testPath.lastIndexOf('/'); if (-1 === i) break; diff --git a/src/plugins/custom_integrations/server/custom_integration_registry.ts b/src/plugins/custom_integrations/server/custom_integration_registry.ts index e594a2ed514fd0..3bf0b4a75f1a65 100644 --- a/src/plugins/custom_integrations/server/custom_integration_registry.ts +++ b/src/plugins/custom_integrations/server/custom_integration_registry.ts @@ -45,7 +45,7 @@ export class CustomIntegrationRegistry { const allowedCategories: IntegrationCategory[] = (customIntegration.categories ?? []).filter( (category) => { - return INTEGRATION_CATEGORY_DISPLAY.hasOwnProperty(category); + return Object.hasOwn(INTEGRATION_CATEGORY_DISPLAY, category); } ) as IntegrationCategory[]; diff --git a/src/plugins/dashboard/common/lib/dashboard_panel_converters.test.ts b/src/plugins/dashboard/common/lib/dashboard_panel_converters.test.ts index b1865571e42b9a..1e5f24f36691fd 100644 --- a/src/plugins/dashboard/common/lib/dashboard_panel_converters.test.ts +++ b/src/plugins/dashboard/common/lib/dashboard_panel_converters.test.ts @@ -69,7 +69,7 @@ test('convertSavedDashboardPanelToPanelState does not include undefined id', () }; const converted = convertSavedDashboardPanelToPanelState(savedDashboardPanel); - expect(converted.hasOwnProperty('savedObjectId')).toBe(false); + expect(Object.hasOwn(converted, 'savedObjectId')).toBe(false); }); test('convertPanelStateToSavedDashboardPanel', () => { @@ -123,7 +123,7 @@ test('convertPanelStateToSavedDashboardPanel will not add an undefined id when n }; const converted = convertPanelStateToSavedDashboardPanel(dashboardPanel); - expect(converted.hasOwnProperty('id')).toBe(false); + expect(Object.hasOwn(converted, 'id')).toBe(false); }); test('convertPanelStateToSavedDashboardPanel will not leave title as part of embeddable config', () => { @@ -143,7 +143,7 @@ test('convertPanelStateToSavedDashboardPanel will not leave title as part of emb }; const converted = convertPanelStateToSavedDashboardPanel(dashboardPanel); - expect(converted.embeddableConfig.hasOwnProperty('title')).toBe(false); + expect(Object.hasOwn(converted.embeddableConfig, 'title')).toBe(false); expect(converted.title).toBe('title'); }); diff --git a/src/plugins/data/common/search/search_source/search_source.test.ts b/src/plugins/data/common/search/search_source/search_source.test.ts index ef8341c3d2c5d8..703e66ca7d657c 100644 --- a/src/plugins/data/common/search/search_source/search_source.test.ts +++ b/src/plugins/data/common/search/search_source/search_source.test.ts @@ -841,7 +841,7 @@ describe('SearchSource', () => { searchSource.setField('fields', ['*']); const request = searchSource.getSearchRequestBody(); - expect(request.hasOwnProperty('docvalue_fields')).toBe(false); + expect(Object.hasOwn(request, 'docvalue_fields')).toBe(false); expect(request.fields).toEqual([ { field: 'foo-bar' }, { field: 'field1' }, diff --git a/src/plugins/data/common/search/search_source/search_source.ts b/src/plugins/data/common/search/search_source/search_source.ts index c0dc5598e9067c..3c91160a016364 100644 --- a/src/plugins/data/common/search/search_source/search_source.ts +++ b/src/plugins/data/common/search/search_source/search_source.ts @@ -808,7 +808,7 @@ export class SearchSource { // set defaults const _source = - index && !body.hasOwnProperty('_source') ? dataView?.getSourceFiltering() : body._source; + index && !Object.hasOwn(body, '_source') ? dataView?.getSourceFiltering() : body._source; // get filter if data view specified, otherwise null filter const filter = this.getFieldFilter({ bodySourceExcludes: _source?.excludes, metaFields }); @@ -962,7 +962,7 @@ export class SearchSource { private getBuiltEsQuery({ index, query = [], filters = [], getConfig, sort }: SearchRequest) { // If sorting by _score, build queries in the "must" clause instead of "filter" clause to enable scoring const filtersInMustClause = (sort ?? []).some((srt: EsQuerySortValue[]) => - srt.hasOwnProperty('_score') + Object.hasOwn(srt, '_score') ); const esQueryConfigs = { ...getEsQueryConfig({ get: getConfig }), diff --git a/src/plugins/data/common/search/tabify/response_writer.ts b/src/plugins/data/common/search/tabify/response_writer.ts index bbaab641e82f4f..57d3ed7773f4b9 100644 --- a/src/plugins/data/common/search/tabify/response_writer.ts +++ b/src/plugins/data/common/search/tabify/response_writer.ts @@ -63,7 +63,7 @@ export class TabbedAggResponseWriter { let isPartialRow = false; for (let i = 0; i < this.columns.length; i++) { const column = this.columns[i]; - if (!rowBuffer.hasOwnProperty(column.id)) { + if (!Object.hasOwn(rowBuffer, column.id)) { isPartialRow = true; break; } diff --git a/src/plugins/data/public/utils/shallow_equal.ts b/src/plugins/data/public/utils/shallow_equal.ts index e0387e07a163c2..557c2e961c4dd4 100644 --- a/src/plugins/data/public/utils/shallow_equal.ts +++ b/src/plugins/data/public/utils/shallow_equal.ts @@ -24,7 +24,7 @@ export function shallowEqual(objA: unknown, objB: unknown): boolean { for (let i = 0; i < keysA.length; i++) { if ( - !Object.prototype.hasOwnProperty.call(objB, keysA[i]) || + !Object.hasOwn(objB, keysA[i]) || // @ts-ignore !Object.is(objA[keysA[i]], objB[keysA[i]]) ) { diff --git a/src/plugins/data/server/search/session/session_service.ts b/src/plugins/data/server/search/session/session_service.ts index d729795d4f8fe0..efd41990493b3b 100644 --- a/src/plugins/data/server/search/session/session_service.ts +++ b/src/plugins/data/server/search/session/session_service.ts @@ -400,7 +400,7 @@ export class SearchSessionService implements ISearchSessionService { const session = await this.get(deps, user, sessionId); const requestHash = createRequestHash(searchRequest.params); - if (!session.attributes.idMapping.hasOwnProperty(requestHash)) { + if (!Object.hasOwn(session.attributes.idMapping, requestHash)) { this.logger.error(`SearchSessionService: getId | ${sessionId} | ${requestHash} not found`); this.logger.debug( `SearchSessionService: getId not found search with params: ${JSON.stringify( diff --git a/src/plugins/data_views/server/fetcher/lib/field_capabilities/overrides.ts b/src/plugins/data_views/server/fetcher/lib/field_capabilities/overrides.ts index 87afa69a99e55f..18f5c9c716e34f 100644 --- a/src/plugins/data_views/server/fetcher/lib/field_capabilities/overrides.ts +++ b/src/plugins/data_views/server/fetcher/lib/field_capabilities/overrides.ts @@ -29,7 +29,7 @@ const OVERRIDES: Record> = { * @return {FieldDescriptor} */ export function mergeOverrides(field: FieldDescriptor): FieldDescriptor { - if (OVERRIDES.hasOwnProperty(field.name)) { + if (Object.hasOwn(OVERRIDES, field.name)) { return merge(field, OVERRIDES[field.name]); } else { return field; diff --git a/src/plugins/expressions/common/ast/build_function.ts b/src/plugins/expressions/common/ast/build_function.ts index 1ccd8d8795a86e..eb93714fd35c3a 100644 --- a/src/plugins/expressions/common/ast/build_function.ts +++ b/src/plugins/expressions/common/ast/build_function.ts @@ -190,7 +190,7 @@ export function buildExpressionFunction< addArgument(key, value) { if (value !== undefined) { - if (!args.hasOwnProperty(key)) { + if (!Object.hasOwn(args, key)) { args[key] = []; } args[key].push(value); @@ -199,14 +199,14 @@ export function buildExpressionFunction< }, getArgument(key) { - if (!args.hasOwnProperty(key)) { + if (!Object.hasOwn(args, key)) { return; } return args[key]; }, replaceArgument(key, values) { - if (!args.hasOwnProperty(key)) { + if (!Object.hasOwn(args, key)) { throw new Error('Argument to replace does not exist on this function'); } args[key] = values; diff --git a/src/plugins/field_formats/common/converters/url.ts b/src/plugins/field_formats/common/converters/url.ts index 5f7567bfc66a1c..cdb760e820eedc 100644 --- a/src/plugins/field_formats/common/converters/url.ts +++ b/src/plugins/field_formats/common/converters/url.ts @@ -108,7 +108,7 @@ export class UrlFormat extends FieldFormat { let i = -1; while (++i < parts.length) { if (i % 2) { - if (locals.hasOwnProperty(parts[i])) { + if (Object.hasOwn(locals, parts[i])) { const local = locals[parts[i]]; output += local == null ? '' : local; } diff --git a/src/plugins/management/public/management_sections_service.ts b/src/plugins/management/public/management_sections_service.ts index 7344057e2e9937..b12c08dfb59369 100644 --- a/src/plugins/management/public/management_sections_service.ts +++ b/src/plugins/management/public/management_sections_service.ts @@ -71,12 +71,12 @@ export class ManagementSectionsService { start({ capabilities }: SectionsServiceStartDeps) { this.getAllSections().forEach((section) => { - if (capabilities.management.hasOwnProperty(section.id)) { + if (Object.hasOwn(capabilities.management, section.id)) { const sectionCapabilities = capabilities.management[section.id]; section.apps.forEach((app) => { const capabilitiesId = app.capabilitiesId || app.id; if ( - sectionCapabilities.hasOwnProperty(capabilitiesId) && + Object.hasOwn(sectionCapabilities, capabilitiesId) && sectionCapabilities[capabilitiesId] !== true ) { app.disable(); diff --git a/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx index 6d459c9029e270..fd98cffaae3f48 100644 --- a/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx +++ b/src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx @@ -147,7 +147,7 @@ describe('Table', () => { const table = component.find('EuiBasicTable'); const columns = table.prop('columns') as any[]; - const actionColumn = columns.find((x) => x.hasOwnProperty('actions')) as { actions: any[] }; + const actionColumn = columns.find((x) => Object.hasOwn(x, 'actions')) as { actions: any[] }; const someAction = actionColumn.actions.find( (x) => x['data-test-subj'] === 'savedObjectsTableAction-someAction' ); diff --git a/src/plugins/unified_search/public/filter_bar/filter_editor/phrase_suggestor.tsx b/src/plugins/unified_search/public/filter_bar/filter_editor/phrase_suggestor.tsx index 3f542be18d9f87..134c0bb72c89bb 100644 --- a/src/plugins/unified_search/public/filter_bar/filter_editor/phrase_suggestor.tsx +++ b/src/plugins/unified_search/public/filter_bar/filter_editor/phrase_suggestor.tsx @@ -62,11 +62,12 @@ export class PhraseSuggestorUI extends React.Com const isVersionFieldType = field?.esTypes?.includes('version'); return ( + // suggestions don't work for version fields shouldSuggestValues && field && field.aggregatable && field.type === 'string' && - !isVersionFieldType // suggestions don't work for version fields + !isVersionFieldType ); } diff --git a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx index 04c1dab19c8a8e..2720a13b1ff06a 100644 --- a/src/plugins/unified_search/public/query_string_input/query_string_input.tsx +++ b/src/plugins/unified_search/public/query_string_input/query_string_input.tsx @@ -228,7 +228,11 @@ export default class QueryStringInputUI extends PureComponent(this.props.indexPatterns || [], (indexPattern): indexPattern is DataView => { - return indexPattern.hasOwnProperty('fields') && indexPattern.hasOwnProperty('title'); + return ( + typeof indexPattern === 'object' && + Object.hasOwn(indexPattern, 'fields') && + Object.hasOwn(indexPattern, 'title') + ); }); const idOrTitlePatterns = stringPatterns.map((sp) => typeof sp === 'string' ? { type: 'title', value: sp } : sp diff --git a/src/plugins/unified_search/public/utils/shallow_equal.ts b/src/plugins/unified_search/public/utils/shallow_equal.ts index e0387e07a163c2..557c2e961c4dd4 100644 --- a/src/plugins/unified_search/public/utils/shallow_equal.ts +++ b/src/plugins/unified_search/public/utils/shallow_equal.ts @@ -24,7 +24,7 @@ export function shallowEqual(objA: unknown, objB: unknown): boolean { for (let i = 0; i < keysA.length; i++) { if ( - !Object.prototype.hasOwnProperty.call(objB, keysA[i]) || + !Object.hasOwn(objB, keysA[i]) || // @ts-ignore !Object.is(objA[keysA[i]], objB[keysA[i]]) ) { diff --git a/src/plugins/vis_default_editor/public/components/agg_params.tsx b/src/plugins/vis_default_editor/public/components/agg_params.tsx index 8e5d04a2778147..aa1fe36d797e41 100644 --- a/src/plugins/vis_default_editor/public/components/agg_params.tsx +++ b/src/plugins/vis_default_editor/public/components/agg_params.tsx @@ -141,8 +141,8 @@ function DefaultEditorAggParams({ Object.entries(editorConfig).forEach(([param, paramConfig]) => { const paramOptions = agg.type.params.find((paramOption) => paramOption.name === param); - const hasFixedValue = paramConfig.hasOwnProperty(FIXED_VALUE_PROP); - const hasDefault = paramConfig.hasOwnProperty(DEFAULT_PROP); + const hasFixedValue = Object.hasOwn(paramConfig, FIXED_VALUE_PROP); + const hasDefault = Object.hasOwn(paramConfig, DEFAULT_PROP); // If the parameter has a fixed value in the config, set this value. // Also for all supported configs we should freeze the editor for this param. if (hasFixedValue || hasDefault) { diff --git a/src/plugins/vis_types/table/public/utils/table_vis_response_handler.ts b/src/plugins/vis_types/table/public/utils/table_vis_response_handler.ts index be03295284c231..baee20a61930f3 100644 --- a/src/plugins/vis_types/table/public/utils/table_vis_response_handler.ts +++ b/src/plugins/vis_types/table/public/utils/table_vis_response_handler.ts @@ -33,7 +33,7 @@ export function tableVisResponseHandler(input: Datatable, visConfig: TableVisCon input.rows.forEach((row) => { const splitValue: string | number = row[splitColumn.id]; - if (!splitMap.hasOwnProperty(splitValue)) { + if (!Object.hasOwn(splitMap, splitValue)) { splitMap[splitValue] = splitIndex++; const tableGroup: TableGroup = { title: `${splitColumnFormatter.convert(splitValue)}: ${splitColumn.name}`, diff --git a/src/plugins/vis_types/timelion/server/series_functions/props.js b/src/plugins/vis_types/timelion/server/series_functions/props.js index 938c7e470bb554..efbba6cfe30dce 100644 --- a/src/plugins/vis_types/timelion/server/series_functions/props.js +++ b/src/plugins/vis_types/timelion/server/series_functions/props.js @@ -21,7 +21,7 @@ function unflatten(data) { let prop = ''; let m; while ((m = regex.exec(p))) { - cur = (cur.hasOwnProperty(prop) && cur[prop]) || (cur[prop] = m[2] ? [] : {}); + cur = (Object.hasOwn(cur, prop) && cur[prop]) || (cur[prop] = m[2] ? [] : {}); prop = m[2] || m[1]; } cur[prop] = data[p]; diff --git a/src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx b/src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx index 97890b3373cf82..688247c5eb6d59 100644 --- a/src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx +++ b/src/plugins/vis_types/vega/public/vega_inspector/components/inspector_data_grid.tsx @@ -75,7 +75,7 @@ export const InspectorDataGrid = ({ columns, data, dataGridAriaLabel }: Inspecto // then the row index must be adjusted as `data` has already been pruned to the page size adjustedRowIndex = rowIndex - pagination.pageIndex * pagination.pageSize; - return gridData.hasOwnProperty(adjustedRowIndex) + return Object.hasOwn(gridData, adjustedRowIndex) ? gridData[adjustedRowIndex][columnId] || null : null; }) as EuiDataGridProps['renderCellValue']; diff --git a/src/plugins/vis_types/vislib/public/vislib/lib/data.js b/src/plugins/vis_types/vislib/public/vislib/lib/data.js index 6b6bcb61015955..5ca9e7257ef62d 100644 --- a/src/plugins/vis_types/vislib/public/vislib/lib/data.js +++ b/src/plugins/vis_types/vislib/public/vislib/lib/data.js @@ -23,7 +23,7 @@ import { getFormatService } from '../../services'; class D3MappableObject { constructor(data) { for (const key in data) { - if (data.hasOwnProperty(key)) { + if (Object.hasOwn(data, key)) { this[key] = data[key]; } } diff --git a/src/plugins/vis_types/vislib/public/vislib/response_handler.js b/src/plugins/vis_types/vislib/public/vislib/response_handler.js index cba5cdc5c5b706..3b7da6b3ea5488 100644 --- a/src/plugins/vis_types/vislib/public/vislib/response_handler.js +++ b/src/plugins/vis_types/vislib/public/vislib/response_handler.js @@ -25,7 +25,7 @@ function tableResponseHandler(table, dimensions) { const splitValue = row[splitColumn.id]; const formattedValue = splitColumnFormatter.convert(splitValue); - if (!splitMap.hasOwnProperty(splitValue)) { + if (!Object.hasOwn(splitMap, splitValue)) { splitMap[splitValue] = splitIndex++; const tableGroup = { $parent: converted, diff --git a/x-pack/dev-tools/api_debug/request_from_api.js b/x-pack/dev-tools/api_debug/request_from_api.js index 1363a6a3b244d1..ba5cb79ecf4711 100644 --- a/x-pack/dev-tools/api_debug/request_from_api.js +++ b/x-pack/dev-tools/api_debug/request_from_api.js @@ -45,7 +45,7 @@ function logHeaders(res) { // use `--headers` to print the response headers const headers = res.headers.raw(); for (const key in headers) { - if (headers.hasOwnProperty(key)) { + if (Object.hasOwn(headers, key)) { console.log(`${key}: ${headers[key]}`); } } diff --git a/x-pack/packages/ml/data_grid/lib/common.ts b/x-pack/packages/ml/data_grid/lib/common.ts index 54a1f08ef6242c..82c6cfa6181740 100644 --- a/x-pack/packages/ml/data_grid/lib/common.ts +++ b/x-pack/packages/ml/data_grid/lib/common.ts @@ -368,11 +368,11 @@ export const useRenderCellValue = ( } function getCellValue(cId: string) { - if (tableItems.hasOwnProperty(adjustedRowIndex)) { + if (Object.hasOwn(tableItems, adjustedRowIndex)) { const item = tableItems[adjustedRowIndex]; // Try if the field name is available as is. - if (item.hasOwnProperty(cId)) { + if (Object.hasOwn(item, cId)) { return item[cId]; } diff --git a/x-pack/packages/ml/url_state/src/url_state.tsx b/x-pack/packages/ml/url_state/src/url_state.tsx index 585761b93cce3b..4fd5dfe6e0538d 100644 --- a/x-pack/packages/ml/url_state/src/url_state.tsx +++ b/x-pack/packages/ml/url_state/src/url_state.tsx @@ -124,7 +124,7 @@ export const UrlStateProvider: FC> = ({ children }) = const urlState = parseUrlState(prevSearchString); const parsedQueryString = parse(prevSearchString, { sort: false }); - if (!Object.prototype.hasOwnProperty.call(urlState, accessor)) { + if (!Object.hasOwn(urlState, accessor)) { urlState[accessor] = {}; } diff --git a/x-pack/plugins/actions/server/index.ts b/x-pack/plugins/actions/server/index.ts index ef1c277ff049b9..1d5aa22ba07cfe 100644 --- a/x-pack/plugins/actions/server/index.ts +++ b/x-pack/plugins/actions/server/index.ts @@ -61,8 +61,8 @@ export const config: PluginConfigDescriptor = { if ( customHostSettings.find( (customHostSchema: CustomHostSettings) => - customHostSchema.hasOwnProperty('ssl') && - customHostSchema.ssl?.hasOwnProperty('rejectUnauthorized') + Object.hasOwn(customHostSchema, 'ssl') && + Object.hasOwn(customHostSchema.ssl ?? {}, 'rejectUnauthorized') ) ) { addDeprecation({ @@ -93,7 +93,7 @@ export const config: PluginConfigDescriptor = { }, (settings, fromPath, addDeprecation) => { const actions = get(settings, fromPath); - if (actions?.hasOwnProperty('rejectUnauthorized')) { + if (Object.hasOwn(actions ?? {}, 'rejectUnauthorized')) { addDeprecation({ level: 'warning', configPath: `${fromPath}.rejectUnauthorized`, @@ -121,7 +121,7 @@ export const config: PluginConfigDescriptor = { }, (settings, fromPath, addDeprecation) => { const actions = get(settings, fromPath); - if (actions?.hasOwnProperty('proxyRejectUnauthorizedCertificates')) { + if (Object.hasOwn(actions ?? {}, 'proxyRejectUnauthorizedCertificates')) { addDeprecation({ level: 'warning', configPath: `${fromPath}.proxyRejectUnauthorizedCertificates`, diff --git a/x-pack/plugins/actions/server/lib/mustache_renderer.ts b/x-pack/plugins/actions/server/lib/mustache_renderer.ts index bd35e499fb4260..06f067493468be 100644 --- a/x-pack/plugins/actions/server/lib/mustache_renderer.ts +++ b/x-pack/plugins/actions/server/lib/mustache_renderer.ts @@ -104,7 +104,7 @@ function buildObject(key: string, value: unknown) { function addToStringDeep(object: unknown): void { // for objects, add a toString method, and then walk if (isNonNullObject(object)) { - if (!object.hasOwnProperty('toString')) { + if (!Object.hasOwn(object, 'toString')) { object.toString = () => JSON.stringify(object); } Object.values(object).forEach((value) => addToStringDeep(value)); diff --git a/x-pack/plugins/actions/server/saved_objects/actions_migrations.ts b/x-pack/plugins/actions/server/saved_objects/actions_migrations.ts index f785fa9ee4ac91..77eef6457e0e5c 100644 --- a/x-pack/plugins/actions/server/saved_objects/actions_migrations.ts +++ b/x-pack/plugins/actions/server/saved_objects/actions_migrations.ts @@ -42,7 +42,7 @@ export function getActionsMigrations( const migrationActionsTen = createEsoMigration( encryptedSavedObjects, (doc): doc is SavedObjectUnsanitizedDoc => - doc.attributes.config?.hasOwnProperty('casesConfiguration') || + Object.hasOwn(doc.attributes.config ?? {}, 'casesConfiguration') || doc.attributes.actionTypeId === '.email', pipeMigrations(renameCasesConfigurationObject, addHasAuthConfigurationObject) ); @@ -50,8 +50,8 @@ export function getActionsMigrations( const migrationActionsEleven = createEsoMigration( encryptedSavedObjects, (doc): doc is SavedObjectUnsanitizedDoc => - doc.attributes.config?.hasOwnProperty('isCaseOwned') || - doc.attributes.config?.hasOwnProperty('incidentConfiguration') || + Object.hasOwn(doc.attributes.config ?? {}, 'isCaseOwned') || + Object.hasOwn(doc.attributes.config ?? {}, 'incidentConfiguration') || doc.attributes.actionTypeId === '.webhook', pipeMigrations(removeCasesFieldMappings, addHasAuthConfigurationObject) ); @@ -142,8 +142,8 @@ function removeCasesFieldMappings( doc: SavedObjectUnsanitizedDoc ): SavedObjectUnsanitizedDoc { if ( - !doc.attributes.config?.hasOwnProperty('isCaseOwned') && - !doc.attributes.config?.hasOwnProperty('incidentConfiguration') + !Object.hasOwn(doc.attributes.config ?? {}, 'isCaseOwned') && + !Object.hasOwn(doc.attributes.config ?? {}, 'incidentConfiguration') ) { return doc; } diff --git a/x-pack/plugins/aiops/public/application/utils/search_utils.ts b/x-pack/plugins/aiops/public/application/utils/search_utils.ts index a561fbbca48644..533303436fa92f 100644 --- a/x-pack/plugins/aiops/public/application/utils/search_utils.ts +++ b/x-pack/plugins/aiops/public/application/utils/search_utils.ts @@ -160,7 +160,7 @@ export function getEsQueryFromSavedSearch({ if (Array.isArray(savedQuery.bool.filter) && timeField !== undefined) { savedQuery.bool.filter = savedQuery.bool.filter.filter( (c: QueryDslQueryContainer) => - !(c.hasOwnProperty('range') && c.range?.hasOwnProperty(timeField)) + !(Object.hasOwn(c, 'range') && Object.hasOwn(c.range ?? {}, timeField)) ); } return { diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx index 7f9df2468acf77..905ac53b149cac 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx @@ -345,7 +345,7 @@ export const LogRateAnalysisResultsGroupsTable: FC diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_columns.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_columns.tsx index 9de3e25cf25762..637aa0dc69b393 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_columns.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/use_columns.tsx @@ -596,7 +596,7 @@ export const useColumns = ( for (const columnName in columnNamesToReturn) { if ( - columnNamesToReturn.hasOwnProperty(columnName) === false || + Object.hasOwn(columnNamesToReturn, columnName) === false || skippedColumns.includes(columnNamesToReturn[columnName as ColumnNames] as string) || ((columnName === 'p-value' || columnName === 'Impact') && zeroDocsFallback) ) diff --git a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts index 42031c9ceeeacd..162cdb3cd21fb6 100644 --- a/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/alerts_client.ts @@ -429,7 +429,7 @@ export class AlertsClient< // See if there's an existing active alert document if (!!activeAlerts[id]) { if ( - this.fetchedAlerts.data.hasOwnProperty(id) && + Object.hasOwn(this.fetchedAlerts.data, id) && get(this.fetchedAlerts.data[id], ALERT_STATUS) === 'active' ) { const isImproving = isAlertImproving< @@ -491,7 +491,7 @@ export class AlertsClient< for (const id of keys(recoveredAlertsToReturn)) { // See if there's an existing alert document // If there is not, log an error because there should be - if (this.fetchedAlerts.data.hasOwnProperty(id)) { + if (Object.hasOwn(this.fetchedAlerts.data, id)) { recoveredAlertsToIndex.push( currentRecoveredAlerts[id] ? buildRecoveredAlert< diff --git a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts index c3ff97c645520a..3a1838342c5d69 100644 --- a/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts +++ b/x-pack/plugins/alerting/server/alerts_client/legacy_alerts_client.ts @@ -229,7 +229,7 @@ export class LegacyAlertsClient< public getProcessedAlerts( type: 'new' | 'active' | 'activeCurrent' | 'recovered' | 'recoveredCurrent' ) { - if (this.processedAlerts.hasOwnProperty(type)) { + if (Object.hasOwn(this.processedAlerts, type)) { return this.processedAlerts[type]; } diff --git a/x-pack/plugins/alerting/server/lib/process_alerts.ts b/x-pack/plugins/alerting/server/lib/process_alerts.ts index 628beebbe772e3..2fef33636441dd 100644 --- a/x-pack/plugins/alerting/server/lib/process_alerts.ts +++ b/x-pack/plugins/alerting/server/lib/process_alerts.ts @@ -105,7 +105,7 @@ function processAlertsHelper< const recoveredAlerts: Record> = {}; for (const id in alerts) { - if (alerts.hasOwnProperty(id)) { + if (Object.hasOwn(alerts, id)) { // alerts with scheduled actions are considered "active" if (alerts[id].hasScheduledActions()) { activeAlerts[id] = alerts[id]; @@ -209,8 +209,8 @@ function processAlertsLimitReached< // update duration for existing alerts for (const id in activeAlerts) { - if (activeAlerts.hasOwnProperty(id)) { - if (alerts.hasOwnProperty(id)) { + if (Object.hasOwn(activeAlerts, id)) { + if (Object.hasOwn(alerts, id)) { activeAlerts[id] = alerts[id]; } const state = existingAlerts[id].getState(); @@ -241,7 +241,7 @@ function processAlertsLimitReached< // look for new alerts and add until we hit capacity for (const id in alerts) { - if (alerts.hasOwnProperty(id) && alerts[id].hasScheduledActions()) { + if (Object.hasOwn(alerts, id) && alerts[id].hasScheduledActions()) { // if this alert did not exist in previous run, it is considered "new" if (!existingAlertIds.has(id)) { activeAlerts[id] = alerts[id]; diff --git a/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/format_default_aggregation_result/index.ts b/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/format_default_aggregation_result/index.ts index d751875e104d7e..1f8635e9351e64 100644 --- a/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/format_default_aggregation_result/index.ts +++ b/x-pack/plugins/alerting/server/routes/rule/apis/aggregate/transforms/format_default_aggregation_result/index.ts @@ -72,12 +72,12 @@ export const formatDefaultAggregationResult = ( // Fill missing keys with zeroes for (const key of RuleExecutionStatusValues) { - if (!result.ruleExecutionStatus.hasOwnProperty(key)) { + if (!Object.hasOwn(result.ruleExecutionStatus, key)) { result.ruleExecutionStatus[key] = 0; } } for (const key of RuleLastRunOutcomeValues) { - if (!result.ruleLastRunOutcome.hasOwnProperty(key)) { + if (!Object.hasOwn(result.ruleLastRunOutcome, key)) { result.ruleLastRunOutcome[key] = 0; } } diff --git a/x-pack/plugins/alerting/server/rules_client/lib/update_meta.ts b/x-pack/plugins/alerting/server/rules_client/lib/update_meta.ts index 278a6ac267df51..635778b5a5a1ad 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/update_meta.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/update_meta.ts @@ -15,7 +15,7 @@ export function updateMeta>( context: RulesClientContext, alertAttributes: T ): T { - if (alertAttributes.hasOwnProperty('apiKey') || alertAttributes.hasOwnProperty('apiKeyOwner')) { + if (Object.hasOwn(alertAttributes, 'apiKey') || Object.hasOwn(alertAttributes, 'apiKeyOwner')) { alertAttributes.meta = alertAttributes.meta ?? {}; alertAttributes.meta.versionApiKeyLastmodified = context.kibanaVersion; } diff --git a/x-pack/plugins/alerting/server/rules_client/lib/update_meta_attributes.ts b/x-pack/plugins/alerting/server/rules_client/lib/update_meta_attributes.ts index 716e0a8beacb9d..9570539b240460 100644 --- a/x-pack/plugins/alerting/server/rules_client/lib/update_meta_attributes.ts +++ b/x-pack/plugins/alerting/server/rules_client/lib/update_meta_attributes.ts @@ -12,7 +12,7 @@ export function updateMetaAttributes>( context: RulesClientContext, alertAttributes: T ): T { - if (alertAttributes.hasOwnProperty('apiKey') || alertAttributes.hasOwnProperty('apiKeyOwner')) { + if (Object.hasOwn(alertAttributes, 'apiKey') || Object.hasOwn(alertAttributes, 'apiKeyOwner')) { return { ...alertAttributes, meta: { diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts index 0a4dc41390f2b2..29d86b2b2d8606 100644 --- a/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts +++ b/x-pack/plugins/alerting/server/saved_objects/migrations/7.11/index.ts @@ -19,7 +19,7 @@ export const isAnyActionSupportIncidents = (doc: SavedObjectUnsanitizedDoc - Object.prototype.hasOwnProperty.call(statuses, status); +const isStatusValid = (status: string): status is CaseStatuses => Object.hasOwn(statuses, status); const getLabelTitle = (userAction: SnakeToCamelCase) => { const status = userAction.payload.status ?? ''; diff --git a/x-pack/plugins/cloud_defend/public/common/utils.ts b/x-pack/plugins/cloud_defend/public/common/utils.ts index 633302dcf77057..c86ae3c32fe044 100644 --- a/x-pack/plugins/cloud_defend/public/common/utils.ts +++ b/x-pack/plugins/cloud_defend/public/common/utils.ts @@ -91,7 +91,7 @@ function selectorsIncludeConditionsForFIMOperations( !!( selector && conditions.reduce((p, c) => { - return p && selector.hasOwnProperty(c); + return p && Object.hasOwn(selector, c); }, true) ); diff --git a/x-pack/plugins/cloud_defend/public/components/control_general_view_selector/index.tsx b/x-pack/plugins/cloud_defend/public/components/control_general_view_selector/index.tsx index 04033509fbe7ff..4511aa71f056c5 100644 --- a/x-pack/plugins/cloud_defend/public/components/control_general_view_selector/index.tsx +++ b/x-pack/plugins/cloud_defend/public/components/control_general_view_selector/index.tsx @@ -141,7 +141,7 @@ const StringArrayCondition = ({ label={label} fullWidth={true} key={prop} - isInvalid={!!errorMap.hasOwnProperty(prop)} + isInvalid={!!Object.hasOwn(errorMap, prop)} > @@ -216,7 +216,7 @@ export const ControlGeneralViewSelector = ({ const availableConditions = useMemo(() => getSelectorConditions(selector.type), [selector]); const remainingConditions = useMemo(() => { - return availableConditions.filter((condition) => !selector.hasOwnProperty(condition)); + return availableConditions.filter((condition) => !Object.hasOwn(selector, condition)); }, [availableConditions, selector]); const conditionsAdded = useMemo(() => { @@ -462,14 +462,14 @@ export const ControlGeneralViewSelector = ({ diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/server/assets/fullstory_library.js b/x-pack/plugins/cloud_integrations/cloud_full_story/server/assets/fullstory_library.js index bfe2af8d446687..b522ae7e4cbcc7 100644 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/server/assets/fullstory_library.js +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/server/assets/fullstory_library.js @@ -6,4 +6,4 @@ /* eslint-disable prettier/prettier,no-var,eqeqeq,new-cap,no-nested-ternary,no-use-before-define,no-sequences,block-scoped-var,one-var, dot-notation,no-script-url,no-restricted-globals,no-unused-vars,guard-for-in,no-proto,camelcase,no-empty,no-redeclare,no-caller, strict,no-extend-native,no-undef,no-loop-func */ -!function(){"use strict";var t={248:function(t,n,i){var r,e=i(940);function s(t){}!function(t){t[t.Unknown=0]="Unknown",t[t.Clean=1]="Clean",t[t.UnrecoverableFailure=2]="UnrecoverableFailure"}(r||(r={}));var o=new(function(){function t(t){this.rebuildFromSnapshot(t)}return t.prototype.rebuildFromSnapshot=function(t){var n=this.snapshot;if(this.snapshot=t,!n||n.functions!==t.functions){var i=t.functions;this.arrayIsArray=i.arrayIsArray,this.clearWindowInterval=a(i.clearWindowInterval),this.clearWindowTimeout=a(i.clearWindowTimeout),this.dateGetTime=a(i.dateGetTime),this.dateNow=i.dateNow,this.docFragQuerySelectorAll=a(i.docFragQuerySelectorAll),this.docQuerySelectorAll=a(i.docQuerySelectorAll),this.elMatches=a(i.elMatches),this.elQuerySelectorAll=a(i.elQuerySelectorAll),this.jsonParse=i.jsonParse,this.jsonStringify=i.jsonStringify,this.matchMedia=c(i.matchMedia),this.mathAbs=i.mathAbs,this.mathFloor=i.mathFloor,this.mathMax=i.mathMax,this.mathMin=i.mathMin,this.mathPow=i.mathPow,this.mathRandom=i.mathRandom,this.mathRound=i.mathRound,this.objectHasOwnProp=a(i.objectHasOwnProp),this.objectKeys=i.objectKeys,this.objectValues=i.objectValues||null,this.requestWindowAnimationFrame=c(i.requestWindowAnimationFrame),this.requestWindowIdleCallback=c(i.requestWindowIdleCallback),this.setWindowInterval=a(i.setWindowInterval),this.setWindowTimeout=a(i.setWindowTimeout)}},t}())(u(window));function u(t,n){void 0===n&&(n=r.Unknown);var i=n,e=[],s=function(t){return i=r.UnrecoverableFailure,e.push("Snapshot failed: "+t),function(){throw new Error("Invoked failed snapshot")}},o=function(t){try{return t()}catch(t){return s(t.message)}},u=function(t){try{return t()||s("snapshot not found")}catch(t){return s(t.message)}},a={arrayIsArray:o(function(){return t.Array.isArray}),clearWindowInterval:o(function(){return t.clearInterval}),clearWindowTimeout:o(function(){return t.clearTimeout}),dateGetTime:o(function(){return t.Date.prototype.getTime}),dateNow:o(function(){return t.Date.now}),docFragQuerySelectorAll:u(function(){var n;return null===(n=t.DocumentFragment)||void 0===n?void 0:n.prototype.querySelectorAll}),docQuerySelectorAll:u(function(){var n;return null!==(n=t.Document.prototype.querySelectorAll)&&void 0!==n?n:t.document.querySelectorAll}),elMatches:u(function(){return v(t,h)}),elQuerySelectorAll:u(function(){return v(t,f)}),jsonParse:o(function(){return t.JSON.parse}),jsonStringify:o(function(){return t.JSON.stringify}),matchMedia:o(function(){return t.matchMedia}),mathAbs:o(function(){return t.Math.abs}),mathFloor:o(function(){return t.Math.floor}),mathMax:o(function(){return t.Math.max}),mathMin:o(function(){return t.Math.min}),mathPow:o(function(){return t.Math.pow}),mathRandom:o(function(){return t.Math.random}),mathRound:o(function(){return t.Math.round}),objectHasOwnProp:o(function(){return t.Object.prototype.hasOwnProperty}),objectKeys:o(function(){return t.Object.keys}),objectValues:o(function(){return t.Object.values}),requestWindowAnimationFrame:o(function(){return t.requestAnimationFrame}),requestWindowIdleCallback:o(function(){return t.requestIdleCallback}),setWindowInterval:o(function(){return t.setInterval}),setWindowTimeout:o(function(){return t.setTimeout})},c={functionToString:o(function(){return t.Function.prototype.toString}),objectToString:o(function(){return t.Object.prototype.toString})};return{status:i,functions:a,helpers:c,errors:e}}function a(t){return function(n){for(var i=[],r=1;r=0){var s=e.split("/"),o=s[0],u=s[1];i[r]=o,n=u;break}}var a=function(t){var n=parseInt(null!=t?t:"",10),i=E(),r=S();return isNaN(n)?r:n<=i?void 0:n>r?r:n}(n);if(!a)return null;i[0];var c=i[1],h=i[2],f=i[3],v="";f&&(v=decodeURIComponent(f),(y.indexOf(v)>=0||b.indexOf(v)>=0)&&(v=""));var l=(null!=h?h:"").split(":"),d=l[0],p=l[1],w=l[2];return l[3],{appKeyHash:v,expirationAbsTimeSeconds:a,userId:d,orgId:c,pageCount:_(l[4]),sessionId:null!=p?p:"",sessionStartTime:_(w)}}function k(t){var n={};try{for(var i=t.cookie.split(";"),r=0;r1))return s}}(t);if(!i||!K(n))return n;var r="";return 0===n.indexOf("www.")&&(n=n.slice(4),r="www."),0===n.indexOf(i+".")&&(n=n.slice((i+".").length)),""+r+i+"."+n}}function $(t){return t?C(function(t){var n=t,i=n.indexOf(":");return i>=0&&(n=n.slice(0,i)),n}(t))?t:0==t.indexOf("www.")?"app."+t.slice(4):"app."+t:t}function G(t){var n=j(t);if(n)return n+"/s/fs.js"}function X(t,n){return function(){for(var i=[],r=0;rn)return!1;return i==n}function ot(t,n){var i=0;for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&++i>n)return!0;return!1}function ut(t){var n=t.nextSibling;return n&&t.parentNode&&n===t.parentNode.firstChild?null:n}function at(t){var n=t.previousSibling;return n&&t.parentNode&&n===t.parentNode.lastChild?null:n}function ct(t){return function(){for(var n=this,i=[],r=0;r"}function pt(t){return o.jsonParse(t)}var wt=function(){function t(t,n,i){void 0===i&&(i=!1),this.i=t,this.u=n,this.l=i,this.g=J,this.m=J,this.S=J,this.k=!1}return t.prototype.before=function(t){return this.g=ft(t),this},t.prototype.afterSync=function(t){return this.m=ft(t),this},t.prototype.afterAsync=function(t){return this.S=ft(function(n){o.setWindowTimeout(window,X(function(){t(n)}),0)}),this},t.prototype.disable=function(){if(this.k=!1,this._){var t=this._,n=t.override,i=t["native"];this.i[this.u]===n&&(this.i[this.u]=i,this._=void 0)}},t.prototype.enable=function(){if(this.k=!0,this._)return!0;this._=this.A();try{this.i[this.u]=this._.override}catch(t){return!1}return!0},t.prototype.getTarget=function(){return this.i},t.prototype.A=function(){var t=this,n=this,i=this.i[this.u],r=function(){for(var t=[],r=0;r\n";var i=[];try{for(var r=arguments.callee.caller.caller;r&&i.length<10;){var e=kt.test(r.toString())&&RegExp.$1||xt;i.push(e),r=r.caller}}catch(t){t.toString()}n=i.join("\n")}return t+n}function It(){try{return window.self!==window.top}catch(t){return!0}}var Tt=function(){function t(){}return t.wrap=function(n,i){return void 0===i&&(i="error"),X(n,function(n){return t.sendToBugsnag(n,i)})},t.I=15,t.sendToBugsnag=function(n,i,r){if(!(t.I<=0)){t.I--;var e=n;"string"==typeof e&&(e=new Error(e));var s=k(document).fs_uid,o=s?x(s):void 0;o&&o.orgId!=F(window)&&(o=void 0);var u=new Date(1678707725e3).toISOString(),a={projectRoot:window.location.origin,deviceTime:p(),inIframe:It(),CompiledVersion:"11aa377d19",CompiledTimestamp:1678707725,CompiledTime:u,orgId:F(window),"userId:sessionId":o?o.userId+":"+o.sessionId:"NA",context:document.location&&document.location.pathname,message:e.message,name:"Recording Error",releaseStage:"production "+u,severity:i,language:Et(window),stacktrace:_t(e)||At()},c=function(t,n,i){var r=encodeURIComponent(n)+"="+encodeURIComponent(i);t.push(r)},h=[];for(var f in a)c(h,f,a[f]||"");if(r)for(var f in r)c(h,"aux_"+f,Ct(r[f]));new Image().src="https://"+L(window)+"/rec/except?"+h.join("&")}},t}();function Ct(t){try{var n=typeof t+": "+vt(t);return"function"==typeof t.toString&&(n+=" (toString: "+t.toString()+")"),n}catch(t){return"failed to serialize \""+(null==t?void 0:t.message)+"\""}}var Pt={};function jt(t,n,i){if(void 0===i&&(i=1),t)return!0;if(Pt[n]=Pt[n]||0,Pt[n]++,Pt[n]>i)return!1;var r=new Error("Assertion failed: "+n);return Tt.sendToBugsnag(r,"error"),t}var Ot,Mt,Kt,Rt,Ht,Nt,Lt={};function Ut(t,n,i){var r;Lt[t]=null!==(r=Lt[t])&&void 0!==r?r:0,Lt[t]++,Lt[t]>1||Tt.sendToBugsnag(n,"error",i)}!function(t){t.MUT_INSERT=2,t.MUT_REMOVE=3,t.MUT_ATTR=4,t.MUT_TEXT=6,t.MOUSEMOVE=8,t.MOUSEMOVE_CURVE=9,t.SCROLL_LAYOUT=10,t.SCROLL_LAYOUT_CURVE=11,t.MOUSEDOWN=12,t.MOUSEUP=13,t.CLICK=16,t.FOCUS=17,t.VALUECHANGE=18,t.RESIZE_LAYOUT=19,t.DOMLOADED=20,t.LOAD=21,t.PLACEHOLDER_SIZE=22,t.UNLOAD=23,t.BLUR=24,t.SET_FRAME_BASE=25,t.TOUCHSTART=32,t.TOUCHEND=33,t.TOUCHCANCEL=34,t.TOUCHMOVE=35,t.TOUCHMOVE_CURVE=36,t.NAVIGATE=37,t.PLAY=38,t.PAUSE=39,t.RESIZE_VISUAL=40,t.RESIZE_VISUAL_CURVE=41,t.RESIZE_DOCUMENT_CONTENT=42,t.RESIZE_SCROLLABLE_ELEMENT_CONTENT=43,t.LOG=48,t.ERROR=49,t.DBL_CLICK=50,t.FORM_SUBMIT=51,t.WINDOW_FOCUS=52,t.WINDOW_BLUR=53,t.HEARTBEAT=54,t.WATCHED_ELEM=56,t.PERF_ENTRY=57,t.REC_FEAT_SUPPORTED=58,t.SELECT=59,t.CSSRULE_INSERT=60,t.CSSRULE_DELETE=61,t.FAIL_THROTTLED=62,t.AJAX_REQUEST=63,t.SCROLL_VISUAL_OFFSET=64,t.SCROLL_VISUAL_OFFSET_CURVE=65,t.MEDIA_QUERY_CHANGE=66,t.RESOURCE_TIMING_BUFFER_FULL=67,t.MUT_SHADOW=68,t.DISABLE_STYLESHEET=69,t.FULLSCREEN=70,t.FULLSCREEN_ERROR=71,t.ADOPTED_STYLESHEETS=72,t.CUSTOM_ELEMENT_DEFINED=73,t.MODAL_OPEN=74,t.MODAL_CLOSE=75,t.SLOW_INTERACTION=76,t.LONG_FRAME=77,t.TIMING=78,t.STORAGE_WRITE_FAILURE=79,t.DOCUMENT_PROPERTIES=80,t.ENTRY_NAVIGATE=81,t.STATS=82,t.VIEWPORT_INTERSECTION=83,t.COPY=84,t.PASTE=85,t.URL_SALT=86,t.URL_ID=87,t.FRAME_STATUS=88,t.SCRIPT_COMPILED_VERSION=89,t.RESET_CSS_SHEET=90,t.ANIMATION_CREATED=91,t.ANIMATION_METHOD_CALLED=92,t.ANIMATION_PROPERTY_SET=93,t.DOCUMENT_TIMELINE_CREATED=94,t.KEYFRAME_EFFECT_CREATED=95,t.KEYFRAME_EFFECT_METHOD_CALLED=96,t.KEYFRAME_EFFECT_PROPERTY_SET=97,t.CAPTURE_SOURCE=98,t.PAGE_DATA=99,t.VISIBILITY_STATE=100,t.DIALOG=101,t.CSSRULE_UPDATE=102,t.CANVAS=103,t.CANVAS_DETACHED_DIMENSION=104,t.INIT_API=105,t.DEFERRED_RESOLVED=106,t.KEEP_ELEMENT=2e3,t.KEEP_URL=2001,t.KEEP_BOUNCE=2002,t.SYS_SETVAR=8193,t.SYS_RESOURCEHASH=8195,t.SYS_SETCONSENT=8196,t.SYS_CUSTOM=8197,t.SYS_REPORTCONSENT=8198,t.SYS_LETHE_MOBILE_BUNDLE_SEQ=8199}(Ot||(Ot={})),function(t){t.Animation=0,t.CSSAnimation=1,t.CSSTransition=2}(Mt||(Mt={})),function(t){t.Unknown=0,t.Serialization=1}(Kt||(Kt={})),function(t){t.Unknown=0,t.Successful=1,t.BlocklistedFrame=2,t.PartiallyLoaded=3,t.MissingWindowOrDocument=4,t.MissingDocumentHead=5,t.MissingBodyOrChildren=6,t.AlreadyDefined=7,t.NoNonScriptElement=8,t.Exception=9}(Rt||(Rt={})),function(t){t.Unknown=0,t.DomSnapshot=1,t.NodeEncoding=2,t.LzEncoding=3}(Ht||(Ht={})),function(t){t.Internal=0,t.Public=1}(Nt||(Nt={}));var Ft,Dt,Bt,Wt,qt,Qt,Vt,zt,$t,Gt,Xt,Jt,Zt,Yt,tn,nn,rn,en,sn,on,un,an,cn,hn=["print","alert","confirm"];function fn(t){switch(t){case Ot.MOUSEDOWN:case Ot.MOUSEMOVE:case Ot.MOUSEMOVE_CURVE:case Ot.MOUSEUP:case Ot.TOUCHSTART:case Ot.TOUCHEND:case Ot.TOUCHMOVE:case Ot.TOUCHMOVE_CURVE:case Ot.TOUCHCANCEL:case Ot.CLICK:case Ot.SCROLL_LAYOUT:case Ot.SCROLL_LAYOUT_CURVE:case Ot.SCROLL_VISUAL_OFFSET:case Ot.SCROLL_VISUAL_OFFSET_CURVE:case Ot.NAVIGATE:return!0;}return!1}!function(t){t[t.Index=1]="Index",t[t.Cached=2]="Cached"}(Ft||(Ft={})),function(t){t.GrantConsent=!0,t.RevokeConsent=!1}(Dt||(Dt={})),function(t){t.Page=0,t.Document=1}(Bt||(Bt={})),function(t){t.Unknown=0,t.Api=1,t.FsShutdownFrame=2,t.Hibernation=3,t.Reidentify=4,t.SettingsBlocked=5,t.Size=6,t.Unload=7,t.Hidden=8}(Wt||(Wt={})),function(t){t.Unknown=0,t.NotEmpty=1,t.EmptyBody=2}(qt||(qt={})),function(t){t.Timing=0,t.Navigation=1,t.Resource=2,t.Paint=3,t.Mark=4,t.Measure=5,t.Memory=6,t.TimeOrigin=7,t.LayoutShift=8,t.FirstInput=9,t.LargestContentfulPaint=10,t.LongTask=11}(Qt||(Qt={})),function(t){t.Timing=["navigationStart","unloadEventStart","unloadEventEnd","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd"],t.Navigation=["name","startTime","duration","initiatorType","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","unloadEventStart","unloadEventEnd","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd","type","redirectCount","decodedBodySize","encodedBodySize","transferSize"],t.Resource=["name","startTime","duration","initiatorType","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","decodedBodySize","encodedBodySize","transferSize"],t.Measure=["name","startTime","duration"],t.Memory=["jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize"],t.TimeOrigin=["timeOrigin"],t.LayoutShift=["startTime","value","hadRecentInput"],t.FirstInput=["name","startTime","duration","processingStart"],t.LargestContentfulPaint=["name","startTime","duration","renderTime","loadTime","size"]}(Vt||(Vt={})),function(t){t.Performance=0,t.PerformanceEntries=1,t.PerformanceMemory=2,t.Console=3,t.Ajax=4,t.PerformanceObserver=5,t.PerformanceTimeOrigin=7,t.WebAnimation=8,t.LayoutShift=9,t.FirstInput=10,t.LargestContentfulPaint=11,t.LongTask=12,t.HTMLDialogElement=13,t.CaptureOnStartEnabled=14,t.CanvasWatcherEnabled=15}(zt||(zt={})),function(t){t.Node=1,t.Sheet=2}($t||($t={})),function(t){t.StyleSheetHooks=0,t.SetPropertyHooks=1}(Gt||(Gt={})),function(t){t.Document="document",t.Event="evt",t.Page="page",t.User="user"}(Xt||(Xt={})),function(t){t.FsId="fsidentity",t.NewUid="newuid"}(Jt||(Jt={})),function(t){t.Elide=0,t.Record=1,t.Allowlist=2}(Zt||(Zt={})),function(t){t.Any=0,t.Exclude=1,t.Mask=2}(Yt||(Yt={})),function(t){t.Erase=0,t.MaskText=1,t.ScrubUrl=2,t.ScrubCss=3}(tn||(tn={})),function(t){t.Static=0,t.Prefix=1}(nn||(nn={})),function(t){t.SignalInvalid=0,t.SignalDeadClick=1,t.SignalRageClick=2}(rn||(rn={})),function(t){t.ReasonNoSuchOrg=1,t.ReasonOrgDisabled=2,t.ReasonOrgOverQuota=3,t.ReasonBlockedDomain=4,t.ReasonBlockedIp=5,t.ReasonBlockedUserAgent=6,t.ReasonBlockedGeo=7,t.ReasonBlockedTrafficRamping=8,t.ReasonInvalidURL=9,t.ReasonUserOptOut=10,t.ReasonInvalidRecScript=11,t.ReasonDeletingUser=12,t.ReasonNativeHookFailure=13}(en||(en={})),function(t){t.Unset=0,t.Exclude=1,t.Mask=2,t.Unmask=3,t.Watch=4,t.Keep=5,t.Defer=6}(sn||(sn={})),function(t){t.Unset=0,t.Click=1}(on||(on={})),function(t){t[t.Page=1]="Page",t[t.Bundle=2]="Bundle"}(un||(un={})),function(t){t[t.Error=3]="Error",t[t.Page=4]="Page",t[t.Bundle=5]="Bundle",t[t.Settings=6]="Settings"}(an||(an={})),function(t){t.MaxPerfMarksPerPage=16384,t.MaxLogsPerPage=1024,t.MaxUrlLength=2048,t.MutationProcessingInterval=250,t.CurveSamplingInterval=142,t.DefaultBundleUploadInterval=5e3,t.HeartbeatInitial=4e3,t.HeartbeatMax=256200,t.PageInactivityTimeout=18e5,t.BackoffMax=3e5,t.ScrollSampleInterval=t.MutationProcessingInterval/5,t.InactivityThreshold=4e3,t.MaxAjaxPayloadLength=16384,t.DefaultOrgSettings={MaxPerfMarksPerPage:t.MaxPerfMarksPerPage,MaxConsoleLogPerPage:t.MaxLogsPerPage,MaxAjaxPayloadLength:t.MaxAjaxPayloadLength,MaxUrlLength:t.MaxUrlLength,RecordPerformanceResourceImg:!0,RecordPerformanceResourceTiming:!0,HttpRequestHeadersAllowlist:[],HttpResponseHeadersAllowlist:[],UrlPrivacyConfig:[{Exclude:{Hash:[{Expression:"#.*"}],QueryParam:[{Expression:"(=)(.*)"}]}}],AttributeBlocklist:[{Target:Yt.Any,Tag:"*",Name:"",Type:nn.Prefix,Action:tn.Erase}]},t.DefaultStatsSettings={MaxPayloadLength:8192,MaxEventTypeLength:1024},t.BlockedFieldValue="__fs__redacted"}(cn||(cn={}));var vn,ln,dn,pn="_fs_uid",wn="_fs_cid",gn="_fs_lua";function mn(t,n,i,r){void 0!==i&&("function"==typeof t.addEventListener?t.addEventListener(n,i,r):"function"==typeof t.addListener&&t.addListener(i))}function yn(t,n,i,r){void 0!==i&&("function"==typeof t.removeEventListener?t.removeEventListener(n,i,r):"function"==typeof t.removeListener&&t.removeListener(i))}!function(t){t[t.Shutdown=1]="Shutdown",t[t.Starting=2]="Starting",t[t.Started=3]="Started"}(vn||(vn={})),function(t){t.Set=0,t.Function=1}(ln||(ln={})),function(t){t[t.Disabled=0]="Disabled",t[t.CaptureCanvasOps=1]="CaptureCanvasOps",t[t.ScreenshotCanvas=2]="ScreenshotCanvas"}(dn||(dn={}));var bn=function(){function t(){var t=this;this.T=[],this.C=[],this.P=!0,this.j=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t.P={capture:!0,passive:!0},t.j={capture:!1,passive:!0}}});window.addEventListener("test",J,n)}catch(t){}}return t.prototype.add=function(t,n,i,r,e){return void 0===e&&(e=!1),this.addCustom(t,n,i,r,e)},t.prototype.addCustom=function(t,n,i,r,e){void 0===e&&(e=!1);var s={target:t,type:n,fn:Tt.wrap(function(t){(e||!1!==t.isTrusted||"message"==n||t._fs_trust_event)&&r(t)}),options:i?this.P:this.j,index:this.T.length};return this.T.push(s),mn(t,n,s.fn,s.options),s},t.prototype.remove=function(t){t.target&&(yn(t.target,t.type,t.fn,t.options),t.target=null,t.fn=void 0)},t.prototype.clear=function(){for(var t=0;ti){n.Z||(n.Z=!0,Tt.sendToBugsnag("Out of time for remaining measurement tasks.","warning",{totalRunningTimeMs:a-t}));break t}}n.G=null}finally{n.X=!1,n.wnd}}}),this.wnd=t}return t.create=function(t){return t.ResizeObserver?new ai(t,t.ResizeObserver):new ci(t)},t.prototype.requestMeasureTask=function(t,n){var i,r=this;if(this.J>16)Tt.sendToBugsnag("Too much synchronous recursion in requestMeasureTask","error");else{var e=this.X?this.J:0,s=Tt.wrap(function(){var t=r.J;r.J=e+1;try{n()}finally{r.J=t}});this.G?this.G[t].push(s):(this.G=((i={})[ii.Essential]=[],i[ii.High]=[],i[ii.Medium]=[],i[ii.Low]=[],i[t]=[s],i),this.schedule())}},t.prototype.performMeasurementsNow=function(){this.performMeasurements()},t}(),ai=function(t){function n(n,i){var r=t.call(this,n)||this;return r.Y=i,r}return(0,e.__extends)(n,t),n.prototype.schedule=function(){var t=this,n=this.Y,i=this.wnd.document,r=i.documentElement||i.body||i.head,e=new n(function(){e.unobserve(r),t.performMeasurements()});e.observe(r)},n}(ui),ci=function(t){function n(n){return t.call(this,n)||this}return(0,e.__extends)(n,t),n.prototype.schedule=function(){(0,e.__awaiter)(void 0,void 0,Yn,function(){var t;return(0,e.__generator)(this,function(n){switch(n.label){case 0:return(t=o.requestWindowAnimationFrame)?[4,new Yn(function(n){return t(window,n)})]:[3,2];case 1:n.sent(),n.label=2;case 2:return[4,ei()];case 3:return n.sent(),[2];}})}).then(this.performMeasurements)},n}(ui);function hi(t,n){return n&&t.pageLeft==n.pageLeft&&t.pageTop==n.pageTop}function fi(t,n){return n&&t.width==n.width&&t.height==n.height}function vi(t){return{pageLeft:t.pageLeft,pageTop:t.pageTop,width:t.width,height:t.height}}var li=[["@import\\s+\"","\""],["@import\\s+'","'"]].concat([["url\\(\\s*\"","\"\\s*\\)"],["url\\(\\s*'","'\\s*\\)"],["url\\(\\s*","\\s*\\)"]]),di=".*?"+/(?:[^\\](?:\\\\)*)/.source,pi=new RegExp(li.map(function(t){var n=t[0],i=t[1];return"("+n+")("+di+")("+i+")"}).join("|"),"g"),wi=/url\(["']?(.+?)["']?\)/g,gi=/^\s*\/\//;function mi(t){return"BackCompat"==t.compatMode}function yi(t){return t&&t.body&&t.documentElement?mi(t)?[t.body.clientWidth,t.body.clientHeight]:[t.documentElement.clientWidth,t.documentElement.clientHeight]:[0,0]}var bi=function(){function t(t,n){var i,r,e,s;this.hasKnownPosition=!1,this.pageLeft=0,this.pageTop=0,this.width=0,this.height=0,this.clientWidth=0,this.clientHeight=0;var o=t.document;if(o&&o.documentElement&&o.body){i=yi(o),this.clientWidth=i[0],this.clientHeight=i[1];var u=t.visualViewport;if(u){this.hasKnownPosition=!0,this.pageTop=u.pageTop-u.offsetTop,this.pageLeft=u.pageLeft-u.offsetLeft,0==this.pageTop&&(this.pageTop=0),0==this.pageLeft&&(this.pageLeft=0);var a=null!==(e=xi(t,"innerWidth"))&&void 0!==e?e:0,c=null!==(s=xi(t,"innerHeight"))&&void 0!==s?s:0;if(a>0&&c>0)return this.width=a,void(this.height=c)}if(void 0!==n&&this.clientWidth==n.clientWidth&&this.clientHeight==n.clientHeight&&n.width>0&&n.height>0)return this.width=n.width,void(this.height=n.height);r=this.tt(t),this.width=r[0],this.height=r[1]}}return t.prototype.tt=function(t){var n=this.it(t,"width",this.clientWidth,this.clientWidth+128);void 0===n&&(n=xi(t,"innerWidth")),void 0===n&&(n=this.clientWidth);var i=this.it(t,"height",this.clientHeight,this.clientHeight+128);return void 0===i&&(i=xi(t,"innerHeight")),void 0===i&&(i=this.clientHeight),[n,i]},t.prototype.it=function(t,n,i,r){if(o.matchMedia){var e=i,s=r,u=o.matchMedia(t,"(min-"+n+": "+e+"px)");if(null!=u){if(u.matches&&o.matchMedia(t,"(max-"+n+": "+e+"px)").matches)return e;for(;e<=s;){var a=o.mathFloor((e+s)/2);if(o.matchMedia(t,"(min-"+n+": "+a+"px)").matches){if(o.matchMedia(t,"(max-"+n+": "+a+"px)").matches)return a;e=a+1}else s=a-1}}}},t}();function Ei(t,n){return new bi(t,n)}var Si=function(t,n){this.offsetLeft=0,this.offsetTop=0,this.pageLeft=0,this.pageTop=0,this.width=0,this.height=0,this.scale=0;var i=t.document;if(i.body){"pageXOffset"in t?(this.pageLeft=t.pageXOffset,this.pageTop=t.pageYOffset):i.scrollingElement?(this.pageLeft=i.scrollingElement.scrollLeft,this.pageTop=i.scrollingElement.scrollTop):mi(i)?(this.pageLeft=i.body.scrollLeft,this.pageTop=i.body.scrollTop):i.documentElement&&(i.documentElement.scrollLeft>0||i.documentElement.scrollTop>0)?(this.pageLeft=i.documentElement.scrollLeft,this.pageTop=i.documentElement.scrollTop):(this.pageLeft=i.body.scrollLeft||0,this.pageTop=i.body.scrollTop||0),this.offsetLeft=this.pageLeft-n.pageLeft,this.offsetTop=this.pageTop-n.pageTop;var r=0,e=0;try{r=t.innerWidth,e=t.innerHeight}catch(t){return}if(0!=r&&0!=e){this.scale=n.width/r,this.scale<1&&(this.scale=1);var s=n.width-n.clientWidth,o=n.height-n.clientHeight;this.width=r-s/this.scale,this.height=e-o/this.scale}}};function xi(t,n){try{return t[n]}catch(t){return}}function ki(t){var n=t;return n.tagName?"object"==typeof n.tagName?"form":n.tagName.toLowerCase():null}var _i,Ai,Ii=new RegExp("[^\\s]"),Ti=new RegExp("[\\s]*$");function Ci(t){var n=Ii.exec(t);if(!n)return t;for(var i=n.index,r=(n=Ti.exec(t))?t.length-n.index:0,e="\uFFFF",s=t.slice(i,t.length-r).split(/\r\n?|\n/g),o=0;o0&&n.length<1e4;){var i=n.pop();delete Mi[i.id],i.node._fs==i.id&&(i.node._fs=0),i.id=0,i.next&&n.push(i.next),i.child&&n.push(i.child)}jt(n.length<1e4,"clearIds is fast")}function Qi(t,n){void 0===n&&(n=1024);try{var i={tokens:[],opath:[],cyclic:Vi(t,n/4)};return $i(t,n,0,i),i.tokens.join("")}catch(t){return lt(t)}}function Vi(t,n){var i=0;try{o.jsonStringify(t,function(t,r){if(i++>n)throw"break";if("object"==typeof r)return r})}catch(t){return"break"!=t}return!1}var zi=function(t,n,i){return void 0===i&&(i="..."),t.length<=n?t:t.length<=i.length||n<=i.length?t.substring(0,n):t.substring(0,n-i.length)+i};function $i(t,n,i,r){if(n<1)return 0;var e=function(t){switch(!0){case function(t){return!(!t||t.constructor!=Date)}(t):return n=t,isNaN(n)?"Invalid Date":n.toUTCString();case function(t){return"object"==typeof Node?t instanceof Node:t&&"object"==typeof t&&t.nodeType>0&&"string"==typeof t.nodeName}(t):return function(t){return t.toString()}(t);case void 0===t:return"undefined";case"object"!=typeof t||null==t:return t;case t instanceof Error:return[t.toString(),t.stack].filter(Boolean).join(",");}var n}(t);if(void 0!==e){var s=function(t,n){var i=o.jsonStringify(t);return i&&"\""==i[0]?zi(i,n,"...\""):i}(e,n);return"string"==typeof s&&s.length<=n?(r.tokens.push(s),s.length):0}if(r.cyclic){r.opath.splice(i);var u=r.opath.lastIndexOf(t);if(u>-1){var a="";return a="\""+zi(a,n-2)+"\"",r.tokens.push(a),a.length}r.opath.push(t)}var c=n,h=function(t){return c>=t.length&&(c-=t.length,r.tokens.push(t),!0)},f=function(t){var n=r.tokens.length-1;","===r.tokens[n]?r.tokens[n]=t:h(t)};if(c<2)return 0;if(tt(t)){h("[");for(var v=0;v0;v++){var l=$i(t[v],c-1,i+1,r);if(c-=l,0==l&&!h("null"))break;h(",")}f("]")}else{h("{");var d=nt(t);for(v=0;v0;v++){var p=d[v],w=t[p];if(!h("\""+p+"\":"))break;if(0==(l=$i(w,c-1,i+1,r))){r.tokens.pop();break}c-=l,h(",")}f("}")}return n==1/0?1:n-c}var Gi,Xi,Ji=function(){function t(){var n=this;this.rt=Tt.wrap(function(){n.unregister(),n.et&&n.et()}),this.st=0,this.ot=t.ut++}return t.ct=function(){t.checkedAlready=!1,t.ht=0},t.checkForBrokenSchedulers=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i;return(0,e.__generator)(this,function(r){switch(r.label){case 0:return!o.requestWindowAnimationFrame||t.checkedAlready||(n=p())-t.ht<100?[2,!1]:(t.ht=n,t.checkedAlready=!0,[4,new Yn(function(t){return o.requestWindowAnimationFrame(window,t)})]);case 1:return r.sent(),i=[],rt(t.ft,function(t){var r=t.vt(n);r&&i.push(r)}),[4,Yn.all(i)];case 2:return r.sent(),o.requestWindowAnimationFrame(window,Tt.wrap(function(){t.checkedAlready=!1})),[2,!0];}})})},t.stopAll=function(){rt(this.ft,function(t){return t.stop()})},t.prototype.setTick=function(t){this.et=t},t.prototype.stop=function(){this.cancel(),delete t.ft[this.ot]},t.prototype.register=function(n){this.st=p()+100+1.5*n,t.ft[this.ot]=this},t.prototype.timerIsRunning=function(){return null!=t.ft[this.ot]},t.prototype.unregister=function(){delete t.ft[this.ot]},t.prototype.vt=function(t){if(t>this.st)return Yn.resolve().then(this.rt)["catch"](function(){})},t.ft={},t.ut=0,t.checkedAlready=!1,t.ht=0,t}(),Zi=function(t){function n(n){var i=t.call(this)||this;return i.lt=n,i.dt=-1,i}return(0,e.__extends)(n,t),n.prototype.start=function(t){var n=this;-1==this.dt&&(this.setTick(function(){t(),n.register(n.lt)}),this.dt=o.setWindowInterval(window,this.rt,this.lt),this.register(this.lt))},n.prototype.cancel=function(){-1!=this.dt&&(o.clearWindowInterval(window,this.dt),this.dt=-1,this.setTick(function(){}))},n}(Ji),Yi=function(t){function n(n,i,r){void 0===i&&(i=0);for(var e=[],s=3;sn&&(this.St=t-n,this.St>1e3&&this.kt("timekeeper set with future ts"))},t.prototype.kt=function(t){Qi({msg:t,skew:this.St,startTime:this.xt,wallTime:this.wallTime()},1024)},t}(),ir=function(){function t(t,n){this._t=t,this.At=n,this.It=!1,this.Tt={},this.Ct={},this.Pt={},this.jt=!1,this.Ot=!1,Gi=this,this.Mt=t.window.document}return t.prototype.start=function(){var t;(t=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))&&t.set&&(rr||(yt(HTMLInputElement,"value",ar),yt(HTMLInputElement,"checked",ar),yt(HTMLSelectElement,"value",ar),yt(HTMLTextAreaElement,"value",ar),yt(HTMLSelectElement,"selectedIndex",ar),yt(HTMLOptionElement,"selected",ar),rr=!0),1)||(this.It=!0)},t.prototype.hookInstance=function(t){if("input"===ki(t))switch(t.type){case"checkbox":case"radio":bt(t,"checked",ar);break;default:bt(t,"value",ar);}},t.prototype.addInput=function(t){if(t){var n=Bi(t);if(n){"input"===ki(t)&&this.Kt(t);var i=!1;if(function(t){switch(t.type){case"checkbox":case"radio":return t.checked!=t.hasAttribute("checked");default:return(t.value||"")!=function(t){if("select"!=ki(t))return t.getAttribute("value")||"";var n=t,i=n.querySelector("option[selected]")||n.querySelector("option");return i&&i.value||""}(t);}}(t)&&(this.Rt(t),i=!0),this.It&&(this.Tt[n]={elem:t}),!i)if(hr(t)){var r=or(t);t.checked&&(this.Pt[r]=n)}else this.Ct[n]=cr(t)}}},t.prototype.Kt=function(t){if(this.jt)this.Ot&&this.hookInstance(t);else{var n="checkbox"===t.type||"radio"===t.type?"checked":"value",i=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,n),r=Object.getOwnPropertyDescriptor(t,n);i&&r&&i!==r&&(this.Ot=!0,this.hookInstance(t)),this.jt=!0}},t.prototype.diffValue=function(t,n){void 0===n&&(n=cr(t));var i=Bi(t);if(!t||!i)return!1;if(hr(t)){var r=or(t);return this.Pt[r]===i!=("true"===n)}return this.Ct[i]!==n},t.prototype.onChange=function(t,n,i){void 0===i&&(i=cr(t));var r=Bi(t);t&&r&&(n||this.diffValue(t,i))&&this.Rt(t,n)},t.prototype.onKeyboardChange=function(t){var n,i=function(t){for(var n=t.activeElement;n&&n.shadowRoot;){var i=n.shadowRoot.activeElement;if(!i)return n;n=i}return n}(this.Mt);i&&("value"in(n=i)||"checked"in n)&&!Hi(i)&&this.diffValue(i)&&this.Rt(i,t)},t.prototype.tick=function(){for(var t in this.Tt){var n=this.Tt[t],i=n.elem;if(Bi(i))try{delete this.Tt[t];var r=cr(i);if(this.diffValue(i,r))this.Rt(i);else if(n.noFsIdInOption){var e=i;Array.prototype.slice.call(e.options).every(function(t){return Bi(t)})&&(n.noFsIdInOption=!1,this.Rt(i))}}finally{this.It&&(this.Tt[t]=n)}else delete this.Tt[t],delete this.Ct[t],hr(i)&&delete this.Pt[or(i)]}},t.prototype.stop=function(){Gi=void 0},t.prototype.Rt=function(t,n){var i=this;void 0===n&&(n=!1);var r=Bi(t);if(t&&r&&!this.Ht(r,t)){var e=cr(t);if(hr(t)){var s=or(t);"false"===e&&this.Pt[s]===r?delete this.Pt[s]:"true"===e&&(this.Pt[s]=r)}else this.Ct[r]=e;this._t.measurer.requestMeasureTask(ii.Medium,function(){var s=t.getBoundingClientRect(),o=s.width>0&&s.height>0,u=Ni(t)?Ci(e):e;i.At.enqueue({Kind:Ot.VALUECHANGE,Args:[r,u,n,o]})})}},t.prototype.Ht=function(t,n){if(this.Tt[t])return!0;if("select"!==ki(n))return!1;for(var i=n.options,r=0;r-1||wr.indexOf("Trident/")>-1,mr=(gr&&wr.indexOf("Trident/5"),gr&&wr.indexOf("Trident/6"),gr&&wr.indexOf("rv:11")>-1),yr=wr.indexOf("Edge/")>-1,br=(wr.indexOf("CriOS"),wr.indexOf("Snapchat")>-1),Er=/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent);function Sr(){var t=window.navigator.userAgent.match(/Version\/(\d+)/);return t&&t[1]?parseInt(t[1],10):-1}function xr(t){if(!Er)return!1;var n=Sr();return n>=0&&n===t}function kr(t){if(!Er)return!1;var n=Sr();return n>=0&&nne?(Tt.sendToBugsnag("Ignoring huge text node","warning",{length:s}),""):t.parentNode&&"style"==ki(t.parentNode)?r:e.mask?Ci(r):r}function re(t){return Kr[t]||t.toLowerCase()}var ee=/^\s*((prefetch|preload|prerender)\s*)+$/i,se=/^\s*.*((worklet|script|worker|font|fetch)\s*)+$/i;function oe(t,n,i,r,e){var s,u;if(void 0===r&&(r=ki(t)),void 0===e&&(e=Ui(t)),null===r||""===n)return null;if("link"===r&&ee.test(null!==(s=t.getAttribute("rel"))&&void 0!==s?s:"")&&!se.test(null!==(u=t.getAttribute("as"))&&void 0!==u?u:""))return null;var a,c="style"===n?ae(i):i,h=function(t,n,i){var r,e,s,u,a,c,h,f,v,l,d,p,w,g=void 0;(null===(r=null==n?void 0:n.watchKind)||void 0===r?void 0:r.has(_i.Exclude))?g=Yt.Exclude:(null==n?void 0:n.mask)&&(g=Yt.Mask);var m=[null===(u=null===(s=null===(e=Ee.blocklist[Yt.Any])||void 0===e?void 0:e[t])||void 0===s?void 0:s["static"])||void 0===u?void 0:u[i],null===(h=null===(c=null===(a=Ee.blocklist[Yt.Any])||void 0===a?void 0:a["*"])||void 0===c?void 0:c["static"])||void 0===h?void 0:h[i],g?null===(l=null===(v=null===(f=Ee.blocklist[g])||void 0===f?void 0:f[t])||void 0===v?void 0:v["static"])||void 0===l?void 0:l[i]:void 0,g?null===(w=null===(p=null===(d=Ee.blocklist[g])||void 0===d?void 0:d["*"])||void 0===p?void 0:p["static"])||void 0===w?void 0:w[i]:void 0];return Ee.hasPrefix&&m.push(ke(Yt.Any,t,i),ke(Yt.Any,"*",i),g?ke(g,t,i):void 0,g?ke(g,"*",i):void 0),function(t){var n=t.filter(function(t){return void 0!==t});if(0!==n.length)return o.mathMin.apply(o,n)}(m)}(r,e,n);if(void 0===h&&!e)return null;switch(h){case void 0:return c;case tn.Erase:return null;case tn.MaskText:return Ci(c);case tn.ScrubCss:return a=function(t,n,i){return""+t+Se+i},c.replace(pi,function(t){for(var n=[],i=1;i-1)return f.substring(v)}return f;default:return(0,Ir.nt)(h);}}var ue={},ae=function(t,n){void 0===n&&(n=window);try{var i=n.location,r=""+i.origin+i.pathname+i.search,e=ue[r];return e?e.lastIndex=0:(e=new RegExp((s=r,($r.test(s)?s.replace(zr,"\\$&"):s)+"/?(#)"),"g"),ue[r]=e),t.replace(e,"https://fs-currenturl.invalid$1")}catch(n){return Ut("cleanCSS",n),t}var s},ce=/^data:/i;function he(t,n){if(ce.test(t))return t;switch(n.source){case"dom":switch(i=n.type){case"frame":case"iframe":return we(t);default:return fe(t);}case"event":switch(i=n.type){case Ot.AJAX_REQUEST:case Ot.NAVIGATE:return fe(t);case Ot.SET_FRAME_BASE:return we(t);default:return(0,Ir.nt)(i);}case"log":return we(t);case"page":var i;switch(i=n.type){case"base":return we(t);case"referrer":case"url":return fe(t);default:return(0,Ir.nt)(i);}case"perfEntry":switch(n.type){case"frame":case"iframe":case"navigation":case"other":return we(t);default:return fe(t);}default:return(0,Ir.nt)(n);}}function fe(t){return ge(de,t)}var ve=cn.DefaultOrgSettings.MaxUrlLength,le=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig),de=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig);function pe(t,n){le=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig.concat(t)),de=Rr(t),ve=n||cn.DefaultOrgSettings.MaxUrlLength}function we(t){return ge(le,t)}function ge(t,n){return function(t,n,i){void 0===i&&(i=Lr);for(var r={Hash:[],Host:[],Path:[],QueryParam:[],Query:[]},e=0,s=t;e").replace(ye,function(t){return he(t,{source:"log",type:"debug"})})}var Ee,Se="https://fs-excluded.invalid";function xe(t){var n,i,r,e,s,o,u,a,c,h,f,v,l,d,p,w;try{for(var g=(Ee={blocklist:{},hasPrefix:!1}).blocklist,m=(null!==(r=null==t?void 0:t.length)&&void 0!==r?r:0)>0?t:cn.DefaultOrgSettings.AttributeBlocklist,y={},b=0,E=m;b-1;var n}var Te="#polyfillshadow";function Ce(t){var n;return(null===(n=t.childNodes)||void 0===n?void 0:n.length)>0}function Pe(t,n){Oe(t.childNodes,n)}function je(t,n){Oe(t.childNodes,n,!0)}function Oe(t,n,i){void 0===i&&(i=!1);for(var r=i?t.length-1:0,e=i?-1:t.length;r!==e;){var s=t[r];s&&"frag"in s&&!St(s)&&Array.isArray(s.frag)?s.frag.length&&Oe(s.childNodes,n,i):n(s),i?--r:++r}}var Me={INPUT:!0,TEXTAREA:!0,NOSCRIPT:!0},Ke=function(){function t(t,n,i){this.Xt=t,this.Jt=n,this.Zt=i,Mi={},Ki=1}return t.prototype.tokenizeNode=function(t,n,i,r,e,s,o){var u=this,a=Ui(n),c=Ui(i),h=[];return function(n){var i=Ki;try{return u.Yt(t,a,c,r,h,e,s,o),!0}catch(t){return Ki=i,!1}}()||(h=[]),h},t.prototype.Yt=function(t,n,i,r,s,o,u,a){for(var c,h,f=[{parentMirror:n,nextMirror:i,node:r}],v=function(t,n){return function(i){i&&t.push({parentMirror:n,nextMirror:null,node:i})}};f.length;){var l=f.pop();if(l)if("string"!=typeof l){var d=l.node,p=ki(d),w=this.tn(t,p,l,s,o,u);if(null!=w&&!(null===(c=w.watchKind)||void 0===c?void 0:c.has(_i.Exclude))){var g=1===d.nodeType?d.shadowRoot:null,m=w.shadowRootType===Te&&window.HTMLSlotElement&&"slot"===p&&d.assignedNodes();if(g||m||Ce(d))if(null===(h=w.watchKind)||void 0===h?void 0:h.has(_i.Defer))a(w.node,Ai.Deferred);else{if(f.push("]"),je(d,v(f,w)),g)f.push({parentMirror:w,nextMirror:null,node:g});else if(m&&m.length>0){for(var y=[],b=!1,E=0,S=m;E1e3)return null;if(!i||1!=i.nodeType)return null;var r=i;if(getComputedStyle(r).display.indexOf("inline")<0)return r;i=i.parentNode}},n}(Ze),ts=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return(0,e.__extends)(n,t),n.prototype.observe=function(t){var n=this;if(t&&1==t.nodeType){var i=t;this.Tn(Ui(t)),this._t.measurer.requestMeasureTask(ii.Medium,function(){n.addEntry(i)})}},n.prototype.unobserveSubtree=function(t){var n=Ui(t);n&&this.Cn(n)},n.prototype.nodeChanged=function(t){var n=this,i=this.Pn(t);this._t.measurer.requestMeasureTask(ii.Medium,function(){for(var t=0,r=i;t0||this.Hn.length>0){var r={},s={};for(var o in this.Gn(t,i,s,r),s){var u=o.split("\t");i.push({Kind:Ot.MUT_ATTR,Args:[parseInt(u[0],10),u[1],s[o]],When:t})}for(var o in r)i.push({Kind:Ot.MUT_TEXT,Args:[parseInt(o,10),r[o]],When:t})}var a=this.Rn;this.Rn=[];for(var c=0;c0&&(i.push({Kind:Ot.DEFERRED_RESOLVED,Args:(0,e.__spreadArray)([],this.Ln),When:t}),this.Ln=[]),this.Nn.length>0){for(var f=0,v=this.Nn;f0&&this.Un.push(es(l))}this.Nn=[]}return i},t.prototype.recordingIsDetached=function(){return!!this.Wn&&this.Wn!=this.Dn.document},t.prototype.$n=function(t,n){if(!this.Kn&&this.Wn){window;var i=this.Xt.allWatchedElements(this.Wn);this.Zn(i,t,n,null,this.Wn,null),this.Jt.nodeChanged(this.Wn),this.qn&&this.Xn(this.Wn),this.Kn=!0,this.Yn(),window}},t.prototype.Yn=function(){var t=this;this.zn=mt(Element.prototype,"attachShadow",!0),this.zn&&this.zn.before(function(n){n.that.shadowRoot||t.Rn.push(n.that)})},t.prototype.Xn=function(t){var n;try{null===(n=this.qn)||void 0===n||n.observe(t,{childList:!0,attributes:!0,characterData:!0,subtree:!0,attributeOldValue:!0,characterDataOldValue:!0})}catch(t){}},t.prototype.Gn=function(t,n,i,r){for(var e,s,o,u,a=this,c={},h={},f=function(i){if(Ui(i)){a.ti(t,n,Ui(i));var r=Ui(i.parentNode);r&&(h[r.id]=r.node)}},v=0;v0)for(var m=0;m0){h[g]=l.target;var y=!(null==(T=l.target)?void 0:T.shadowRoot)||Ie(T.shadowRoot)?null:Ui(T.shadowRoot);y&&(h[y.id]=y.node)}break;case"characterData":Hi(l.target)||l.oldValue!=l.target.textContent&&(r[g]=ie(l.target));break;case"attributes":var b=ki(j=l.target);if("link"===b&&"rel"===l.attributeName&&ee.test(null!==(o=l.oldValue)&&void 0!==o?o:"")){f(j);break}var E,S=Li(j),x=this.Xt.isWatched(j);if($e(x)>$e(S)){f(j);break}De.needsToObserve(S,x)&&(this.Jt.observe(j),(null==x?void 0:x.has(_i.Watch))&&(null===(u=this.Zt)||void 0===u||u.observe(j)),(E=Ui(j))&&(E.watchKind=De.combineKindsPreservePrivacy(S,x)));var k=(void 0===(I=l.attributeNamespace)&&(I=""),(null===I?"":{"http://www.w3.org/1999/xlink":"xlink:","http://www.w3.org/XML/1998/namespace":"xml:","http://www.w3.org/2000/xmlns/":"xmlns:"}[I]||"")+(l.attributeName||"")),_=re(k);if("dialog"===b&&"open"===k)break;if(j.hasAttribute(k)){var A=l.target.getAttribute(k);l.oldValue!=A&&(A=oe(l.target,_,A||"",b),this.Mn(b,l.target,((e={})[_]=A||"",e)),null!==A&&(i[g+"\t"+_]=A))}else i[g+"\t"+_]=null;}}catch(t){}for(var I,T,C=0,P=this.Hn;C0&&i.push({Kind:Ot.MUT_SHADOW,Args:[s,u],When:n},{Kind:Ot.TIMING,Args:[[Nt.Internal,Kt.Serialization,Ht.NodeEncoding,n,a]],When:n})},t.prototype.Zn=function(t,n,i,r,e,s){var o=Di(r)||-1,u=Di(s)||-1,a=-1===o&&-1===u,c=p();window;var h=this.ei(t,r,e,s);window;var f=p()-c;h.length>0&&i.push({Kind:Ot.MUT_INSERT,Args:[o,u,h],When:n},{Kind:Ot.TIMING,Args:[[Nt.Internal,Kt.Serialization,a?Ht.DomSnapshot:Ht.NodeEncoding,n,f]],When:n})},t.prototype.ei=function(t,n,i,r){var e=this;if(n&&Hi(n))return[];for(var s=[],o=this.Bn.tokenizeNode(t,n,r,i,function(t){if(1==t.nodeType){var n=t;if(n.shadowRoot&&e.Xn(n.shadowRoot),"SLOT"===t.nodeName){var i=Ui(t);(null==i?void 0:i.shadowRootType)===Te&&t.addEventListener("slotchange",Tt.wrap(function(n){var i;e.Hn.push(null!==(i=n.target)&&void 0!==i?i:t)}))}}e.jn(t,s)},this.Mn,function(t,n){switch(n){case Ai.Immediate:e.refreshElement(t);break;case Ai.Deferred:e.Nn.push(t);}}),u=0,a=s;u0){var e=n[n.length-1];if(e.Kind==Ot.MUT_REMOVE)return void e.Args.push(r)}n.push({Kind:Ot.MUT_REMOVE,Args:[r],When:t})},t.prototype.setUpIEWorkarounds=function(){var n=this;if(mr){var i=Object.getOwnPropertyDescriptor(Node.prototype,"textContent"),r=i&&i.set;if(!i||!r)throw new Error("Missing textContent setter -- not safe to record mutations.");Object.defineProperty(Element.prototype,"textContent",(0,e.__assign)((0,e.__assign)({},i),{set:function(t){try{for(var n=void 0;n=this.firstChild;)this.removeChild(n);if(null===t||""==t)return;var i=(this.ownerDocument||document).createTextNode(t);this.appendChild(i)}catch(n){r&&r.call(this,t)}}}))}this.si=new tr(t.ThrottleMax,t.ThrottleInterval,function(){return new Yi(function(){n.Fn=!0,n.tearDownIEWorkarounds()}).start()});var s=this.si.guard(function(t){var n=t.cssText;t.cssText=n});this.si.open(),this.oi=mt(CSSStyleDeclaration.prototype,"setProperty"),this.oi&&this.oi.afterSync(function(t){s(t.that)}),this.ui=mt(CSSStyleDeclaration.prototype,"removeProperty"),this.ui&&this.ui.afterSync(function(t){s(t.that)})},t.prototype.tearDownIEWorkarounds=function(){this.si&&this.si.close(),this.oi&&this.oi.disable(),this.ui&&this.ui.disable()},t.prototype.updateConsent=function(){var t=this;this.Wn&&Pe(this.Wn,function(n){return t.refreshElement(n)})},t.prototype.refreshElement=function(t){Di(t)&&this.Hn.push(t)},t.ThrottleMax=1024,t.ThrottleInterval=1e4,t}();function os(t){for(var n=new WeakMap,i=t;i;i=i.parentNode){if(n.has(i))return null;if(n.set(i,!0),11===i.nodeType)break}if(!i)return null;var r=Ui(i);return(null==r?void 0:r.shadowRootType)===Te&&(null==r?void 0:r.parent)?[r.parent.id,r.parent.node]:null}var us="navigation",as="resource",cs="paint",hs="measure",fs="mark",vs="layout-shift",ls="first-input",ds="largest-contentful-paint",ps="longtask",ws=function(){function t(t,n,i,r){var e=this;this._t=t,this.At=n,this.ai=r,this.ci=!1,this.hi=!1,this.fi=!1,this.vi=!1,this.li=!1,this.di=!1,this.pi=!1,this.wi=cn.DefaultOrgSettings.MaxPerfMarksPerPage,this.gi=0,this.mi=!1,this.yi=!1,this.bi=!1,this.Ei=!1,this.Si=0,this.xi=!1,this.qn=null,this.ki=[],this._i=new Yn(function(t){e.Ai=function(){t({timeRemaining:function(){return Number.POSITIVE_INFINITY},didTimeout:!1}),e.Ai=void 0}}),this.Ii=!1;var s=window.performance;s&&(this.fi=!0,s.timing&&(this.vi=!0),s.memory&&(this.di=!0),s.timeOrigin&&(this.pi=!0),"function"==typeof s.getEntries&&(this.li=!0),this.mi=gs(window,vs),this.yi=gs(window,ls),this.bi=gs(window,ds),this.Ei=gs(window,ps),this.T=i.createChild())}return t.prototype.initialize=function(t){var n=t.resourceUploader,i=t.recTimings,r=t.recImgs,e=t.maxPerfMarksPerPage;this.Ti=n,this.hi=i,this.ci=r,this.wi=e||cn.DefaultOrgSettings.MaxPerfMarksPerPage},t.prototype.start=function(){var t=this;this.gi=0;var n=window.performance;n&&(this._t.recording.inFrame||this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Performance,this.vi,zt.PerformanceEntries,this.li,zt.PerformanceMemory,this.di,zt.PerformanceObserver,!!window.PerformanceObserver,zt.PerformanceTimeOrigin,this.pi,zt.LayoutShift,this.mi,zt.FirstInput,this.yi,zt.LargestContentfulPaint,this.bi,zt.LongTask,this.Ei]}),this.Xn(),!this.qn&&n.addEventListener&&n.removeEventListener&&this.T&&this.T.add(n,"resourcetimingbufferfull",!0,function(){t.At.enqueue({Kind:Ot.RESOURCE_TIMING_BUFFER_FULL,Args:[]})}),this.Ci(),this.Pi())},t.prototype.ji=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(t){switch(t.label){case 0:if(!this.fi||!this.li||0==this.ki.length)return[2];if(this.Ii)return[2];this.Ii=!0,t.label=1;case 1:return t.trys.push([1,,3,4]),[4,this.Oi()];case 2:return t.sent(),[3,4];case 3:return this.Ii=!1,this.ki=[],[7];case 4:return[2];}})})},t.prototype.Mi=function(){return this.Ai?Yn.race([this._i,si(250,1e3)]):this._i},t.prototype.Oi=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t,n,i,r,s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t=0,n=0,i=this.ki,e.label=1;case 1:if(!(nt?[4,this.Mi()]:[3,4]):[3,6];case 3:a=e.sent(),t=p()+Math.max(a.timeRemaining(),15),e.label=4;case 4:this.Ki(u),e.label=5;case 5:return s++,[3,2];case 6:return n++,[3,1];case 7:return[2];}})})},t.prototype.onLoad=function(){this.xi||(this.xi=!0,this.vi&&(this.Ri(performance.timing),this.ji()))},t.prototype.tick=function(){this.Ci()},t.prototype.stop=function(){var t;this.T&&this.T.clear(),this.Ti=void 0;var n=[];this.qn?(this.qn.takeRecords&&(n=this.qn.takeRecords()),this.qn.disconnect()):window.performance&&window.performance.getEntries&&(n=window.performance.getEntries()),n.length>300&&(n=n.slice(0,300),this.At.enqueue({Kind:Ot.RESOURCE_TIMING_BUFFER_FULL,Args:[]})),this.Ci(),null===(t=this.Ai)||void 0===t||t.call(this),this.ki.push(n),this.ji()},t.prototype.Xn=function(){var t=this;if(!this.qn&&this.li&&window.PerformanceObserver){this.ki.push(performance.getEntries()),this.ji(),this.qn=new window.PerformanceObserver(function(n){var i=n.getEntries();t.ki.push(i),t.ji()});var n=[us,as,hs,fs];window.PerformancePaintTiming&&n.push(cs),this.mi&&n.push(vs),this.yi&&n.push(ls),this.bi&&n.push(ds),this.Ei&&n.push(ps),this.qn.observe({entryTypes:n})}},t.prototype.Ci=function(){if(this.di&&!this._t.recording.inFrame){var t=performance.memory;if(t){var n=t.usedJSHeapSize-this.Si;(0==this.Si||o.mathAbs(n/this.Si)>.2)&&(this.Hi(Qt.Memory,t,Vt.Memory),this.Si=t.usedJSHeapSize)}}},t.prototype.Pi=function(){var t={timeOrigin:d.timeOrigin};this.Hi(Qt.TimeOrigin,t,Vt.TimeOrigin)},t.prototype.Ki=function(t){switch(t.entryType){case us:this.Ni(t);break;case as:this.Li(t);break;case cs:this.Ui(t);break;case hs:this.Fi(t);break;case fs:this.Di(t);break;case vs:this.Bi(t);break;case ls:this.Wi(t);break;case ds:this.qi(t);break;case ps:this.Qi(t);}},t.prototype.Ri=function(t){this.Hi(Qt.Timing,t,Vt.Timing)},t.prototype.Ni=function(t){this.Hi(Qt.Navigation,t,Vt.Navigation,{name:us})},t.prototype.Li=function(t){if(this.hi){var n=t.initiatorType;(this.ci||"img"!==n&&"image"!==n)&&this.Hi(Qt.Resource,t,Vt.Resource,{name:n})}},t.prototype.Ui=function(t){this.Hi(Qt.Paint,t,Vt.Measure)},t.prototype.Di=function(t){this.Hi(Qt.Mark,t,Vt.Measure)},t.prototype.Fi=function(t){this.Hi(Qt.Measure,t,Vt.Measure)},t.prototype.Bi=function(t){this.Hi(Qt.LayoutShift,t,Vt.LayoutShift)},t.prototype.Wi=function(t){this.Hi(Qt.FirstInput,t,Vt.FirstInput)},t.prototype.qi=function(t){this.Hi(Qt.LargestContentfulPaint,t,Vt.LargestContentfulPaint)},t.prototype.Qi=function(t){this.Hi(Qt.LongTask,t,Vt.Measure)},t.prototype.Hi=function(t,n,i,r){if(void 0===r&&(r={}),!this.atLimit(t)){for(var e=[t],s=0,o=i;s=this.wi)return!0;this.gi++;}return!1},t}();function gs(t,n){var i,r;return(null!==(r=null===(i=t.PerformanceObserver)||void 0===i?void 0:i.supportedEntryTypes)&&void 0!==r?r:[]).indexOf(n)>-1}function ms(t){var n=0,i={id:n++,edges:{}};return t.split("\n").forEach(function(t){var r=t.trim();if(""!=r){if(0==r.indexOf("/")||r.lastIndexOf("/")==r.length-1)throw new Error("Leading and trailing slashes are not supported");var e=i,s=r.split("/");s.forEach(function(t,i){var r=t.trim();if(""===r)throw new Error("Empty elements are not allowed");if("**"!=r&&"*"!=r&&-1!=r.indexOf("*"))throw new Error("Embedded wildcards are not supported");var o=null;r in e.edges&&(o=e.edges[r]),o||(o={id:n++,edges:{}},e.edges[r]=o),i==s.length-1&&(o.term=!0),e=o})}}),i}var ys=ms("**");function bs(t,n,i){if(!js(i)){try{for(var r=[],e=0,s=i;e=n&&(v?e=void 0:(e="_fs_trimmed_values",v=!0)),f[f.length-1]--,e&&e!==cn.BlockedFieldValue&&s?f.push(o.objectKeys(e).length):c.pop();f[f.length-1]<=0;)f.pop(),c.pop();for(var u=0,a=r;u0&&l!==f.length-1)throw new Error("Property matcher depth out of sync")}return e})}catch(t){Tt.sendToBugsnag(t,"error")}return"[error serializing "+t.constructor.name+"]"}}var Es=function(){function t(t){this.zi=1;var n=[t];t.edges["**"]&&n.push(t.edges["**"]),this.$i=[n]}return t.prototype.Gi=function(){if(this.$i.length<=0)return[];var t=this.$i.length-1,n=this.$i[t];return"number"==typeof n?this.$i[t-1]:n},t.prototype.depth=function(){return this.zi},t.prototype.isRedacted=function(t){var n=this.Gi();return 0===n.length||t&&!n.some(function(t){return t.term})},t.prototype.push=function(t){var n;this.zi++;var i=this.Gi(),r=[];function e(n){n.edges["**"]&&(r.push(n.edges["**"],Ss(n)),e(n.edges["**"])),n.edges["*"]&&r.push(n.edges["*"]),n.edges[t]&&r.push(n.edges[t])}for(var s=0,o=i;s0&&this.zi--;var t=this.$i[this.$i.length-1];"number"==typeof t&&t>1?this.$i[this.$i.length-1]--:this.$i.pop()},t}();function Ss(t){var n=t.edges["**"];if(!n)throw new Error("Node must have double-wildcard edge.");return ot(t.edges,1)?{id:-n.id,edges:{"**":n}}:t}var xs,ks,_s,As=function(){function t(t){this.Xi=t,this.Ji=null}return t.prototype.disable=function(){this.Ji&&(this.Ji.disable(),this.Ji=null)},t.prototype.enable=function(t){var n,i=this,r=T(t),s=null===(n=null==r?void 0:r._w)||void 0===n?void 0:n.fetch;(s||t.fetch)&&(this.Ji=mt(s?r._w:t,"fetch"),this.Ji&&this.Ji.afterSync(function(t){var n=t.result;t.result=(0,e.__awaiter)(i,void 0,void 0,function(){return(0,e.__generator)(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.Zi(n,t.args[0],t.args[1])];case 1:case 2:return i.sent(),[3,3];case 3:return[2,n];}})})}))},t.prototype.Zi=function(t,n,i){return(0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u,a,c;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return r="GET",s="",a=!1,"string"==typeof n?s=n:"url"in n?(s=n.url,r=n.method,o=n.body,u=n.headers,a=!!n.signal):s=""+n,s?(i&&(r=i.method||r,u=Ds(i.headers),o=i.body||o,a=!!i.signal||a),c=this.Yi(t),a&&s.search(/\/(graphql|gql)/i)>-1?[4,Yn.race([c,ni(5e3)])]:[3,2]):[2];case 1:e.sent(),e.label=2;case 2:return this.Xi.startRequest(r,s,{body:function(){return o},headers:u},c),[2];}})})},t.prototype.Yi=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i,r,s;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return[4,t];case 1:if(n=e.sent(),i=n.headers,r=(i.get("content-type")||"default").split(";")[0],!(["default","text/plain","text/json","application/json"].indexOf(r)>-1))return[2,{status:n.status,data:{headers:i,body:null}}];s=null,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,n.clone().text()];case 3:return s=e.sent(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2,{status:n.status,data:{headers:i,body:s}}];}})})},t}(),Is=function(){function t(t){this.Xi=t,this.tr=new WeakMap}return t.prototype.disable=function(){this.nr&&(this.nr.disable(),this.nr=null),this.ir&&(this.ir.disable(),this.ir=null),this.rr&&(this.rr.disable(),this.rr=null)},t.prototype.er=function(t){var n=this.tr.get(t);if(n)return n;var i={};return this.tr.set(t,i),i},t.prototype.enable=function(t){var n,i,r,s,o=this,u=T(t),a=(null===(n=null==u?void 0:u._w)||void 0===n?void 0:n.XMLHttpRequest)||t.XMLHttpRequest;if(a){var c=a.prototype;this.nr=null===(i=mt(c,"open"))||void 0===i?void 0:i.before(function(t){var n=o.er(t.that);n.method=t.args[0],n.url=t.args[1]}),this.rr=null===(r=mt(c,"setRequestHeader"))||void 0===r?void 0:r.before(function(t){var n=t.that,i=t.args[0],r=t.args[1],e=o.er(n);e.headers||(e.headers=[]),e.headers.push([i,r])}),this.ir=null===(s=mt(c,"send"))||void 0===s?void 0:s.before(function(t){var n=t.that,i=t.args[0],r=o.er(n),s=r.url,u=r.method,a=r.headers;void 0!==s&&void 0!==u&&(o.tr["delete"](n),o.Xi.startRequest(u,s,{headers:Ds(a),body:i},function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n;return(0,e.__generator)(this,function(i){switch(i.label){case 0:return[4,new Yn(function(n){t.addEventListener("readystatechange",function(){t.readyState===XMLHttpRequest.DONE&&n()}),t.addEventListener("load",n),t.addEventListener("error",n)})];case 1:return i.sent(),n=function(t){if(t)return{forEach:function(n){for(var i,r=/([^:]*):\s+(.*)(?:\r\n|$)/g;i=r.exec(t);)n(i[2],i[1])}}}(t.getAllResponseHeaders()),[2,{status:t.status,data:{headers:n,body:function(){return"text"===t.responseType?t.responseText:t.response}}}];}})})}(n)))})}},t}(),Ts=/^data:/i,Cs=function(){function t(t,n){this._t=t,this.At=n,this.sr=!1,this.ur=new Ps(t,n),this.ar=new Is(this.ur),this.cr=new As(this.ur)}return t.prototype.isEnabled=function(){return this.sr},t.prototype.start=function(t){t.AjaxWatcher&&(this.sr||(this.sr=!0,this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Ajax,!0]}),this.ar.enable(this._t.window),this.cr.enable(this._t.window)))},t.prototype.stop=function(){this.sr&&(this.sr=!1,this.ar.disable(),this.cr.disable())},t.prototype.tick=function(){this.ur.tick()},t.prototype.setWatches=function(t){this.ur.setWatches(t)},t.prototype.initialize=function(t){this.ur.initialize(t)},t}(),Ps=function(){function t(t,n){this._t=t,this.At=n,this.hr=[],this.vr={},this.lr={},this.dr=[],this.pr=0;var i=cn.DefaultOrgSettings;this.initialize({requests:i.HttpRequestHeadersAllowlist,responses:i.HttpResponseHeadersAllowlist,maxAjaxPayloadLength:i.MaxAjaxPayloadLength})}return t.prototype.wr=function(t){for(var n=!1,i=!1,r=[],e=[],s=0,o=this.hr;s-1}function Os(t,n,i){return[t.length,Ns(t,n,i)]}function Ms(t,n,i){var r=void 0;return js(n)||(r=bs(t,i,n)),[Hs(t),r]}function Ks(t,n){var i=t.byteLength,r=void 0;return js(n)||(r="[ArrayBuffer]"),[i,r]}function Rs(t,n,i){return(0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:if(s=(r=t).size,js(n))return[2,[s,void 0]];switch(r.type){case"application/json":case"application/vnd.api+json":case"text/plain":return[3,1];}return[3,4];case 1:return e.trys.push([1,3,,4]),[4,r.text()["catch"](function(t){Tt.sendToBugsnag(t,"warning")})];case 2:return(o=e.sent())&&(u=Ns(o,n,i))?[2,[s,u]]:[3,4];case 3:return a=e.sent(),Tt.sendToBugsnag(a,"warning"),[3,4];case 4:return[2,[s,"[Blob]"]];}})})}function Hs(t){try{return o.jsonStringify(t).length}catch(t){}return 0}function Ns(t,n,i){if(!js(n))try{return bs(o.jsonParse(t),i,n)}catch(r){return n.length>0&&n.every(function(t){return!0===t})?t.slice(0,i):void 0}}function Ls(t,n){switch(t){default:case Zt.Elide:return!1;case Zt.Record:return!0;case Zt.Allowlist:try{return ms(n)}catch(t){return!1}}}function Us(t,n,i,r){var s;return(0,e.__awaiter)(this,void 0,Yn,function(){var o,u,a,c,h,f,v;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return o="",null===(s=r.headers)||void 0===s||s.forEach(function(n,i){var r=i.toLowerCase(),e=t[r];o+=r+(e?": "+n:"")+"\r\n"}),"function"!=typeof(u=null==r?void 0:r.body)?[3,2]:[4,u()];case 1:return a=e.sent(),[3,3];case 2:a=u,e.label=3;case 3:return[4,Fs(n,a,i)];case 4:return c=e.sent(),h=c[0],f=c[1],v=0!==h||f?qt.NotEmpty:qt.Unknown,[2,{headers:o,text:f,size:h,legibility:v}];}})})}function Fs(t,n,i){return void 0===i&&(i=cn.DefaultOrgSettings.MaxAjaxPayloadLength),(0,e.__awaiter)(this,void 0,Yn,function(){var r;return(0,e.__generator)(this,function(e){if(null==n)return[2,[0,void 0]];switch(typeof n){default:return[2,[-1,js(t)?void 0:"[unknown]"]];case"string":return[2,Os(n,t,i)];case"object":switch(r=n.constructor){case Object:default:return[2,Ms(n,t,i)];case Blob:return[2,Rs(n,t,i)];case ArrayBuffer:return[2,Ks(n,t)];case Document:case FormData:case URLSearchParams:case ReadableStream:return[2,[-1,js(t)?void 0:""+r.name]];}}return[2]})})}function Ds(t){return t?tt(t)?{forEach:function(n){for(var i=0,r=t;i-1){if(n.unshift(e),r instanceof CSSStyleSheet)break;i=r}else Tt.sendToBugsnag("Could not find intermediate rule in parent","warning")}return n},t.prototype.Wr=function(t,n){for(var i=0;i=t?(this.oe-=t,[!0,0]):[!1,(t-this.oe)/this.ne]},t}())(2,2e5),ho=new Set(["measureText","getImageData","getError","getTransform","isContextLost","isEnabled","isFramebuffer","isProgram","isRenderbuffer","isShader","isTexture"]),fo=new Set(["fillText"]),vo=function(){function t(t,n,i,r){this.At=n,this.Ti=i,this.ai=r,this.ue=dn.CaptureCanvasOps,this.ae=[],this.ce=[],this.he=new WeakMap,this.fe=new WeakMap,this.ve=new Set,this.le=0,this.de=new WeakMap,this.pe=!1,this.we=new WeakMap,this.ge=new Set,this.me=new WeakMap,this.ye=1,this.be=new WeakMap,this.Ee=1,this.Se=0,this.xe=!1}return t.prototype.start=function(t){var n,i=this;if(t.CanvasWatcherMode&&(this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.CanvasWatcherEnabled,!0]}),this.pe=!0,this.ue=null!==(n=t.CanvasWatcherMode)&&void 0!==n?n:dn.CaptureCanvasOps,this.Ji("2d",CanvasRenderingContext2D),this.Ji("webgl",WebGLRenderingContext),this.ue===dn.ScreenshotCanvas)){if(!HTMLCanvasElement.prototype.toDataURL)return;this.le=setInterval(function(){return i.screenshotConnectedCanvases()},1e3)}},t.prototype.ke=function(t,n){return"object"!=typeof n?[void 0,0]:(this.be.has(n)||this.be.set(n,[t,this.Ee++]),this.be.get(n))},t.prototype.Ji=function(t,n){var i=this;if(n)for(var r=n.prototype,e=function(e){if(ho.has(e))return"continue";var o=Object.getOwnPropertyDescriptor(r,e);if("function"==typeof(null==o?void 0:o.value)){var u=mt(r,e);u&&(u.afterSync(function(n){return i._e(t,e,n.that,n.args,n.result)}),s.ae.push(u))}else"function"==typeof(null==o?void 0:o.set)&&s.ce.push(yt(n,e,s.Ae(t,e)))},s=this,o=0,u=Object.keys(r);o0){var o=n;if(!o){var u=t instanceof HTMLCanvasElement?Ui(t):void 0,a=t instanceof HTMLCanvasElement&&St(t);o=null!==(r=null==u?void 0:u.mask)&&void 0!==r?r:a}this.Pe(t,e,s,o)}return e}},t.prototype.je=function(t,n,i,r,e,s,o){var u;switch(typeof r){case"string":return e?Ci(r):r;case"number":case"boolean":case"bigint":return r;case"undefined":return{undef:!0};case"object":if(!r)return r;try{o.set(r,!0)}catch(t){}var a=null===(u=Object.getPrototypeOf(r))||void 0===u?void 0:u.constructor,c=(null==a?void 0:a.name)||function(t){var n;if(t){var i=t.toString(),r=po.exec(i);return r||(r=wo.exec(i)),null===(n=null==r?void 0:r[1])||void 0===n?void 0:n.trim()}}(a),h={ctor:c};if(r instanceof Node&&(l=Di(r)))return h.id=l,h;switch(c){case"Array":return this.Se+=r.length,this.Oe(t,n,i,r,e,s,o);case"CanvasGradient":return h;case"HTMLImageElement":var f=he(r.src,{source:"dom",type:"canvas"});return this.ai.record(f),h.src=f,h;case"HTMLCanvasElement":var v=r,l=this.flush(v,e);return h.srcId=l,h;}if(function(t){var n;return!!(null===(n=Object.prototype.toString.call(t))||void 0===n?void 0:n.match(lo))}(r))return this.be.has(r)?this.Me(r,h,e):(h.typedArray="["+r.toString()+"]",this.Se+=r.length,h);if("object"==typeof r&&this.be.has(r))return this.Me(r,h,e);if(r instanceof WebGLBuffer||r instanceof WebGLTexture){var d=void 0;switch(s){case"bindTexture":d=this.Ke(t,"createTexture",n,i,r);break;case"bindBuffer":d=this.Ke(t,"createBuffer",n,i,r);}if(void 0!==d)return this.Me(r,h,e)}var p=r;for(var w in h.obj={},p){try{switch(typeof p[w]){case"function":continue;case"object":if(p[w]&&o.has(p[w]))continue;}}catch(t){continue}++this.Se,h.obj[w]=this.je(t,n,i,p[w],e,s,o)}return h;default:return null;}},t.prototype.Me=function(t,n,i){var r=this.be.get(t),e=r[0],s=r[1];return this.flush(e,i),n.ref=s,delete n.ctor,n},t.prototype.Ke=function(t,n,i,r,e){var s=this.ke(i,e),o=(s[0],s[1]);return this.Re(r,[[t,ln.Function,n,[],o]]),o},t.prototype.Oe=function(t,n,i,r,e,s,o){var u=this;return void 0===o&&(o=new WeakMap),this.Se+=r.length+1,r.map(function(r){return u.je(t,n,i,r,e,s,o)})},t.prototype.Pe=function(t,n,i,r){var e=this;if(void 0===r&&(r=!1),!this.xe){var s=i.map(function(i){var s=i[0],o=i[1],u=i[2],a=i[3],c=i[4];return[s,o,u,e.Oe(s,t,n,a,r&&fo.has(u),u),c]});if(!this.he.has(t)&&(this.he.set(t,!0),i.some(function(t){return"2d"===t[0]}))){var o=this.He(t);if(o.length>0)return o.push.apply(o,s),void this.Re(n,o)}this.Re(n,s)}},t.prototype.Re=function(t,n){if(!this.xe){var i=co.hasCapacityFor(this.Se),r=i[0];i[1],this.Se=0,r?this.At.enqueue({Kind:Ot.CANVAS,Args:[t,n]}):this.xe=!0}},t.prototype.He=function(t){var n=t.getContext("2d");if(!n)return[];var i=[];if((n instanceof CanvasRenderingContext2D||n instanceof OffscreenCanvasRenderingContext2D)&&"function"==typeof n.getTransform){var r=n.getTransform();if(!r.isIdentity){var e=r.a,s=r.b,o=r.c,u=r.d,a=r.e,c=r.f;i.push(["2d",ln.Function,"transform",[e,s,o,u,a,c],-1])}}return i},t.prototype.Ne=function(t,n){t instanceof HTMLCanvasElement&&(this.ue===dn.ScreenshotCanvas?(this.fe.set(t,!0),this.ve.add(t)):(this.ge.add(t),this.Ie(t,n)))},t.prototype._e=function(t,n,i,r,e){for(var s=[],o=0;o))/m,mo=/^(eval@)?(\[native code\])?$/;function yo(t){if(!t||"string"!=typeof t.stack)return[];var n=t;return n.stack.match(go)?n.stack.split("\n").filter(function(t){return!!t.match(go)}).map(function(t){var n=t;n.indexOf("(eval ")>-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var i=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/\(native code\)/,"").split(/\s+/).slice(1),r=Eo(i.pop());return bo(i.join(" "),["eval",""].indexOf(r[0])>-1?"":r[0],r[1],r[2])}):n.stack.split("\n").filter(function(t){return!t.match(mo)}).map(function(t){var n=t;if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return[n,"",-1,-1];var i=n.split("@"),r=Eo(i.pop());return bo(i.join("@"),r[0],r[1],r[2])})}function bo(t,n,i,r){return[t||"",n||"",parseInt(i||"-1",10),parseInt(r||"-1",10)]}function Eo(t){if(!t||-1===t.indexOf(":"))return["","",""];var n=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(t.replace(/[()]/g,""));return n?[n[1]||"",n[2]||"",n[3]||""]:["","",""]}var So,xo,ko=["log","info","warn","error","debug","_fs_debug","assert","trace"],_o=ko.filter(function(t){return!/debug/.test(t)}),Ao=function(t,n,i){void 0===i&&(i=!0);var r=Qi(t,n);return i?be(r):r},Io=function(){function t(t,n,i){this.At=n,this.sr=!1,this.Fe=!1,this.De=0,this.Dt=[],this.Be=cn.DefaultOrgSettings.MaxConsoleLogPerPage,this.Dn=t.window,this.T=i.createChild()}return t.prototype.initializeMaxLogsPerPage=function(t){this.Be=t||cn.DefaultOrgSettings.MaxConsoleLogPerPage},t.prototype.We=function(){return"\"[received more than "+this.Be+" messages]\""},t.prototype.start=function(t){var n=this;if(t.ConsoleWatcher&&(this.T.add(this.Dn,"error",!0,function(t){return n.addError(t)}),this.T.add(this.Dn,"unhandledrejection",!0,function(t){n.addError({error:t.reason,message:"Uncaught (in promise)",filename:"",lineno:0,colno:0})},!0),!this.sr))if(this.sr=!0,this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Console,!0]}),this.Dn.console)for(var i=function(t){var i=mt(r.Dn.console,t);if(!i)return"continue";"assert"===t?i.before(function(i){var r=i.args;r[0]||n.qe(t,Array.prototype.slice.apply(r,[1]))}):i.before(function(i){var r=i.args;return n.qe(t,r)}),r.Dt.push(i)},r=this,e=0,s=_o;e5e5)return!1;var i=Ws(Bs(t));return!!i&&(!!("style"===ki(t)&&i.length>0&&Xs.test(n))||function(t){var n;try{if((null===(n=t.classList)||void 0===n?void 0:n.contains("fs-css-in-js"))||t.hasAttribute("data-fela-type")||t.hasAttribute("data-aphrodite"))return!0}catch(t){Tt.sendToBugsnag(t,"error")}return!1}(t))}(s)&&(null==n||n.push(function(){u.snapshotEl(s),"link"===ki(s)&&i.T.add(s,"load",!1,function(){u.snapshotEl(s)})}));break;case"CANVAS":this._t.measurer.requestMeasureTask(ii.Low,function(){return i.us[So.Canvas].flush(t)});break;default:t.nodeName&&"#"!==t.nodeName[0]&&t.nodeName.indexOf("-")>-1&&this.us[So.CustomElement].onCustomNodeVisited(t);}if("scrollLeft"in t&&"scrollTop"in t){var a=t;this._t.measurer.requestMeasureTask(ii.Low,function(){0==a.scrollLeft&&0==a.scrollTop||i.Ps(a)})}null==n||n.push(function(){i._t.measurer.requestMeasureTask(ii.Low,function(){i.us[So.Animation].snapshot(t)})})},t.prototype.On=function(t){var n,i=t.node,r=ki(t.node);if("iframe"===r)this.$e(t.node);else if("function"==typeof i.getElementsByTagName)for(var e=null!==(n=i.getElementsByTagName("iframe"))&&void 0!==n?n:[],s=0;s-1&&s.push(i.href),("img"===t||"source"===t)&&(e=i.srcset)&&null==e.match(/^\s*$/))for(var c=0,h=e.split(",");c0)return i[0]}}return t.target}function Mo(t){var n;return!!(null!==(n=t._fs_trust_event)&&void 0!==n&&n||t.isTrusted)}var Ko,Ro=function(){function t(t,n){this.Vr=t,this.Gs=n,this.Xs=[],this.Js=0}return t.prototype.add=function(t){this.Xs.length>0&&this.Xs[this.Xs.length-1].When===t.When&&this.Xs.pop(),0===this.Xs.length?(this.Vr.push(t),this.Js=t.When):t.When>this.Js&&(this.Js=t.When),this.Xs.push(t)},t.prototype.finish=function(t,n){void 0===n&&(n=[]);var i=this.Xs.length;if(i<=1)return!1;for(var r=[],s=this.Xs[0].When,o=this.Xs[i-1].When,u=o-s!=0?o-s:1,a=0;a0&&this.Zs--,Lo(this.Wn.prev)},t.prototype.shift=function(){return this.Zs>0&&this.Zs--,Lo(this.Wn.next)},t}();function No(t,n){var i=t.next;n.next=i,n.prev=t,t.next=i.prev=n}function Lo(t){var n=t.prev,i=t.next;return n.next=i,i.prev=n,t.value}!function(t){t[t.rageWindowMillis=2e3]="rageWindowMillis",t[t.defaultRageThreshold=5]="defaultRageThreshold",t[t.rageThresholdIfPageChanges=8]="rageThresholdIfPageChanges",t[t.thresholdChangeQuiescenceMillis=2e3]="thresholdChangeQuiescenceMillis"}(Ko||(Ko={}));var Uo=function(){function t(t,n){var i,r;void 0===n&&(n=w),this._t=t,this.Ys=n,this.no=new Ho,this.io=Ko.defaultRageThreshold,this.ro=-1,this.eo=new WeakMap;var e=t.recording.pageResponse();if(!e)throw new Error("Attempt to construct EasyBake before rec/page response is set.");for(var s=[".fs-ignore-rage-clicks",".fs-ignore-rage-clicks *"],o=0,u=null!==(r=null===(i=e.BehaviorSignalSettings)||void 0===i?void 0:i.ElementBlocks)&&void 0!==r?r:[];o-1&&(s.push(a.Selector),s.push(a.Selector+" *"))}var c=s.join(", ");Be(c)?this.so=[c]:this.so=s}return t.prototype.oo=function(t){var n=this.eo.get(t);if(void 0!==n)return n;for(var i=0,r=this.so;i=this.io){var a=this._t.recording.getCurrentSessionURL,c={eventStartTimeStamp:this.no.first(),eventEndTimeStamp:i,eventReplayUrlAtStart:a(),eventReplayUrlAtCurrentTime:a(!0)};this.dispatchRageClickEvent(r,c),this.io=Ko.defaultRageThreshold,this.no=new Ho}}}}}},t.prototype.dispatchRageClickEvent=function(t,n){var i,r="fullstory/rageclick";try{i=new CustomEvent(r,{detail:n,bubbles:!0,cancelable:!0})}catch(t){(i=document.createEvent("customevent")).initCustomEvent(r,!0,!0,n)}o.setWindowTimeout(window,Tt.wrap(function(){t.dispatchEvent(i)}),0)},t}(),Fo=function(){function t(t){this._t=t,this.uo=this._t.time.wallTime(),this.ao=!1}return t.prototype.getLastUserAcitivityTS=function(){return this.uo},t.prototype.getMsSinceLastUserAcivity=function(){return o.mathFloor(this._t.time.wallTime()-this.uo)},t.prototype.resetUserActivity=function(){this.uo=this._t.time.wallTime()},t.prototype.isHibernating=function(){return this.ao},t.prototype.setHibernating=function(){this.ao=!0},t}(),Do=function(){function t(t,n,i,r){void 0===r&&(r=Yi),this._t=t,this.co=n,this.At=i,this.ho=!1,this.fo=!1,this.vo=cn.HeartbeatInitial,this.lo=cn.PageInactivityTimeout,this.heartbeatTimeout=new r(this["do"].bind(this)),this.hibernationTimeout=new r(this.po.bind(this),this.lo)}return t.prototype.getUserActivityModel=function(){return this.co},t.prototype.manualHibernateCheck=function(){this.co.isHibernating()||this.co.getMsSinceLastUserAcivity()>=cn.PageInactivityTimeout+5e3&&this.po()},t.prototype.scanEvents=function(t){if(!this.ho){this.manualHibernateCheck();for(var n=!1,i=0,r=t;icn.HeartbeatMax&&(this.vo=cn.HeartbeatMax),this.heartbeatTimeout.start(this.vo)},t.prototype.po=function(){if(!this.co.isHibernating()){var t=!1;this.co.getMsSinceLastUserAcivity()<=2*cn.PageInactivityTimeout?this.At.enqueue({Kind:Ot.UNLOAD,Args:[Wt.Hibernation]}):t=!0;try{this.ho=!0,this.co.setHibernating(),this.shutdown(),this.At.onHibernate(t)}finally{this.ho=!1}}},t.prototype.wo=function(){this.fo||(this.fo=!0,this._t.recording.splitPage(Wt.Hibernation))},t}(),Bo=function(){function t(t,n,i,r,e,s){void 0===r&&(r=function(){return[]}),void 0===e&&(e=Zi),void 0===s&&(s=Yi),this._t=t,this.mo=n,this.yo=r,this.bo=e,this.Eo=0,this.So=[],this.xo=!1,this.ko=!1,this._o=0,this.Ao=-1,this.Io=!1,this.Qt=[],this.To=new this.bo(cn.CurveSamplingInterval),this.Co=new this.bo(cn.MutationProcessingInterval),i&&(this.Po=new Do(this._t,i,this,s))}return t.prototype.startPipeline=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r=this;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return this.ko||this.xo?[2]:(this.xo=!0,t.frameId&&(this.Eo=t.frameId),t.parentIds&&(this.So=t.parentIds),i=!0,[4,ei()]);case 1:return e.sent(),this.processEvents(),[4,ei()];case 2:return e.sent(),window,this.Co.start(function(){window,r.processEvents(),window}),this.To.start(function(){window,r.processEvents(i),window}),null===(n=this.Po)||void 0===n||n.start(),this.mo.startPipeline(t),window,[2];}})})},t.prototype.enableEasyBake=function(){this.jo=new Uo(this._t)},t.prototype.enqueueSimultaneousEventsIn=function(t){if(0===this._o){var n=this._t.time.now();this.Ao=n>this.Ao?n:this.Ao}try{return this._o++,t(this.Ao)}finally{this._o--,this._o<0&&(this._o=0)}},t.prototype.enqueue=function(t){var n=this._o>0?this.Ao:this._t.time.now();this.Oo(n,t),Ji.checkForBrokenSchedulers()},t.prototype.Oo=function(t,n){var i;if(!this.ko){var r=t;r0){var n=t;n.When=this.Qt[0].When,this.Qt.unshift(n)}else this.enqueue(t)},t.prototype.addUnload=function(t){this.Io||(this.Io=!0,this.enqueue({Kind:Ot.UNLOAD,Args:[t]}),this.singSwanSong(t))},t.prototype.shutdown=function(t){this.addUnload(t),this.Mo(),this.ko=!0,this.Ko()},t.prototype.Mo=function(){this.processEvents(),this.mo.flush()},t.prototype.singSwanSong=function(t){this.ko||(window,this.Mo(),t===Wt.Hidden&&this.Io||this.mo.singSwanSong(),window)},t.prototype.rebaseIframe=function(t,n){for(var i=Math.max(0,n),r=this._t.time.startTime(),e=function(n){var e=r+n-t;return e>=i?e:i},s=0,o=this.Qt;s0){var f=h[h.length-1].Args[2];f&&(h[0].Args[9]=f)}}for(var v in s)s[l=parseInt(v,10)].finish(Ot.SCROLL_LAYOUT_CURVE,[l]);for(var v in o)o[l=parseInt(v,10)].finish(Ot.SCROLL_VISUAL_OFFSET_CURVE,[l]);for(var v in e){var l;e[l=parseInt(v,10)].finish(Ot.TOUCHMOVE_CURVE,[l])}return n&&n.finish(Ot.RESIZE_VISUAL_CURVE),i}(n);t||(i=i.concat(this.yo())),this.Ro(i),this.sendEvents(this._t.recording.pageSignature(),i)}},t.prototype.sendEvents=function(t,n){var i;0!=n.length&&(null===(i=this.Po)||void 0===i||i.scanEvents(n),this.mo.enqueueEvents(t,n))},t.prototype.onHibernate=function(t){t||this.Mo(),this.mo.singSwanSong(),this.mo.stopPipeline()},t.prototype.Ro=function(t){if(this.Eo)for(var n=this.So,i=n&&n.length>0,r=0;r>>0).toString(16)).slice(-8);return t},t}();function qo(t){var n=new Wo(1);return n.writeAscii(t),n.sumAsHex()}function Qo(t){var n=new Uint8Array(t);return Vo(String.fromCharCode.apply(null,n))}function Vo(t){var n;return(null!==(n=window.btoa)&&void 0!==n?n:zo)(t).replace(/\+/g,"-").replace(/\//g,"_")}function zo(t){for(var n=String(t),i=[],r=0,e=0,s=0,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.charAt(0|s)||(o="=",s%1);i.push(o.charAt(63&r>>8-s%1*8))){if((e=n.charCodeAt(s+=3/4))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|e}return i.join("")}function $o(t,n,i,r){return void 0===r&&(r=new Wo),(0,e.__awaiter)(this,void 0,Yn,function(){var s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:s=t.now(),o=i.byteLength,u=0,e.label=1;case 1:return u25?[4,n(100)]:[3,3]:[3,5];case 2:e.sent(),s=t.now(),e.label=3;case 3:a=new Uint8Array(i,u,Math.min(o-u,1e4)),r.write(a),e.label=4;case 4:return u+=1e4,[3,1];case 5:return[2,{hash:r.sum(),hasher:r}];}})})}var Go=6e6,Xo="resource-uploader",Jo=function(){function t(t,n,i,r,e){void 0===r&&(r=window.FormData),void 0===e&&(e=Yi),this._t=t,this.At=n,this.Ho=i,this.No=r,this.Lo=e,this.pe={},this.Uo={},this.Fo=!1,this.Do=[]}return t.prototype.init=function(){this.No&&this.Bo()["catch"](function(t){Tt.sendToBugsnag(t,"error")})},t.prototype.Bo=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t,n,i,r,s,o,u,a,c,h,f,v,l,d,p,w,g,m,y,b,E,S,x,k,_;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t=this._t.options.orgId,e.label=1;case 1:return[4,this.Wo()];case 2:for(n=e.sent(),i={fsnv:{},sha1:{}},r={},s=0,o=n;sGo){var r=he(t,{source:"log",type:"bugsnag"});return Tt.sendToBugsnag("Size of blob resource exceeds limit","warning",{url:r,MaxResourceSizeBytes:Go}),void i(null)}(function(t){var n=ti(),i=n.resolve,r=n.promise,e=new FileReader;return e.readAsArrayBuffer(t),e.onload=function(){i(e.result)},e.onerror=function(t){Tt.sendToBugsnag(t,"error"),i(null)},r})(n).then(function(t){i(t?{buffer:t,blob:n,contentType:n.type}:null)})},e.send(),r)}function Yo(t,n){var i,r;return(0,e.__awaiter)(this,void 0,Yn,function(){var s;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return s=t.window,(null===(r=null===(i=s.crypto)||void 0===i?void 0:i.subtle)||void 0===r?void 0:r.digest)?[4,s.crypto.subtle.digest({name:"sha-1"},n)]:[3,2];case 1:return[2,{hash:Qo(e.sent()),algorithm:"sha1"}];case 2:return[4,$o(t.time,ni,n)];case 3:return[2,{hash:e.sent().hash,algorithm:"fsnv"}];}})})}var tu=/^data:([^;,]*)(;?charset=[^;]+)?(?:;base64)?$/i,nu="Could not parse data url",iu=function(t,n,i){this.name="ProtocolError",this.message=n,this.status=t,this.data=i};function ru(t){return t>=400&&502!==t||202==t||206==t}var eu=function(){function t(t){this.Vo=0,this.zo=t.options.scheme,this.$o=t.options.cdnHost,this._t=t}return t.prototype.page=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/page",vt(t))];case 1:return[2,pt(n.sent().text)];}})})},t.prototype.settings=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n;return(0,e.__generator)(this,function(i){return n=t.previewMode||t.fallback?vu(this._t):this.$o,[2,fu(this.zo,n,t)]})})},t.prototype.bundle=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return[4,ei()];case 1:return e.sent(),window,i=vt(t.bundle),this.Vo+=i.length,this.Vo,window,i.length>2e6?[4,ei()]:[3,3];case 2:e.sent(),e.label=3;case 3:return window,r=ou(t.bundle.Seq,t),[4,uu(this.zo,null!==(n=t.recHost)&&void 0!==n?n:vu(this._t),r,i)];case 4:return s=e.sent().text,o=pt(s),window,[2,[this.Vo,o]];}})})},t.prototype.bundleBeacon=function(t){var n;return hu(this.zo,null!==(n=t.recHost)&&void 0!==n?n:vu(this._t),t)},t.prototype.exponentialBackoffMs=function(t,n){var i=o.mathMin(cn.BackoffMax,5e3*o.mathPow(2,t));return n?i+.25*o.mathRandom()*i:i},t}(),su=function(){function t(t){this.zo=t.options.scheme,this._t=t}return t.prototype.uploadResource=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/uploadResource",t)];case 1:return[2,n.sent().text];}})})},t.prototype.queryResources=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/queryResources",vt(t))];case 1:return[2,pt(n.sent().text)];}})})},t}();function ou(t,n){var i="/rec/bundle"+("v2"===n.version?"/v2":"")+"?OrgId="+n.orgId+"&UserId="+n.userId+"&SessionId="+n.sessionId+"&PageId="+n.pageId+"&Seq="+t;return null!=n.serverPageStart&&(i+="&PageStart="+n.serverPageStart),null!=n.serverBundleTime&&(i+="&PrevBundleTime="+n.serverBundleTime),null!=n.lastUserActivity&&(i+="&LastActivity="+n.lastUserActivity),n.isNewSession&&(i+="&IsNewSession=true"),null!=n.deltaT&&(i+="&DeltaT="+n.deltaT),i}function uu(t,n,i,r){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(e){return[2,cu("POST",t,n,lu(i),!0,r)]})})}function au(t,n,i){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(r){return[2,cu("GET",t,n,lu(i),!1)]})})}function cu(t,n,i,r,s,o){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(e){return[2,new Yn(function(e,u){var a="//"+i+r,c=!1,h=new XMLHttpRequest,f=("withCredentials"in h);jt(f,"XHR missing CORS support"),f&&(h.onreadystatechange=function(){if(4==h.readyState){if(c)return;c=!0;try{var t={text:h.responseText};if(200==h.status)return void e(t);var n=void 0;try{n=pt(t.text)}catch(t){}u(new iu(h.status,t.text,n))}catch(t){Tt.sendToBugsnag(t,"error"),u(t)}}},h.open(t,n+a,!0),h.withCredentials=s,o&&"function"!=typeof o.append&&h.setRequestHeader("Content-Type","text/plain"),h.send(o))})]})})}function hu(t,n,i){if("function"==typeof navigator.sendBeacon){var r=t+"//"+n+ou(i.bundle.Seq,i)+"&SkipResponseBody=true",e=vt(i.bundle);try{return navigator.sendBeacon.bind(navigator)(r,e)}catch(t){}}return!1}function fu(t,n,i){var r;return(0,e.__awaiter)(this,void 0,Yn,function(){var s,o;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return s=null!==(r=i.version)&&void 0!==r?r:"v1",o=i.previewMode?"?previewMode=true":"",[4,au(t,n,"/s/settings/"+i.orgId+"/"+s+"/web"+o)];case 1:return[2,pt(e.sent().text)];}})})}function vu(t){var n,i=null===(n=t.recording.pageResponse())||void 0===n?void 0:n.GCLBSubdomain,r=t.options.recHost;return i&&K(r)?r.replace(/^rs\./,i+"."):r}function lu(t){if(!window.Zone)return t;var n="?";return t.indexOf(n)>-1&&(n="&"),""+t+n+"ngsw-bypass=true"}var du,pu=function(){function t(t,n,i){void 0===i&&(i=new wu),this._t=t,this.Vr=n,this.Go=i}return t.prototype.initialize=function(t){var n;if(t){this.Xo(t);var i=null===(n=this._t.window.location)||void 0===n?void 0:n.href;this.onNavigate(i)}},t.prototype.onNavigate=function(t){return!!this.Go.matches(t)&&(this.Vr.enqueue({Kind:Ot.KEEP_URL,Args:[this.Jo(t)]}),!0)},t.prototype.onClick=function(t){var n;return!!(null===(n=null==t?void 0:t.watchKind)||void 0===n?void 0:n.has(_i.Keep))&&(this.Vr.enqueue({Kind:Ot.KEEP_ELEMENT,Args:[t.id]}),!0)},t.prototype.urlMatches=function(t){return this.Go.matches(t)},t.prototype.Xo=function(t){this.Go.setRules(t)},t.prototype.Jo=function(t){return he(t,{source:"page",type:"base"})},t}(),wu=function(){function t(){this.Zo=null}return t.prototype.setRules=function(t){var n=t.map(function(t){return t.Regex}).filter(this.Yo);n.length>0&&(this.Zo=this.tu(n))},t.prototype.matches=function(t){return!!this.Zo&&this.Zo.test(t)},t.prototype.Yo=function(t){try{return new RegExp(t),!0}catch(n){return Tt.sendToBugsnag("Browser rejected UrlKeep.Regex","error",{expr:t,error:n.toString()}),!1}},t.prototype.tu=function(t){try{return new RegExp("("+t.join(")|(")+")","i")}catch(n){return Tt.sendToBugsnag("Browser rejected joining UrlKeep.Regexs","error",{exprs:t,error:n.toString()}),null}},t}(),gu=function(t){var n=(void 0===t?{}:t).wnd,i=void 0===n?window:n;!function(t,n,i,r,e,s,o,u){var a,c;function h(t){var n,i=[];function r(){n&&(i.forEach(function(t){var i;try{i=t[n[0]]&&t[n[0]](n[1])}catch(n){return void(t[3]&&t[3](n))}i&&i.then?i.then(t[2],t[3]):t[2]&&t[2](i)}),i.length=0)}function e(t){return function(i){n||(n=[t,i],r())}}return t(e(0),e(1)),{then:function(t,n){return h(function(e,s){i.push([t,n,e,s]),r()})}}}(!(i in t)||(t.console&&t.console.log&&t.console.log("FullStory namespace conflict. Please set window[\"_fs_namespace\"]."),0))&&(u=t[i]=function(){var t=function(t,i,r){function e(e,s){n(t,i,r,e,s)}var s=/Async$/;return s.test(t)?(t=t.replace(s,""),"function"==typeof Promise?new Promise(e):h(e)):n(t,i,r)};function n(n,i,r,e,s){return t._api?t._api(n,i,r,e,s):(t.q&&t.q.push([n,i,r,e,s]),null)}return t.q=[],t}(),function(){function t(){}function n(t,n,i){u("setProperties",{type:t,properties:n},i)}function i(t,i){n("user",t,i)}function r(t,n,r){i({uid:t},r),n&&i(n,r)}u.identify=r,u.setUserVars=i,u.identifyAccount=t,u.clearUserCookie=t,u.setVars=n,u.event=function(t,n,i){u("trackEvent",{name:t,properties:n},i)},u.anonymize=function(){r(!1)},u.shutdown=function(){u("shutdown")},u.restart=function(){u("restart")},u.log=function(t,n){u("log",{level:t,msg:n})},u.consent=function(t){u("setIdentity",{consent:!arguments.length||t})}}(),a="fetch",c="XMLHttpRequest",u._w={},u._w[c]=t[c],u._w[a]=t[a],t[a]&&(t[a]=function(){return u._w[a].apply(this,arguments)}),u._v="2.0.0")}(i,i.document,i._fs_namespace,0,0,i._fs_script)};function mu(t,n){if(t&&t.postMessage)try{t.postMessage(function(t){var n;return vt(((n={}).__fs=t,n))}(n),"*")}catch(t){Ut("postMessage",t)}}function yu(t){try{var n=pt(t);if("__fs"in n)return n.__fs}catch(t){}return[du.Unknown]}function bu(t,n,i,r){var e=W(t);if(!e)return!1;try{e.send(n,i,r)}catch(t){e.send(n,i)}return!0}!function(t){t.EndPreviewMode="EndPreviewMode",t.EvtBundle="EvtBundle",t.GreetFrame="GreetFrame",t.InitFrameMobile="InitFrameMobile",t.RequestFrameId="RequestFrameId",t.RestartFrame="RestartFrame",t.SetConsent="SetConsent",t.SetFrameId="SetFrameId",t.ShutdownFrame="ShutdownFrame",t.Unknown="Unknown"}(du||(du={}));var Eu=new RegExp(/^\s+$/),Su=/^fb\d{18}$/,xu=function(t){var n=t.frame,i=t.orgId,r=t.scheme,e=t.script,s=t.recHost,u=t.cdnHost,a=t.appHost,c=t.namespace,h=(t.desc,t.snippetVersion);try{if(function(t){return t.id==t.name&&Su.test(t.id)}(n))return Rt.BlocklistedFrame;if(function(t){return!(t.contentDocument&&t.contentWindow&&t.contentWindow.location)||function(t){return!!t.src&&"about:blank"!=t.src&&t.src.indexOf("javascript:")<0}(t)&&t.src!=t.contentWindow.location.href&&"loading"==t.contentDocument.readyState}(n))return Rt.PartiallyLoaded;var f=n.contentWindow,v=n.contentDocument;if(!f||!v)return Rt.MissingWindowOrDocument;if(!v.head)return Rt.MissingDocumentHead;if(!v.body||0===v.body.childNodes.length)return Rt.MissingBodyOrChildren;for(var l=!1,d=v.body.childNodes,p=0;p0&&(null!==(s=null===(e=null===(r=t.OrgSettings)||void 0===r?void 0:r.UrlPrivacyConfig)||void 0===e?void 0:e.length)&&void 0!==s?s:0)>0&&(null!==(a=null===(u=null===(o=t.OrgSettings)||void 0===o?void 0:o.AttributeBlocklist)||void 0===u?void 0:u.length)&&void 0!==a?a:0)>0;return c||Tt.sendToBugsnag("Invalid page response","error",{rsp:t}),c},t.prototype.handleResponse=function(t,n){var i,r,e,s,o=t.Flags,u=o.AjaxWatcher,a=o.ClientSideRageClick,c=o.GetCurrentSession,h=o.ResourceUploading,f=o.UseClientSideId;this.ku=t,this.Pu=t.UserIntId,this.ju=t.SessionIntId,this.Ou=t.PageIntId,this.Mu=t.PageStart,this.pu=c?_u.Enabled:_u.Disabled,this.cu=t.OrgSettings,pe(null!==(i=this.cu.UrlPrivacyConfig)&&void 0!==i?i:cn.DefaultOrgSettings.UrlPrivacyConfig,this.cu.MaxUrlLength);var v=null!==(r=this.cu.AttributeBlocklist)&&void 0!==r?r:[];(null===(s=null===(e=this._u)||void 0===e?void 0:e.privacy)||void 0===s?void 0:s.attributeBlocklist)&&(this._u.privacy.attributeBlocklist.length,v.push.apply(v,this._u.privacy.attributeBlocklist.map(Ae))),xe(v),this.yu.consoleWatcher().initializeMaxLogsPerPage(this.cu.MaxConsoleLogPerPage),this.yu.ajaxWatcher().initialize({requests:this.cu.HttpRequestHeadersAllowlist,responses:this.cu.HttpResponseHeadersAllowlist,maxAjaxPayloadLength:this.cu.MaxAjaxPayloadLength}),this.yu.perfWatcher().initialize({resourceUploader:this.yu.getResourceUploader(),recTimings:!!this.cu.RecordPerformanceResourceTiming,recImgs:!!this.cu.RecordPerformanceResourceImg,maxPerfMarksPerPage:this.cu.MaxPerfMarksPerPage}),this.Xt.initialize({canvasWatcherMode:t.Flags.CanvasWatcherMode,blocks:t.ElementBlocks,deferreds:t.ElementDeferreds,keeps:t.ElementKeeps,watches:t.ElementWatches}),this.Ve.initialize(t.UrlKeeps),this.Xt.initializeConsent(null!=n?n:!!t.Consented),"number"==typeof t.BundleUploadInterval&&(this.fu=t.BundleUploadInterval),h&&this.enableResourceUploading(),u&&t.AjaxWatches&&this.yu.ajaxWatcher().setWatches(t.AjaxWatches),a&&this.At.enableEasyBake(),f&&(this.hu=!0),this.yu.start(t.Flags)},t.prototype.fullyStarted=function(){this.Au&&this.Au()},t.prototype.enableResourceUploading=function(){this.wu=!0,this.yu.initResourceUploading()},t.prototype.flushPendingChildFrameInits=function(){if(this.du.length>0){for(var t=0;t0&&this.At.sendEvents(e,i);break;case du.RequestFrameId:if(!t)return;var s=this.Nu(t);void 0===s||(this.mu[s]=!1,this.Lu(t,s));case du.Unknown:}},t.prototype.Nu=function(t){for(var n=0,i=this.vu;n2e6))try{localStorage._fs_swan_song=i}catch(t){}},t.prototype.sing=function(){try{var t=this.purge();if(void 0===t)return;if(!(t.Bundles&&t.UserId&&t.SessionId&&t.PageId))return;t.OrgId||(t.OrgId=this.Uu.getOrgId()),t.Bundles.length>0&&(t.Bundles.length,this.Du(t))}catch(t){}},t.prototype.purge=function(){try{if("_fs_swan_song"in localStorage){var t=localStorage._fs_swan_song;return delete localStorage._fs_swan_song,pt(t)}}catch(t){}},t.prototype.Du=function(t,n){return void 0===n&&(n=0),(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o;return(0,e.__generator)(this,function(u){switch(u.label){case 0:if(i=null,!tt(t.Bundles)||0===t.Bundles.length||void 0===t.Bundles[0])return[2];1==t.Bundles.length&&(i=this._t.time.wallTime()-(t.LastBundleTime||0)),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,this.Ho.bundle({bundle:t.Bundles[0],deltaT:i,isNewSession:t.IsNewSession,orgId:t.OrgId,pageId:t.PageId,recHost:t.RecHost,serverBundleTime:t.ServerBundleTime,serverPageStart:t.ServerPageStart,sessionId:t.SessionId,userId:t.UserId,version:t.Version})];case 2:return r=u.sent(),s=r[1],t.Bundles[0].Evts.length,t.Bundles[0].Seq,t.Bundles.shift(),t.Bundles.length>0&&this.Du((0,e.__assign)((0,e.__assign)({},t),{ServerBundleTime:s.BundleTime})),[3,4];case 3:return(o=u.sent())instanceof iu&&ru(o.status)?[2]:(this.Bu=new this.Fu(this.Du,this.Ho.exponentialBackoffMs(n,!0),this,t,n+1).start(),[3,4]);case 4:return[2];}})})},t}(),ju=function(){function t(){}return t.prototype.encode=function(t){return t},t}(),Ou=function(){function t(){this.dict={idx:-1,map:{}},this.nodeCount=1,this.startIdx=0}return t.prototype.encode=function(n){if(0==n.length)return[];var i,r,e=n[0],s=Object.prototype.hasOwnProperty.call(this.dict.map,e)?this.dict.map[e]:void 0,o=[],u=1;function a(){s?u>1?o.push([s.idx,u]):o.push(s.idx):o.push(e)}for(i=1;ithis._t.recording.bundleUploadInterval()?[4,this.aa()]:[3,4]):[2];case 3:e.sent(),e.label=4;case 4:return[3,6];case 5:if((r=e.sent())instanceof iu){if(ru(r.status))return 206==r.status?Tt.sendToBugsnag("Failed to send bundle, probably because of its large size","error"):r.status>=500&&Tt.sendToBugsnag("Failed to send bundle, recording outage likely","error"),this.ea&&this.ea(),[2]}else Tt.sendToBugsnag("Failed to send bundle, unknown err","error",{err:r});return this.qu=!0,this.Vu=this.$u+this.Ho.exponentialBackoffMs(this.Qu++,!1),[3,6];case 6:return[2];}})})},t.prototype.va=function(t){var n,i;return(0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return this.Ou?(window,r=this.co.getMsSinceLastUserAcivity(),[4,this.Ho.bundle({bundle:t,deltaT:null,lastUserActivity:r,orgId:this.Uu.getOrgId(),pageId:this.Ou,serverBundleTime:this.Zu,serverPageStart:this.Mu,isNewSession:this.Gu,sessionId:null!==(n=this.Uu.getSessionId())&&void 0!==n?n:"",userId:this.Uu.getUserId(),version:this._t.recording.bundleApiVersion()})]):[2];case 1:return s=e.sent(),o=s[0],u=s[1],null===(i=this._t.recording.observer)||void 0===i||i.onBundleSent(o),o>this.Ju&&this.zu>16&&this._t.recording.splitPage(Wt.Size),window,[2,u];}})})},t.prototype.fa=function(t){if(0===t.Evts.length)return t;for(var n=[],i=0,r=t.Evts;i0},t.prototype.hasActiveEvents=function(){return this.da},t.prototype.pushEvent=function(t){Mu[t.Kind]||(this.da=!0),this.pa.When<0&&(this.pa.When=t.When),this.pa.Evts.push(t)},t}();function Hu(t,n){void 0===t&&(t=[]),void 0===n&&(n=0);for(var i="",r=0,e=t;r-1},t.prototype.ba=function(){return this.Dn.document.location.search.indexOf("_fs_preview=false")>-1},t.prototype.ya=function(){return!!this.wa.getValue(this.ga)},t}();function Uu(t){var n,i,r;return{Kind:Ot.CAPTURE_SOURCE,Args:[t.type,t.entrypoint,"dom",null===(i=null===(n=t.source)||void 0===n?void 0:n.integration)||void 0===i?void 0:i.slice(0,1024),!!(null===(r=t.source)||void 0===r?void 0:r.userInitiated)]}}function Fu(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i,r,s;return(0,e.__generator)(this,function(e){if(n=function(t){return"msCrypto"in t?t.msCrypto:t.crypto}(t),"function"==typeof(null==n?void 0:n.randomUUID))return[2,n.randomUUID()];for(i=new Uint8Array(16),n.getRandomValues(i),i[6]=15&i[6]|64,i[8]=63&i[8]|128,r=[],s=0;s=864e5)return Wu;var c=null!==(n=this.Sa.getLastUserActivityTimeMS())&&void 0!==n?n:u;return o.mathAbs(s-c)>=qu||(null!==(i=this.Sa.getPageCount())&&void 0!==i?i:0)>=250?Wu:e},t.prototype.start=function(){this.lastUserActivityTimeout.start(3e5)},t.prototype.stop=function(){this.lastUserActivityTimeout.stop()},t.prototype.ka=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t;return(0,e.__generator)(this,function(n){return(t=this.Sa.getUserId())&&Bu(t)?[2,t]:[2,Fu(this._t.window)]})})},t.prototype.xa=function(){var t=this.co.getLastUserAcitivityTS();t!==this.lastUserActivityTS&&(this.lastUserActivityTS=t,this.Sa.setLastUserActivityTimeMS(t),this.start())},t}(),Vu=function(t){function n(n,i,r,e,s,o,u){void 0===r&&(r=!0),void 0===e&&(e=new Fo(n)),void 0===s&&(s=new Ku(n,i,e,r)),void 0===o&&(o=Zi),void 0===u&&(u=xu);var a,c=t.call(this,n,o,e,s,u)||this;return c.Ho=i,c.mo=s,c._a=!1,c.ko=!1,c.Aa=!1,s.onShutdown(function(){return c.shutdown(Wt.SettingsBlocked)}),c.Mt=c.Dn.document,c.Eo=0,c.Uu=n.recording.identity,c.Ia=new Lu(c.xu,c.Dn,c.Uu.getClientStore()),c.pu=_u.NoInfoYet,c.Ta=new Qu(n,e,c.Uu),a=function(t){if(c.yu.stop(Wt.Api),t){var n=c.Mt.getElementById(t);n&&c.Ca&&n.setAttribute("_fs_embed_token",c.Ca)}},c.Dn._fs_shutdown=a,c}return(0,e.__extends)(n,t),n.prototype.onDomLoad=function(){var n=this;t.prototype.onDomLoad.call(this),this._a=!0,this.Pa(function(){n.fireFsReady(n.ko)})},n.prototype.ja=function(){var t=R(this.Dn,"_fs_replay_flags");if(/[?&]_fs_force_session=true(&|#|$)/.test(location.search)&&(t+=",forceSession",this.Dn.history)){var n=location.search.replace(/(^\?|&)_fs_force_session=true(&|$)/,function(t,n,i){return i?n:""});this.Dn.history.replaceState({},"",this.Dn.location.href.replace(location.search,n))}return t},n.prototype.start=function(n,i,r){var s,o,u;return(0,e.__awaiter)(this,void 0,Yn,function(){var a,c,h,f,v,l,d,p,w,g,m,y,b,E,S,x,k,_,A,I,T,C,P,j=this;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t.prototype.start.call(this,n,i,r),a=this.ja(),c=yi(this.Mt),h=c[0],f=c[1],O=this.Dn,M=0,K=0,v=null==O.screen?[M,K]:(M=parseInt(String(O.screen.width),10),K=parseInt(String(O.screen.height),10),[M=isNaN(M)?0:M,K=isNaN(K)?0:K]),l=v[0],d=v[1],p="",n||(p=this.Uu.getUserId()),w=null!==(u=null===(o=null===(s=this._t)||void 0===s?void 0:s.recording)||void 0===o?void 0:o.preroll)&&void 0!==u?u:-1,g=function(){return he(Mr(j.Dn),{source:"page",type:"base"})},m=function(){return he(j.Dn.location.href,{source:"page",type:"url"})},y=function(){return""===j.Mt.referrer?"":he(j.Mt.referrer,{source:"page",type:"referrer"})},b=function(t){var n,i="_fs_tab_id";try{var r=t.sessionStorage.getItem(i);if(r)return r;var e=Math.floor(1e17*Math.random()).toString(16);return t.sessionStorage.setItem(i,e),null!==(n=t.sessionStorage.getItem(i))&&void 0!==n?n:void 0}catch(t){return}}(this.Dn),E={OrgId:this.xu,UserId:p,Url:m(),Base:g(),Width:h,Height:f,ScreenWidth:l,ScreenHeight:d,SnippetVersion:V(this.Dn),Referrer:y(),Preroll:w,Doctype:dt(this.Mt),CompiledVersion:"11aa377d19",CompiledTimestamp:1678707725,AppId:this.Uu.getAppId(),TabId:b,PreviewMode:this.Ia.isPreviewMode()||void 0},a&&(E.ReplayFlags=a),e.label=1;case 1:return e.trys.push([1,5,,6]),S=this.Oa,[4,this.Ho.page(E)];case 2:return[4,S.apply(this,[e.sent()])];case 3:return P=e.sent(),this.isSafeResponse(P)?this.gu?[2]:(window,this.handleResponse(P),window,this.Ma(P.CookieDomain,P.UserIntId,P.SessionIntId,P.PageIntId,P.EmbedToken),P.Flags.UseStatelessConsent||this.Uu.getConsentStore().setConsentState(!!P.Consented),this.Ka(),P.PreviewMode&&this.Ra(),x=function(t){return R(t,"_fs_pagestart","function")}(this.Dn),x&&x(),this.At.enqueueFirst(this.yu.getNavigateEvent(this.Dn.location.href,Ot.ENTRY_NAVIGATE)),k=!!P.Consented,this.At.enqueueFirst({Kind:Ot.SYS_REPORTCONSENT,Args:[k,Bt.Document]}),_=dt(this.Mt),A=m(),I=y(),T=g(),this.At.enqueueFirst({Kind:Ot.SET_FRAME_BASE,Args:[he(Mr(this.Dn),{source:"event",type:Ot.SET_FRAME_BASE}),_,A,I]}),this.mo.setPageData({Kind:Ot.PAGE_DATA,Args:[A,T,h,f,l,d,V(this.Dn),I,_,w,p,P.PageStart,Et(this.Dn),this.Dn.navigator.userAgent,b,!!P.IsNewSession]}),this.At.enqueue({Kind:Ot.SCRIPT_COMPILED_VERSION,Args:["11aa377d19"]}),this.At.enqueue(Uu({type:"default"})),this.yu.addVisibilityChangeEvent(),this.addInitEvent(),[4,this.At.startPipeline({pageId:P.PageIntId,serverPageStart:P.PageStart,isNewSession:!!P.IsNewSession})]):[2,this.Ha()];case 4:return e.sent(),this.enqueueDocumentProperties(this.Mt),this.fullyStarted(),[3,6];case 5:return(C=e.sent())instanceof iu&&(P=C.data)&&P.user_id&&P.cookie_domain&&P.reason_code===en.ReasonBlockedTrafficRamping&&p!==P.user_id&&this.Ma(P.cookie_domain,P.user_id,"","",""),this.Ha(),[3,6];case 6:return[2];}var O,M,K})})},n.prototype.Ka=function(){var t=this;this.Aa=!0,this.Pa(function(){t.fireFsReady(t.ko)})},n.prototype.Ma=function(t,n,i,r,e){var s=this.Uu;s.setIds(this.Dn,t,n,i),this.Ca=e,this.Ia.write(),s.getUserId(),s.getSessionId()},n.prototype.Pa=function(t){var n,i;if(this._a&&this.Aa)if(null===(i=null===(n=this.ku)||void 0===n?void 0:n.Flags)||void 0===i?void 0:i.FetchIntegrations){var r=this.Mt.createElement("script");r.addEventListener("load",t),r.addEventListener("error",t),r.async=!0,r.src=this.zo+"//"+this.Eu+"/rec/integrations?OrgId="+this.xu,this.Mt.head.appendChild(r)}else t()},n.prototype.Ra=function(){var t="FullStory-preview-script";if(!this.Mt.getElementById(t)){var n=this.Mt.createElement("script");n.id=t,n.async=!0,n.src=this.zo+"//"+this.Su+"/s/fspreview.js",this.Mt.head.appendChild(n)}},n.prototype.Ha=function(){this.Iu&&this.Iu(),this.shutdown(Wt.SettingsBlocked),this.ko=!0,this.fireFsReady(this.ko)},n.prototype.Oa=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o,u;return(0,e.__generator)(this,function(a){switch(a.label){case 0:return(i=(0,e.__assign)({},t)).Flags.UseStaticSettings?(r=this.Ia.isPreviewMode(),[4,this.Ho.settings({orgId:this.xu,previewMode:r,fallback:!1})["catch"](function(t){Tt.sendToBugsnag("Edge Rec settings error","error",{err:t})})]):[3,4];case 1:return(s=a.sent())?[3,3]:[4,this.Ho.settings({orgId:this.xu,previewMode:r,fallback:!0})["catch"](function(t){Tt.sendToBugsnag("Rs Rec settings error","error",{err:t})})];case 2:s=a.sent(),a.label=3;case 3:s&&(i=(0,e.__assign)((0,e.__assign)({},i),s)),a.label=4;case 4:return i.Flags.UseClientSideId?(this.Uu.setCookieDomain(this.Dn,i.CookieDomain),Bu(o=null!==(n=t.UserUUID)&&void 0!==n?n:"")&&this.Uu.setUserId(o),[4,this.Ta.createUserSessionPage()]):[3,6];case 5:u=a.sent(),this.Ta.start(),i=(0,e.__assign)((0,e.__assign)({},i),{UserIntId:u.userId,SessionIntId:u.sessionId,PageIntId:u.pageId,IsNewSession:u.isNewSession,PageStart:p()}),a.label=6;case 6:return i.Flags.UseStatelessConsent&&(i=(0,e.__assign)((0,e.__assign)({},i),{Consented:this.Uu.getConsentStore().getConsentState()})),[2,i];}})})},n.prototype.onMessageReceived=function(n,i){t.prototype.onMessageReceived.call(this,n,i),(null==n?void 0:n.parent)==this.Dn&&i[0]===du.EndPreviewMode&&this.Ia.clear()},n}(Cu),zu=function(){function t(t,n){void 0===n&&(n=new $u(t)),this.Dn=t,this.Na=n}return t.prototype.enqueueEvents=function(t,n){var i=null!=t?t:void 0;this.Na.postMessage(this.Dn.parent,[du.EvtBundle,n,i],i)},t.prototype.startPipeline=function(){},t.prototype.stopPipeline=function(){},t.prototype.flush=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(t){return[2]})})},t.prototype.singSwanSong=function(){},t.prototype.onShutdown=function(t){},t.prototype.setPageData=function(t){},t}(),$u=function(){function t(t){this.Dn=t}return t.prototype.postMessage=function(t,n,i){switch(n[0]){case du.EvtBundle:bu(this.Dn,n[0],vt(n[1]),i)||mu(t,n);break;case du.RequestFrameId:bu(this.Dn,n[0],"[]",i)||mu(t,n);break;default:n[0];}},t}(),Gu=function(t){function n(n,i,r,e,s){void 0===i&&(i=new $u(n.window)),void 0===r&&(r=new zu(n.window,i)),void 0===e&&(e=Zi),void 0===s&&(s=xu);var o=t.call(this,n,e,void 0,r,s)||this;return o.Na=i,o}return(0,e.__extends)(n,t),n.prototype.start=function(n,i,r){var e=this;t.prototype.start.call(this,n,i,r),this.La(),this.T.add(this.Dn,"load",!1,function(){e.yu.recordingIsDetached()&&e._t.recording.splitPage(Wt.FsShutdownFrame)}),this.yu.addVisibilityChangeEvent()},n.prototype.onMessageReceived=function(n,i){if(t.prototype.onMessageReceived.call(this,n,i),n===this.Dn.parent||n===this.Dn)switch(i[0]){case du.GreetFrame:this.La(i[1]);break;case du.SetFrameId:try{var r=i[1];if(!r)return void he(location.href,{source:"log",type:"debug"});this.Ua({frameId:r,parentIds:i[2],outerStartTime:i[3],scheme:i[4],script:i[5],appHost:i[6],orgId:i[7],initConfig:i[8],pageRsp:i[9],consentOverride:i[10],minimumWhen:i[11]})}catch(t){vt(i)}break;case du.SetConsent:this.setConsent(i[1]);break;case du.InitFrameMobile:try{var e=JSON.parse(i[1]),s=e.StartTime;if(i.length>2&&i[2]){var o=i[2];Object.prototype.hasOwnProperty.call(o,"ProtocolVersion")&&o.ProtocolVersion>=20180723&&Object.prototype.hasOwnProperty.call(o,"OuterStartTime")&&(s=o.OuterStartTime)}var u=e.Host;this.Ua({frameId:0,parentIds:[],outerStartTime:s,scheme:"https:",script:G(u),appHost:$(u),orgId:e.OrgId,initConfig:void 0,pageRsp:e.PageResponse,consentOverride:this.Xt.getConsent()})}catch(t){vt(i)}}},n.prototype.La=function(t){this.Eo&&this.Eo===t||0!=this.Eo&&this.Dn.parent&&this.Na.postMessage(this.Dn.parent,[du.RequestFrameId])},n.prototype.Ua=function(t){var n,i,r=this;if(this.Eo)this.Eo!==t.frameId?(this.Eo,t.frameId,this._t.recording.splitPage(Wt.FsShutdownFrame)):this.Eo;else if(he(location.href,{source:"log",type:"debug"}),t.frameId,this.zo=t.scheme,this.bu=t.script,this.Su=t.appHost,this.xu=t.orgId,this._u=t.initConfig,this.Eo=t.frameId,this.So=t.parentIds,t.pageRsp&&this.isSafeResponse(t.pageRsp)){if(!this.gu){var e=null!==(n=t.consentOverride)&&void 0!==n?n:!!t.pageRsp.Consented;this.handleResponse(t.pageRsp,e),this.fireFsReady(),this.At.enqueueFirst({Kind:Ot.SYS_REPORTCONSENT,Args:[e,Bt.Document]}),this.At.enqueueFirst({Kind:Ot.SET_FRAME_BASE,Args:[he(Mr(this.Dn),{source:"event",type:Ot.SET_FRAME_BASE}),dt(this.Dn.document)]}),this.At.enqueue({Kind:Ot.SCRIPT_COMPILED_VERSION,Args:["11aa377d19"]}),this.At.enqueue(Uu({type:"default"})),this.addInitEvent(),this.At.rebaseIframe(t.outerStartTime,null!==(i=t.minimumWhen)&&void 0!==i?i:0),this._t.time.setStartTime(t.outerStartTime),this.Ou&&this.At.startPipeline({pageId:this.Ou,serverPageStart:t.pageRsp.PageStart,isNewSession:!!t.pageRsp.IsNewSession,frameId:t.frameId,parentIds:t.parentIds}).then(function(){r.flushPendingChildFrameInits(),r.enqueueDocumentProperties(r.Dn.document),r.fullyStarted()})}}else this.shutdown(Wt.FsShutdownFrame)},n}(Cu),Xu=function(){function t(t,n,i){void 0===n&&(n=function(){}),void 0===i&&(i=!1),this.Mt=t,this.Fa=n,this.Da=i,this._cookies={},this._cookies=k(this.Mt)}return t.prototype.setDomain=function(t){this.Ba=t},t.prototype.getValue=function(t,n){var i=this._cookies[t];if(!i)try{i=localStorage[null!=n?n:t]}catch(t){}return i},t.prototype.setValue=function(t,n,i,r){if(null!=this.Ba&&!this.Da){var e=[];this._setCookie(t,n,i,e),this.Wa(null!=r?r:t,n,e,t),e.length>0&&this.Fa(e)}},t.prototype.setCookie=function(t,n,i){this._setCookie(t,n,i,[])},Object.defineProperty(t.prototype,"cookies",{get:function(){return this._cookies},enumerable:!1,configurable:!0}),t.prototype.clearCookie=function(t,n){if(this._cookies[t]&&(this.Mt.cookie=Ju(this.Ba,t,"","Thu, 01 Jan 1970 00:00:01 GMT"),delete this._cookies[t]),n)try{delete localStorage[n]}catch(t){}},t.prototype._setCookie=function(t,n,i,r){try{this.Mt.cookie=Ju(this.Ba,t,n,i),-1===this.Mt.cookie.indexOf(n)&&r.push([t,"cookie"])}finally{this._cookies=k(this.Mt)}},t.prototype.Wa=function(t,n,i,r){try{localStorage[t]=n,localStorage[t]!==n&&i.push([null!=r?r:t,"localStorage"])}catch(n){i.push([null!=r?r:t,"localStorage",String(n)])}},t}();function Ju(t,n,i,r){var e=n+"="+i;return e+="; domain="+function(t){return t?"."+encodeURIComponent(t):""}(t),e+="; Expires="+r+"; path=/; SameSite=Strict","https:"===location.protocol&&(e+="; Secure"),e}var Zu,Yu="fs_cid",ta=function(){function t(t){this.Sa=t,this.qa=1;var n=this.Sa.getValue(Yu,wn);this.Qa=function(t){var n={consent:Dt.RevokeConsent};if(!t)return n;var i=t.split(".");return i.length<1?n:(i[0],"1"===i[1]?{consent:Dt.GrantConsent}:n)}(n)}return t.prototype.getConsentState=function(){return this.Qa.consent},t.prototype.setConsentState=function(t){if(this.Qa.consent=t,t!==Dt.RevokeConsent){var n=this.Va(),i=this.za();this.Sa.setValue(Yu,n,i,wn)}else this.Sa.clearCookie(Yu,wn)},t.prototype.Va=function(){return[this.qa,this.Qa.consent===Dt.GrantConsent?1:0].join(".")},t.prototype.za=function(){return new Date(1e3*S()).toUTCString()},t}(),na="fs_lua",ia=function(){function t(t){this.qa=1,this.Sa=t;var n=this.Sa.getValue(na,gn);this.Qa=function(t){var n={lastUserActivityTime:void 0};if(!t)return n;var i=t.split(".");return i.length<1?n:(i[0],{lastUserActivityTime:_(i[1])})}(n)}return t.prototype.getLastUserActivityTimeMS=function(){return this.Qa.lastUserActivityTime},t.prototype.setLastUserActivityTimeMS=function(t){this.Qa.lastUserActivityTime=t;var n=this.Va(),i=this.za();this.Sa.setValue(na,n,i,gn)},t.prototype.Va=function(){var t;return[this.qa,null!==(t=this.Qa.lastUserActivityTime)&&void 0!==t?t:""].join(".")},t.prototype.za=function(){return new Date(p()+qu).toUTCString()},t}(),ra="fs_uid",ea=function(){function t(t,n,i,r){void 0===n&&(n=document),void 0===i&&(i=function(){}),void 0===r&&(r=!1),this.$a=void 0,this.wa=new Xu(n,i,r),this.Ga=new ta(this.wa),this.Xa=new ia(this.wa),this.Qa=this.Ja(t)}return t.prototype.Ja=function(t){var n=x(this.wa.getValue(ra,pn));return n&&n.orgId==t?n:{expirationAbsTimeSeconds:S(),orgId:t,userId:"",sessionId:"",appKeyHash:""}},t.prototype.getConsentStore=function(){return this.Ga},t.prototype.clear=function(){this.Xa.setLastUserActivityTimeMS(void 0),this.Qa.sessionStartTime=this.Qa.pageCount=void 0,this.Qa.userId=this.Qa.sessionId=this.Qa.appKeyHash=this.$a="",this.Qa.expirationAbsTimeSeconds=S(),this.Za()},t.prototype.create=function(t){this.Xa.setLastUserActivityTimeMS(t.lastUserActivityTime),this.Qa=(0,e.__assign)((0,e.__assign)({},this.Qa),t),this.Za()},t.prototype.getOrgId=function(){return this.Qa.orgId},t.prototype.getUserId=function(){return this.Qa.userId},t.prototype.setUserId=function(t){this.Qa.userId=t,this.Za()},t.prototype.getSessionId=function(){return this.Qa.sessionId},t.prototype.getAppKeyHash=function(){return this.Qa.appKeyHash},t.prototype.getCookies=function(){return this.wa.cookies},t.prototype.setAppId=function(t){this.$a=t,this.Qa.appKeyHash=qo(t),this.Za()},t.prototype.getAppId=function(){return this.$a},t.prototype.setSessionStartTimeMS=function(t){this.Qa.sessionStartTime=t,this.Za()},t.prototype.getSessionStartTimeMS=function(){return this.Qa.sessionStartTime},t.prototype.setLastUserActivityTimeMS=function(t){this.Xa.setLastUserActivityTimeMS(t)},t.prototype.getLastUserActivityTimeMS=function(){return this.Xa.getLastUserActivityTimeMS()},t.prototype.setPageCount=function(t){this.Qa.pageCount=t,this.Za()},t.prototype.getPageCount=function(){return this.Qa.pageCount},t.prototype.getClientStore=function(){return this.wa},t.prototype.setCookie=function(t,n,i){void 0===i&&(i=new Date(p()+6048e5).toUTCString()),this.wa.setCookie(t,n,i)},t.prototype.setCookieDomain=function(t,n){var i=n;(C(i)||i.match(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/g))&&(i="");var r=function(t){return R(t,"_fs_cookie_domain")}(t);"string"==typeof r&&(i=r),this.wa.setDomain(i)},t.prototype.setIds=function(t,n,i,r){this.setCookieDomain(t,n),this.Qa.userId=i,this.Qa.sessionId=r,this.Za()},t.prototype.clearAppId=function(){return!!this.Qa.appKeyHash&&(this.$a="",this.Qa.appKeyHash="",this.Za(),!0)},t.prototype.encode=function(){var t,n,i,r=[this.Qa.userId,null!==(t=this.Qa.sessionId)&&void 0!==t?t:"",""+(null!==(n=this.Qa.sessionStartTime)&&void 0!==n?n:""),"",""+(null!==(i=this.Qa.pageCount)&&void 0!==i?i:"")].join(":"),e=["",this.Qa.orgId,r];return this.Qa.appKeyHash&&e.push(encodeURIComponent(this.Qa.appKeyHash)),e.push("/"+this.Qa.expirationAbsTimeSeconds),e.join("#")},t.prototype.Za=function(){var t=this.encode(),n=new Date(1e3*this.Qa.expirationAbsTimeSeconds).toUTCString();this.wa.setValue(ra,t,n,pn)},t}(),sa=((Zu={})[Xt.Document]={assetMapId:"str",releaseDatetime:"date",releaseVersion:"str"},Zu[Xt.Event]={},Zu[Xt.Page]={pageName:"str",releaseVersion:"str",releaseDatetime:"str"},Zu[Xt.User]={uid:"str",displayName:"str",email:"str"},Zu),oa={str:ua,bool:aa,real:ca,"int":ha,date:fa,strs:va(ua),bools:va(aa),reals:va(ca),ints:va(ha),dates:va(fa),objs:va(la),obj:la};function ua(t){return"string"==typeof t}function aa(t){return"boolean"==typeof t}function ca(t){return"number"==typeof t}function ha(t){return"number"==typeof t&&t-o.mathFloor(t)==0}function fa(t){return!(!t||(t.constructor===Date?isNaN(t):"number"!=typeof t&&"string"!=typeof t||isNaN(new Date(t))))}function va(t){return function(n){if(!(n instanceof Array))return!1;for(var i=0;i=0)return[void 0,Jt.FsId];var e=qo(r),s=void 0;return n&&n.Qa.appKeyHash&&n.Qa.appKeyHash!==e&&n.Qa.appKeyHash!==r&&(n.Qa.appKeyHash,s=Jt.NewUid),[r,s]}(f,this.Uu),l=v[0],d=v[1];if(!l)return Jt.FsId,{events:r};a.properties.uid=l,this.Uu.setAppId(l),d===Jt.NewUid&&(i=!0)}}Ea(t.source,"setVars",e),e(this.nc(s,wa(s,a.properties),u));break;default:(0,Ir.nt)(s,"Unsupported");}}catch(n){t.operation,n.message}return{events:r,reidentify:i}},t.prototype.nc=function(t,n,i,r){var e=vt(n.PayloadToSend),s=!!i&&"fs"!==i;switch(t){case Xt.Event:return{When:0,Kind:Ot.SYS_CUSTOM,Args:s?[r,e,i]:[r,e]};case Xt.Document:case Xt.Page:case Xt.User:return{When:0,Kind:Ot.SYS_SETVAR,Args:s?[t,e,i]:[t,e]};default:(0,Ir.nt)(t,"Unsupported");}},t.prototype.ic=function(t,n){var i=t.PayloadToSend;if(i&&"object"==typeof i){var r=0,e={};for(var s in i)if(!(s in this.Ya)){var o=i[s];this.Ya[s]={value:o,apiSource:n},e[s]=o,r++}if(0!==r)return{PayloadToSend:e,ValidationErrors:t.ValidationErrors}}},t}();function wa(t,n){var i=1500;return ga(function(){return--i},t,n)}var ga=function(t,n,i){var r,e,s={PayloadToSend:{},ValidationErrors:[]},u=function(i){var r=ga(t,n,i);return s.ValidationErrors=s.ValidationErrors.concat(r.ValidationErrors),r.PayloadToSend};for(var a in i)if(o.objectHasOwnProp(i,a)){if(t()<=0)break;var c=i[a],h=ya(n,a,c,s.ValidationErrors);if(h){var f=h.name;if("obj"!==h.type){if("objs"!==h.type)s.PayloadToSend[f]=ma(h.type,h.value);else{n!=Xt.Event&&s.ValidationErrors.push({Type:"vartype",FieldName:f,ValueType:"Array (unsupported)"});for(var v=[],l=0;l0&&(s.PayloadToSend[f]=v)}}else{var d=u(h.value),p=(e="_obj").length>(r=a).length||r.substring(r.length-e.length)!=e?f.substring(0,f.length-"_obj".length):f;s.PayloadToSend[p]=d}}else s.PayloadToSend[a]=ma("str",c)}return s};function ma(t,n){var i=n;return"str"==t&&"string"==typeof i&&(i=i.trim()),null==i||"date"!=t&&i.constructor!=Date||(i=function(t){var n=t.constructor===Date?t:new Date(t);try{return n.toISOString()}catch(t){return null}}(i)),i}function ya(t,n,i,r){var e=n,s=e,u=typeof i;if("undefined"===u)return r.push({Type:"vartype",FieldName:e,ValueType:u+" (unsupported)"}),null;var a=sa[t];if(o.objectHasOwnProp(a,e))return{name:e,type:a[e],value:i};var c=e.lastIndexOf("_");if(-1==c||!ba(e.substring(c+1))){var h=function(t){for(var n in oa)if(oa[n](t))return n;return null}(i);if(null==h)return i?r.push({Type:"vartype",FieldName:e}):r.push({Type:"vartype",FieldName:e,ValueType:"null (unsupported)"}),null;c=e.length,e=e+"_"+h}var f=e.substring(0,c),v=e.substring(c+1);if("object"===u&&!i)return r.push({Type:"vartype",FieldName:s,ValueType:"null (unsupported)"}),null;if(!da.test(f)){f=f.replace(/[^a-zA-Z0-9_]/g,"").replace(/^[0-9]+/,""),/[0-9]/.test(f[0])&&(f=f.substring(1)),r.push({Type:"varname",FieldName:s});var l=f+"_"+v;if(da.source,""==f)return null;e=l}return ba(v)?function(t,n){return oa[t](n)}(v,i)?{name:e,type:v,value:i}:(vt(i),"number"===u?u=i%1==0?"integer":"real":"object"==u&&null!=i&&i.constructor==Date&&(u=isNaN(i)?"invalid date":"date"),r.push({Type:"vartype",FieldName:s,ValueType:u}),null):(r.push({Type:"varname",FieldName:s}),null)}function ba(t){return!!oa[t]}function Ea(t,n,i){var r=Uu({source:t,type:"api",entrypoint:n});r&&i({When:0,Kind:r.Kind,Args:r.Args})}function Sa(t,n){return(0,e.__awaiter)(this,void 0,Yn,function(){var i,s,o,a,c;return(0,e.__generator)(this,function(h){switch(h.label){case 0:if(h.trys.push([0,2,,3]),gr||yr||function(t){return!!R(t,"_fs_use_polyfilled_apis","boolean")}(t))return[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];if(!t.document||n.status!==r.Unknown)return[2,n];if(i=function(t,n){var i=n.functions,s={},o=(0,e.__assign)({},n.helpers);if(o.functionToString=function(t,n){var i,r,e=null===(i=t["__core-js_shared__"])||void 0===i?void 0:i.inspectSource;if(e){var s=function(){return e(this)};if(ka(s,2))return s}var o=null===(r=t["__core-js_shared__"])||void 0===r?void 0:r["native-function-to-string"];if(ka(o))return o;var u=n.__zone_symbol__OriginalDelegate;return ka(u)?u:ka(n)?n:void 0}(t,o.functionToString),!o.functionToString)return n;var u=!1;for(var a in i)if(i[a]){if(s[a]=Ia(o.functionToString,i[a]),s[a]||(s[a]=Ta(o.functionToString,o,a)),!s[a])return n;s[a]!==i[a]&&(u=!0)}else s[a]=void 0;return{status:r.Clean,functions:u?s:i,helpers:o,errors:[]}}(t,n),i.status===r.Clean)return[2,i];(s=t.document.createElement("iframe")).id="FullStory-iframe",s.className="fs-hide",s.style.display="none",o=t.document.body||t.document.head||t.document.documentElement||t.document;try{o.appendChild(s)}catch(t){return[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})]}return s.contentWindow?(a=u(s.contentWindow,r.Clean),s.parentNode&&s.parentNode.removeChild(s),a.status===r.UnrecoverableFailure?[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})]:[4,xa(a,n)]):[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];case 1:return[2,h.sent()];case 2:return c=h.sent(),Tt.sendToBugsnag(c,"error"),[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];case 3:return[2];}})})}function xa(t,n){var i,s=new Yn(function(t){return i=t});return setTimeout(function(){try{t.functions.jsonParse("[]").push(0)}catch(t){i((0,e.__assign)((0,e.__assign)({},n),{status:r.Clean}))}i(t)}),s}function ka(t,n){var i;if(void 0===n&&(n=0),!t)return!1;try{t.call(function(){})}catch(t){return!1}var r=function(t){try{return void t.call(null)}catch(t){return(t.stack||"").replace(/__fs_nomangle_check_stack(.|\n)*$/,"")}},e=void 0;0!==n&&"number"==typeof Error.stackTraceLimit&&(e=Error.stackTraceLimit,Error.stackTraceLimit=Number.POSITIVE_INFINITY);var s=[function(){throw new Error("")},t],o=function __fs_nomangle_check_stack(){return s.map(r)}(),u=o[0],a=o[1];if(void 0!==e&&(Error.stackTraceLimit=e),!u||!a)return!1;for(var c="\n".charCodeAt(0),h=u.length>a.length?a.length:u.length,f=1,v=f;v=0}var Aa=["__zone_symbol__OriginalDelegate","nr@original"];function Ia(t,n){if(n){for(var i=0,r=Aa;i0&&this.lc[t].some(function(t){return!t.disconnected})},t.prototype.takeRecords=function(t){var n,i=null!==(n=this.lc[t.type])&&void 0!==n?n:[];if(0!==i.length)for(var r=0,e=i;r-1,!!ja.userAgent.match("CriOS")||"Google Inc."===Oa&&!Ma&&!Ka),Fa=/Firefox/.test(window.navigator.userAgent);function Da(t){if(!Fa)return!1;var n=window.navigator.userAgent.match(/Firefox\/(\d+)/);return!(!n||!n[1])&&parseInt(n[1],10)0||null===H){n="Init config rejected: "+R.unrecoverable.join(",\n"),k(t,new Error(n));break}R.recoverable.length>0&&(n="Init config partially rejected: "+R.recoverable.join(",\n")),a=H,x(t);break;default:(0,Ir.nt)(t,"invalid operation");}}catch(n){Tt.sendToBugsnag(n,"error"),k(t,n)}},A=0,I=p;A=0;u--)(e=t[u])&&(o=(s<3?e(o):s>3?e(n,i,o):e(n,i))||o);return s>3&&o&&Object.defineProperty(n,i,o),o}function a(t,n){return function(i,r){n(i,r,t)}}function c(t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,n)}function h(t,n,i,r){return new(i||(i=Promise))(function(e,s){function o(t){try{a(r.next(t))}catch(t){s(t)}}function u(t){try{a(r["throw"](t))}catch(t){s(t)}}function a(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(t){t(n)})).then(o,u)}a((r=r.apply(t,n||[])).next())})}function f(t,n){var i,r,e,s,o={label:0,sent:function(){if(1&e[0])throw e[1];return e[1]},trys:[],ops:[]};return s={next:u(0),"throw":u(1),"return":u(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function u(s){return function(u){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,r&&(e=2&s[0]?r["return"]:s[0]?r["throw"]||((e=r["return"])&&e.call(r),0):r.next)&&!(e=e.call(r,s[1])).done)return e;switch(r=0,e&&(s=[2&s[0],e.value]),s[0]){case 0:case 1:e=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((e=(e=o.trys).length>0&&e[e.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!e||s[1]>e[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function p(t,n){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var r,e,s=i.call(t),o=[];try{for(;(void 0===n||n-->0)&&!(r=s.next()).done;)o.push(r.value)}catch(t){e={error:t}}finally{try{r&&!r.done&&(i=s["return"])&&i.call(s)}finally{if(e)throw e.error}}return o}function w(){for(var t=[],n=0;n1||u(t,n)})})}function u(t,n){try{(i=e[t](n)).value instanceof y?Promise.resolve(i.value.v).then(a,c):h(s[0][2],i)}catch(t){h(s[0][3],t)}var i}function a(t){u("next",t)}function c(t){u("throw",t)}function h(t,n){t(n),s.shift(),s.length&&u(s[0][0],s[0][1])}}function E(t){var n,i;return n={},r("next"),r("throw",function(t){throw t}),r("return"),n[Symbol.iterator]=function(){return this},n;function r(r,e){n[r]=t[r]?function(n){return(i=!i)?{value:y(t[r](n)),done:"return"===r}:e?e(n):n}:e}}function S(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,i=t[Symbol.asyncIterator];return i?i.call(t):(t=d(t),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=t[i]&&function(n){return new Promise(function(r,e){!function(t,n,i,r){Promise.resolve(r).then(function(n){t({value:n,done:i})},n)}(r,e,(n=t[i](n)).done,n.value)})}}}function x(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t}var k=Object.create?function(t,n){Object.defineProperty(t,"default",{enumerable:!0,value:n})}:function(t,n){t["default"]=n};function _(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&v(n,t,i);return k(n,t),n}function A(t){return t&&t.__esModule?t:{"default":t}}function I(t,n,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?t!==n||!r:!n.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(t):r?r.value:n.get(t)}function T(t,n,i,r,e){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!e)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?t!==n||!e:!n.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?e.call(t,i):e?e.value=i:n.set(t,i),i}function C(t,n){if(null===n||"object"!=typeof n&&"function"!=typeof n)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof t?n===t:t.has(n)}}},n={};function i(r){var e=n[r];if(void 0!==e)return e.exports;var s=n[r]={exports:{}};return t[r](s,s.exports,i),s.exports}i.d=function(t,n){for(var r in n)i.o(n,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(248)}(); +!function(){"use strict";var t={248:function(t,n,i){var r,e=i(940);function s(t){}!function(t){t[t.Unknown=0]="Unknown",t[t.Clean=1]="Clean",t[t.UnrecoverableFailure=2]="UnrecoverableFailure"}(r||(r={}));var o=new(function(){function t(t){this.rebuildFromSnapshot(t)}return t.prototype.rebuildFromSnapshot=function(t){var n=this.snapshot;if(this.snapshot=t,!n||n.functions!==t.functions){var i=t.functions;this.arrayIsArray=i.arrayIsArray,this.clearWindowInterval=a(i.clearWindowInterval),this.clearWindowTimeout=a(i.clearWindowTimeout),this.dateGetTime=a(i.dateGetTime),this.dateNow=i.dateNow,this.docFragQuerySelectorAll=a(i.docFragQuerySelectorAll),this.docQuerySelectorAll=a(i.docQuerySelectorAll),this.elMatches=a(i.elMatches),this.elQuerySelectorAll=a(i.elQuerySelectorAll),this.jsonParse=i.jsonParse,this.jsonStringify=i.jsonStringify,this.matchMedia=c(i.matchMedia),this.mathAbs=i.mathAbs,this.mathFloor=i.mathFloor,this.mathMax=i.mathMax,this.mathMin=i.mathMin,this.mathPow=i.mathPow,this.mathRandom=i.mathRandom,this.mathRound=i.mathRound,this.objectHasOwnProp=a(i.objectHasOwnProp),this.objectKeys=i.objectKeys,this.objectValues=i.objectValues||null,this.requestWindowAnimationFrame=c(i.requestWindowAnimationFrame),this.requestWindowIdleCallback=c(i.requestWindowIdleCallback),this.setWindowInterval=a(i.setWindowInterval),this.setWindowTimeout=a(i.setWindowTimeout)}},t}())(u(window));function u(t,n){void 0===n&&(n=r.Unknown);var i=n,e=[],s=function(t){return i=r.UnrecoverableFailure,e.push("Snapshot failed: "+t),function(){throw new Error("Invoked failed snapshot")}},o=function(t){try{return t()}catch(t){return s(t.message)}},u=function(t){try{return t()||s("snapshot not found")}catch(t){return s(t.message)}},a={arrayIsArray:o(function(){return t.Array.isArray}),clearWindowInterval:o(function(){return t.clearInterval}),clearWindowTimeout:o(function(){return t.clearTimeout}),dateGetTime:o(function(){return t.Date.prototype.getTime}),dateNow:o(function(){return t.Date.now}),docFragQuerySelectorAll:u(function(){var n;return null===(n=t.DocumentFragment)||void 0===n?void 0:n.prototype.querySelectorAll}),docQuerySelectorAll:u(function(){var n;return null!==(n=t.Document.prototype.querySelectorAll)&&void 0!==n?n:t.document.querySelectorAll}),elMatches:u(function(){return v(t,h)}),elQuerySelectorAll:u(function(){return v(t,f)}),jsonParse:o(function(){return t.JSON.parse}),jsonStringify:o(function(){return t.JSON.stringify}),matchMedia:o(function(){return t.matchMedia}),mathAbs:o(function(){return t.Math.abs}),mathFloor:o(function(){return t.Math.floor}),mathMax:o(function(){return t.Math.max}),mathMin:o(function(){return t.Math.min}),mathPow:o(function(){return t.Math.pow}),mathRandom:o(function(){return t.Math.random}),mathRound:o(function(){return t.Math.round}),objectHasOwnProp:o(function(){return t.Object.prototype.hasOwnProperty}),objectKeys:o(function(){return t.Object.keys}),objectValues:o(function(){return t.Object.values}),requestWindowAnimationFrame:o(function(){return t.requestAnimationFrame}),requestWindowIdleCallback:o(function(){return t.requestIdleCallback}),setWindowInterval:o(function(){return t.setInterval}),setWindowTimeout:o(function(){return t.setTimeout})},c={functionToString:o(function(){return t.Function.prototype.toString}),objectToString:o(function(){return t.Object.prototype.toString})};return{status:i,functions:a,helpers:c,errors:e}}function a(t){return function(n){for(var i=[],r=1;r=0){var s=e.split("/"),o=s[0],u=s[1];i[r]=o,n=u;break}}var a=function(t){var n=parseInt(null!=t?t:"",10),i=E(),r=S();return isNaN(n)?r:n<=i?void 0:n>r?r:n}(n);if(!a)return null;i[0];var c=i[1],h=i[2],f=i[3],v="";f&&(v=decodeURIComponent(f),(y.indexOf(v)>=0||b.indexOf(v)>=0)&&(v=""));var l=(null!=h?h:"").split(":"),d=l[0],p=l[1],w=l[2];return l[3],{appKeyHash:v,expirationAbsTimeSeconds:a,userId:d,orgId:c,pageCount:_(l[4]),sessionId:null!=p?p:"",sessionStartTime:_(w)}}function k(t){var n={};try{for(var i=t.cookie.split(";"),r=0;r1))return s}}(t);if(!i||!K(n))return n;var r="";return 0===n.indexOf("www.")&&(n=n.slice(4),r="www."),0===n.indexOf(i+".")&&(n=n.slice((i+".").length)),""+r+i+"."+n}}function $(t){return t?C(function(t){var n=t,i=n.indexOf(":");return i>=0&&(n=n.slice(0,i)),n}(t))?t:0==t.indexOf("www.")?"app."+t.slice(4):"app."+t:t}function G(t){var n=j(t);if(n)return n+"/s/fs.js"}function X(t,n){return function(){for(var i=[],r=0;rn)return!1;return i==n}function ot(t,n){var i=0;for(var r in t)if(Object.prototype.hasOwnProperty.call(t,r)&&++i>n)return!0;return!1}function ut(t){var n=t.nextSibling;return n&&t.parentNode&&n===t.parentNode.firstChild?null:n}function at(t){var n=t.previousSibling;return n&&t.parentNode&&n===t.parentNode.lastChild?null:n}function ct(t){return function(){for(var n=this,i=[],r=0;r"}function pt(t){return o.jsonParse(t)}var wt=function(){function t(t,n,i){void 0===i&&(i=!1),this.i=t,this.u=n,this.l=i,this.g=J,this.m=J,this.S=J,this.k=!1}return t.prototype.before=function(t){return this.g=ft(t),this},t.prototype.afterSync=function(t){return this.m=ft(t),this},t.prototype.afterAsync=function(t){return this.S=ft(function(n){o.setWindowTimeout(window,X(function(){t(n)}),0)}),this},t.prototype.disable=function(){if(this.k=!1,this._){var t=this._,n=t.override,i=t["native"];this.i[this.u]===n&&(this.i[this.u]=i,this._=void 0)}},t.prototype.enable=function(){if(this.k=!0,this._)return!0;this._=this.A();try{this.i[this.u]=this._.override}catch(t){return!1}return!0},t.prototype.getTarget=function(){return this.i},t.prototype.A=function(){var t=this,n=this,i=this.i[this.u],r=function(){for(var t=[],r=0;r\n";var i=[];try{for(var r=arguments.callee.caller.caller;r&&i.length<10;){var e=kt.test(r.toString())&&RegExp.$1||xt;i.push(e),r=r.caller}}catch(t){t.toString()}n=i.join("\n")}return t+n}function It(){try{return window.self!==window.top}catch(t){return!0}}var Tt=function(){function t(){}return t.wrap=function(n,i){return void 0===i&&(i="error"),X(n,function(n){return t.sendToBugsnag(n,i)})},t.I=15,t.sendToBugsnag=function(n,i,r){if(!(t.I<=0)){t.I--;var e=n;"string"==typeof e&&(e=new Error(e));var s=k(document).fs_uid,o=s?x(s):void 0;o&&o.orgId!=F(window)&&(o=void 0);var u=new Date(1678707725e3).toISOString(),a={projectRoot:window.location.origin,deviceTime:p(),inIframe:It(),CompiledVersion:"11aa377d19",CompiledTimestamp:1678707725,CompiledTime:u,orgId:F(window),"userId:sessionId":o?o.userId+":"+o.sessionId:"NA",context:document.location&&document.location.pathname,message:e.message,name:"Recording Error",releaseStage:"production "+u,severity:i,language:Et(window),stacktrace:_t(e)||At()},c=function(t,n,i){var r=encodeURIComponent(n)+"="+encodeURIComponent(i);t.push(r)},h=[];for(var f in a)c(h,f,a[f]||"");if(r)for(var f in r)c(h,"aux_"+f,Ct(r[f]));new Image().src="https://"+L(window)+"/rec/except?"+h.join("&")}},t}();function Ct(t){try{var n=typeof t+": "+vt(t);return"function"==typeof t.toString&&(n+=" (toString: "+t.toString()+")"),n}catch(t){return"failed to serialize \""+(null==t?void 0:t.message)+"\""}}var Pt={};function jt(t,n,i){if(void 0===i&&(i=1),t)return!0;if(Pt[n]=Pt[n]||0,Pt[n]++,Pt[n]>i)return!1;var r=new Error("Assertion failed: "+n);return Tt.sendToBugsnag(r,"error"),t}var Ot,Mt,Kt,Rt,Ht,Nt,Lt={};function Ut(t,n,i){var r;Lt[t]=null!==(r=Lt[t])&&void 0!==r?r:0,Lt[t]++,Lt[t]>1||Tt.sendToBugsnag(n,"error",i)}!function(t){t.MUT_INSERT=2,t.MUT_REMOVE=3,t.MUT_ATTR=4,t.MUT_TEXT=6,t.MOUSEMOVE=8,t.MOUSEMOVE_CURVE=9,t.SCROLL_LAYOUT=10,t.SCROLL_LAYOUT_CURVE=11,t.MOUSEDOWN=12,t.MOUSEUP=13,t.CLICK=16,t.FOCUS=17,t.VALUECHANGE=18,t.RESIZE_LAYOUT=19,t.DOMLOADED=20,t.LOAD=21,t.PLACEHOLDER_SIZE=22,t.UNLOAD=23,t.BLUR=24,t.SET_FRAME_BASE=25,t.TOUCHSTART=32,t.TOUCHEND=33,t.TOUCHCANCEL=34,t.TOUCHMOVE=35,t.TOUCHMOVE_CURVE=36,t.NAVIGATE=37,t.PLAY=38,t.PAUSE=39,t.RESIZE_VISUAL=40,t.RESIZE_VISUAL_CURVE=41,t.RESIZE_DOCUMENT_CONTENT=42,t.RESIZE_SCROLLABLE_ELEMENT_CONTENT=43,t.LOG=48,t.ERROR=49,t.DBL_CLICK=50,t.FORM_SUBMIT=51,t.WINDOW_FOCUS=52,t.WINDOW_BLUR=53,t.HEARTBEAT=54,t.WATCHED_ELEM=56,t.PERF_ENTRY=57,t.REC_FEAT_SUPPORTED=58,t.SELECT=59,t.CSSRULE_INSERT=60,t.CSSRULE_DELETE=61,t.FAIL_THROTTLED=62,t.AJAX_REQUEST=63,t.SCROLL_VISUAL_OFFSET=64,t.SCROLL_VISUAL_OFFSET_CURVE=65,t.MEDIA_QUERY_CHANGE=66,t.RESOURCE_TIMING_BUFFER_FULL=67,t.MUT_SHADOW=68,t.DISABLE_STYLESHEET=69,t.FULLSCREEN=70,t.FULLSCREEN_ERROR=71,t.ADOPTED_STYLESHEETS=72,t.CUSTOM_ELEMENT_DEFINED=73,t.MODAL_OPEN=74,t.MODAL_CLOSE=75,t.SLOW_INTERACTION=76,t.LONG_FRAME=77,t.TIMING=78,t.STORAGE_WRITE_FAILURE=79,t.DOCUMENT_PROPERTIES=80,t.ENTRY_NAVIGATE=81,t.STATS=82,t.VIEWPORT_INTERSECTION=83,t.COPY=84,t.PASTE=85,t.URL_SALT=86,t.URL_ID=87,t.FRAME_STATUS=88,t.SCRIPT_COMPILED_VERSION=89,t.RESET_CSS_SHEET=90,t.ANIMATION_CREATED=91,t.ANIMATION_METHOD_CALLED=92,t.ANIMATION_PROPERTY_SET=93,t.DOCUMENT_TIMELINE_CREATED=94,t.KEYFRAME_EFFECT_CREATED=95,t.KEYFRAME_EFFECT_METHOD_CALLED=96,t.KEYFRAME_EFFECT_PROPERTY_SET=97,t.CAPTURE_SOURCE=98,t.PAGE_DATA=99,t.VISIBILITY_STATE=100,t.DIALOG=101,t.CSSRULE_UPDATE=102,t.CANVAS=103,t.CANVAS_DETACHED_DIMENSION=104,t.INIT_API=105,t.DEFERRED_RESOLVED=106,t.KEEP_ELEMENT=2e3,t.KEEP_URL=2001,t.KEEP_BOUNCE=2002,t.SYS_SETVAR=8193,t.SYS_RESOURCEHASH=8195,t.SYS_SETCONSENT=8196,t.SYS_CUSTOM=8197,t.SYS_REPORTCONSENT=8198,t.SYS_LETHE_MOBILE_BUNDLE_SEQ=8199}(Ot||(Ot={})),function(t){t.Animation=0,t.CSSAnimation=1,t.CSSTransition=2}(Mt||(Mt={})),function(t){t.Unknown=0,t.Serialization=1}(Kt||(Kt={})),function(t){t.Unknown=0,t.Successful=1,t.BlocklistedFrame=2,t.PartiallyLoaded=3,t.MissingWindowOrDocument=4,t.MissingDocumentHead=5,t.MissingBodyOrChildren=6,t.AlreadyDefined=7,t.NoNonScriptElement=8,t.Exception=9}(Rt||(Rt={})),function(t){t.Unknown=0,t.DomSnapshot=1,t.NodeEncoding=2,t.LzEncoding=3}(Ht||(Ht={})),function(t){t.Internal=0,t.Public=1}(Nt||(Nt={}));var Ft,Dt,Bt,Wt,qt,Qt,Vt,zt,$t,Gt,Xt,Jt,Zt,Yt,tn,nn,rn,en,sn,on,un,an,cn,hn=["print","alert","confirm"];function fn(t){switch(t){case Ot.MOUSEDOWN:case Ot.MOUSEMOVE:case Ot.MOUSEMOVE_CURVE:case Ot.MOUSEUP:case Ot.TOUCHSTART:case Ot.TOUCHEND:case Ot.TOUCHMOVE:case Ot.TOUCHMOVE_CURVE:case Ot.TOUCHCANCEL:case Ot.CLICK:case Ot.SCROLL_LAYOUT:case Ot.SCROLL_LAYOUT_CURVE:case Ot.SCROLL_VISUAL_OFFSET:case Ot.SCROLL_VISUAL_OFFSET_CURVE:case Ot.NAVIGATE:return!0;}return!1}!function(t){t[t.Index=1]="Index",t[t.Cached=2]="Cached"}(Ft||(Ft={})),function(t){t.GrantConsent=!0,t.RevokeConsent=!1}(Dt||(Dt={})),function(t){t.Page=0,t.Document=1}(Bt||(Bt={})),function(t){t.Unknown=0,t.Api=1,t.FsShutdownFrame=2,t.Hibernation=3,t.Reidentify=4,t.SettingsBlocked=5,t.Size=6,t.Unload=7,t.Hidden=8}(Wt||(Wt={})),function(t){t.Unknown=0,t.NotEmpty=1,t.EmptyBody=2}(qt||(qt={})),function(t){t.Timing=0,t.Navigation=1,t.Resource=2,t.Paint=3,t.Mark=4,t.Measure=5,t.Memory=6,t.TimeOrigin=7,t.LayoutShift=8,t.FirstInput=9,t.LargestContentfulPaint=10,t.LongTask=11}(Qt||(Qt={})),function(t){t.Timing=["navigationStart","unloadEventStart","unloadEventEnd","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","domLoading","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd"],t.Navigation=["name","startTime","duration","initiatorType","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","unloadEventStart","unloadEventEnd","domInteractive","domContentLoadedEventStart","domContentLoadedEventEnd","domComplete","loadEventStart","loadEventEnd","type","redirectCount","decodedBodySize","encodedBodySize","transferSize"],t.Resource=["name","startTime","duration","initiatorType","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","decodedBodySize","encodedBodySize","transferSize"],t.Measure=["name","startTime","duration"],t.Memory=["jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize"],t.TimeOrigin=["timeOrigin"],t.LayoutShift=["startTime","value","hadRecentInput"],t.FirstInput=["name","startTime","duration","processingStart"],t.LargestContentfulPaint=["name","startTime","duration","renderTime","loadTime","size"]}(Vt||(Vt={})),function(t){t.Performance=0,t.PerformanceEntries=1,t.PerformanceMemory=2,t.Console=3,t.Ajax=4,t.PerformanceObserver=5,t.PerformanceTimeOrigin=7,t.WebAnimation=8,t.LayoutShift=9,t.FirstInput=10,t.LargestContentfulPaint=11,t.LongTask=12,t.HTMLDialogElement=13,t.CaptureOnStartEnabled=14,t.CanvasWatcherEnabled=15}(zt||(zt={})),function(t){t.Node=1,t.Sheet=2}($t||($t={})),function(t){t.StyleSheetHooks=0,t.SetPropertyHooks=1}(Gt||(Gt={})),function(t){t.Document="document",t.Event="evt",t.Page="page",t.User="user"}(Xt||(Xt={})),function(t){t.FsId="fsidentity",t.NewUid="newuid"}(Jt||(Jt={})),function(t){t.Elide=0,t.Record=1,t.Allowlist=2}(Zt||(Zt={})),function(t){t.Any=0,t.Exclude=1,t.Mask=2}(Yt||(Yt={})),function(t){t.Erase=0,t.MaskText=1,t.ScrubUrl=2,t.ScrubCss=3}(tn||(tn={})),function(t){t.Static=0,t.Prefix=1}(nn||(nn={})),function(t){t.SignalInvalid=0,t.SignalDeadClick=1,t.SignalRageClick=2}(rn||(rn={})),function(t){t.ReasonNoSuchOrg=1,t.ReasonOrgDisabled=2,t.ReasonOrgOverQuota=3,t.ReasonBlockedDomain=4,t.ReasonBlockedIp=5,t.ReasonBlockedUserAgent=6,t.ReasonBlockedGeo=7,t.ReasonBlockedTrafficRamping=8,t.ReasonInvalidURL=9,t.ReasonUserOptOut=10,t.ReasonInvalidRecScript=11,t.ReasonDeletingUser=12,t.ReasonNativeHookFailure=13}(en||(en={})),function(t){t.Unset=0,t.Exclude=1,t.Mask=2,t.Unmask=3,t.Watch=4,t.Keep=5,t.Defer=6}(sn||(sn={})),function(t){t.Unset=0,t.Click=1}(on||(on={})),function(t){t[t.Page=1]="Page",t[t.Bundle=2]="Bundle"}(un||(un={})),function(t){t[t.Error=3]="Error",t[t.Page=4]="Page",t[t.Bundle=5]="Bundle",t[t.Settings=6]="Settings"}(an||(an={})),function(t){t.MaxPerfMarksPerPage=16384,t.MaxLogsPerPage=1024,t.MaxUrlLength=2048,t.MutationProcessingInterval=250,t.CurveSamplingInterval=142,t.DefaultBundleUploadInterval=5e3,t.HeartbeatInitial=4e3,t.HeartbeatMax=256200,t.PageInactivityTimeout=18e5,t.BackoffMax=3e5,t.ScrollSampleInterval=t.MutationProcessingInterval/5,t.InactivityThreshold=4e3,t.MaxAjaxPayloadLength=16384,t.DefaultOrgSettings={MaxPerfMarksPerPage:t.MaxPerfMarksPerPage,MaxConsoleLogPerPage:t.MaxLogsPerPage,MaxAjaxPayloadLength:t.MaxAjaxPayloadLength,MaxUrlLength:t.MaxUrlLength,RecordPerformanceResourceImg:!0,RecordPerformanceResourceTiming:!0,HttpRequestHeadersAllowlist:[],HttpResponseHeadersAllowlist:[],UrlPrivacyConfig:[{Exclude:{Hash:[{Expression:"#.*"}],QueryParam:[{Expression:"(=)(.*)"}]}}],AttributeBlocklist:[{Target:Yt.Any,Tag:"*",Name:"",Type:nn.Prefix,Action:tn.Erase}]},t.DefaultStatsSettings={MaxPayloadLength:8192,MaxEventTypeLength:1024},t.BlockedFieldValue="__fs__redacted"}(cn||(cn={}));var vn,ln,dn,pn="_fs_uid",wn="_fs_cid",gn="_fs_lua";function mn(t,n,i,r){void 0!==i&&("function"==typeof t.addEventListener?t.addEventListener(n,i,r):"function"==typeof t.addListener&&t.addListener(i))}function yn(t,n,i,r){void 0!==i&&("function"==typeof t.removeEventListener?t.removeEventListener(n,i,r):"function"==typeof t.removeListener&&t.removeListener(i))}!function(t){t[t.Shutdown=1]="Shutdown",t[t.Starting=2]="Starting",t[t.Started=3]="Started"}(vn||(vn={})),function(t){t.Set=0,t.Function=1}(ln||(ln={})),function(t){t[t.Disabled=0]="Disabled",t[t.CaptureCanvasOps=1]="CaptureCanvasOps",t[t.ScreenshotCanvas=2]="ScreenshotCanvas"}(dn||(dn={}));var bn=function(){function t(){var t=this;this.T=[],this.C=[],this.P=!0,this.j=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t.P={capture:!0,passive:!0},t.j={capture:!1,passive:!0}}});window.addEventListener("test",J,n)}catch(t){}}return t.prototype.add=function(t,n,i,r,e){return void 0===e&&(e=!1),this.addCustom(t,n,i,r,e)},t.prototype.addCustom=function(t,n,i,r,e){void 0===e&&(e=!1);var s={target:t,type:n,fn:Tt.wrap(function(t){(e||!1!==t.isTrusted||"message"==n||t._fs_trust_event)&&r(t)}),options:i?this.P:this.j,index:this.T.length};return this.T.push(s),mn(t,n,s.fn,s.options),s},t.prototype.remove=function(t){t.target&&(yn(t.target,t.type,t.fn,t.options),t.target=null,t.fn=void 0)},t.prototype.clear=function(){for(var t=0;ti){n.Z||(n.Z=!0,Tt.sendToBugsnag("Out of time for remaining measurement tasks.","warning",{totalRunningTimeMs:a-t}));break t}}n.G=null}finally{n.X=!1,n.wnd}}}),this.wnd=t}return t.create=function(t){return t.ResizeObserver?new ai(t,t.ResizeObserver):new ci(t)},t.prototype.requestMeasureTask=function(t,n){var i,r=this;if(this.J>16)Tt.sendToBugsnag("Too much synchronous recursion in requestMeasureTask","error");else{var e=this.X?this.J:0,s=Tt.wrap(function(){var t=r.J;r.J=e+1;try{n()}finally{r.J=t}});this.G?this.G[t].push(s):(this.G=((i={})[ii.Essential]=[],i[ii.High]=[],i[ii.Medium]=[],i[ii.Low]=[],i[t]=[s],i),this.schedule())}},t.prototype.performMeasurementsNow=function(){this.performMeasurements()},t}(),ai=function(t){function n(n,i){var r=t.call(this,n)||this;return r.Y=i,r}return(0,e.__extends)(n,t),n.prototype.schedule=function(){var t=this,n=this.Y,i=this.wnd.document,r=i.documentElement||i.body||i.head,e=new n(function(){e.unobserve(r),t.performMeasurements()});e.observe(r)},n}(ui),ci=function(t){function n(n){return t.call(this,n)||this}return(0,e.__extends)(n,t),n.prototype.schedule=function(){(0,e.__awaiter)(void 0,void 0,Yn,function(){var t;return(0,e.__generator)(this,function(n){switch(n.label){case 0:return(t=o.requestWindowAnimationFrame)?[4,new Yn(function(n){return t(window,n)})]:[3,2];case 1:n.sent(),n.label=2;case 2:return[4,ei()];case 3:return n.sent(),[2];}})}).then(this.performMeasurements)},n}(ui);function hi(t,n){return n&&t.pageLeft==n.pageLeft&&t.pageTop==n.pageTop}function fi(t,n){return n&&t.width==n.width&&t.height==n.height}function vi(t){return{pageLeft:t.pageLeft,pageTop:t.pageTop,width:t.width,height:t.height}}var li=[["@import\\s+\"","\""],["@import\\s+'","'"]].concat([["url\\(\\s*\"","\"\\s*\\)"],["url\\(\\s*'","'\\s*\\)"],["url\\(\\s*","\\s*\\)"]]),di=".*?"+/(?:[^\\](?:\\\\)*)/.source,pi=new RegExp(li.map(function(t){var n=t[0],i=t[1];return"("+n+")("+di+")("+i+")"}).join("|"),"g"),wi=/url\(["']?(.+?)["']?\)/g,gi=/^\s*\/\//;function mi(t){return"BackCompat"==t.compatMode}function yi(t){return t&&t.body&&t.documentElement?mi(t)?[t.body.clientWidth,t.body.clientHeight]:[t.documentElement.clientWidth,t.documentElement.clientHeight]:[0,0]}var bi=function(){function t(t,n){var i,r,e,s;this.hasKnownPosition=!1,this.pageLeft=0,this.pageTop=0,this.width=0,this.height=0,this.clientWidth=0,this.clientHeight=0;var o=t.document;if(o&&o.documentElement&&o.body){i=yi(o),this.clientWidth=i[0],this.clientHeight=i[1];var u=t.visualViewport;if(u){this.hasKnownPosition=!0,this.pageTop=u.pageTop-u.offsetTop,this.pageLeft=u.pageLeft-u.offsetLeft,0==this.pageTop&&(this.pageTop=0),0==this.pageLeft&&(this.pageLeft=0);var a=null!==(e=xi(t,"innerWidth"))&&void 0!==e?e:0,c=null!==(s=xi(t,"innerHeight"))&&void 0!==s?s:0;if(a>0&&c>0)return this.width=a,void(this.height=c)}if(void 0!==n&&this.clientWidth==n.clientWidth&&this.clientHeight==n.clientHeight&&n.width>0&&n.height>0)return this.width=n.width,void(this.height=n.height);r=this.tt(t),this.width=r[0],this.height=r[1]}}return t.prototype.tt=function(t){var n=this.it(t,"width",this.clientWidth,this.clientWidth+128);void 0===n&&(n=xi(t,"innerWidth")),void 0===n&&(n=this.clientWidth);var i=this.it(t,"height",this.clientHeight,this.clientHeight+128);return void 0===i&&(i=xi(t,"innerHeight")),void 0===i&&(i=this.clientHeight),[n,i]},t.prototype.it=function(t,n,i,r){if(o.matchMedia){var e=i,s=r,u=o.matchMedia(t,"(min-"+n+": "+e+"px)");if(null!=u){if(u.matches&&o.matchMedia(t,"(max-"+n+": "+e+"px)").matches)return e;for(;e<=s;){var a=o.mathFloor((e+s)/2);if(o.matchMedia(t,"(min-"+n+": "+a+"px)").matches){if(o.matchMedia(t,"(max-"+n+": "+a+"px)").matches)return a;e=a+1}else s=a-1}}}},t}();function Ei(t,n){return new bi(t,n)}var Si=function(t,n){this.offsetLeft=0,this.offsetTop=0,this.pageLeft=0,this.pageTop=0,this.width=0,this.height=0,this.scale=0;var i=t.document;if(i.body){"pageXOffset"in t?(this.pageLeft=t.pageXOffset,this.pageTop=t.pageYOffset):i.scrollingElement?(this.pageLeft=i.scrollingElement.scrollLeft,this.pageTop=i.scrollingElement.scrollTop):mi(i)?(this.pageLeft=i.body.scrollLeft,this.pageTop=i.body.scrollTop):i.documentElement&&(i.documentElement.scrollLeft>0||i.documentElement.scrollTop>0)?(this.pageLeft=i.documentElement.scrollLeft,this.pageTop=i.documentElement.scrollTop):(this.pageLeft=i.body.scrollLeft||0,this.pageTop=i.body.scrollTop||0),this.offsetLeft=this.pageLeft-n.pageLeft,this.offsetTop=this.pageTop-n.pageTop;var r=0,e=0;try{r=t.innerWidth,e=t.innerHeight}catch(t){return}if(0!=r&&0!=e){this.scale=n.width/r,this.scale<1&&(this.scale=1);var s=n.width-n.clientWidth,o=n.height-n.clientHeight;this.width=r-s/this.scale,this.height=e-o/this.scale}}};function xi(t,n){try{return t[n]}catch(t){return}}function ki(t){var n=t;return n.tagName?"object"==typeof n.tagName?"form":n.tagName.toLowerCase():null}var _i,Ai,Ii=new RegExp("[^\\s]"),Ti=new RegExp("[\\s]*$");function Ci(t){var n=Ii.exec(t);if(!n)return t;for(var i=n.index,r=(n=Ti.exec(t))?t.length-n.index:0,e="\uFFFF",s=t.slice(i,t.length-r).split(/\r\n?|\n/g),o=0;o0&&n.length<1e4;){var i=n.pop();delete Mi[i.id],i.node._fs==i.id&&(i.node._fs=0),i.id=0,i.next&&n.push(i.next),i.child&&n.push(i.child)}jt(n.length<1e4,"clearIds is fast")}function Qi(t,n){void 0===n&&(n=1024);try{var i={tokens:[],opath:[],cyclic:Vi(t,n/4)};return $i(t,n,0,i),i.tokens.join("")}catch(t){return lt(t)}}function Vi(t,n){var i=0;try{o.jsonStringify(t,function(t,r){if(i++>n)throw"break";if("object"==typeof r)return r})}catch(t){return"break"!=t}return!1}var zi=function(t,n,i){return void 0===i&&(i="..."),t.length<=n?t:t.length<=i.length||n<=i.length?t.substring(0,n):t.substring(0,n-i.length)+i};function $i(t,n,i,r){if(n<1)return 0;var e=function(t){switch(!0){case function(t){return!(!t||t.constructor!=Date)}(t):return n=t,isNaN(n)?"Invalid Date":n.toUTCString();case function(t){return"object"==typeof Node?t instanceof Node:t&&"object"==typeof t&&t.nodeType>0&&"string"==typeof t.nodeName}(t):return function(t){return t.toString()}(t);case void 0===t:return"undefined";case"object"!=typeof t||null==t:return t;case t instanceof Error:return[t.toString(),t.stack].filter(Boolean).join(",");}var n}(t);if(void 0!==e){var s=function(t,n){var i=o.jsonStringify(t);return i&&"\""==i[0]?zi(i,n,"...\""):i}(e,n);return"string"==typeof s&&s.length<=n?(r.tokens.push(s),s.length):0}if(r.cyclic){r.opath.splice(i);var u=r.opath.lastIndexOf(t);if(u>-1){var a="";return a="\""+zi(a,n-2)+"\"",r.tokens.push(a),a.length}r.opath.push(t)}var c=n,h=function(t){return c>=t.length&&(c-=t.length,r.tokens.push(t),!0)},f=function(t){var n=r.tokens.length-1;","===r.tokens[n]?r.tokens[n]=t:h(t)};if(c<2)return 0;if(tt(t)){h("[");for(var v=0;v0;v++){var l=$i(t[v],c-1,i+1,r);if(c-=l,0==l&&!h("null"))break;h(",")}f("]")}else{h("{");var d=nt(t);for(v=0;v0;v++){var p=d[v],w=t[p];if(!h("\""+p+"\":"))break;if(0==(l=$i(w,c-1,i+1,r))){r.tokens.pop();break}c-=l,h(",")}f("}")}return n==1/0?1:n-c}var Gi,Xi,Ji=function(){function t(){var n=this;this.rt=Tt.wrap(function(){n.unregister(),n.et&&n.et()}),this.st=0,this.ot=t.ut++}return t.ct=function(){t.checkedAlready=!1,t.ht=0},t.checkForBrokenSchedulers=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i;return(0,e.__generator)(this,function(r){switch(r.label){case 0:return!o.requestWindowAnimationFrame||t.checkedAlready||(n=p())-t.ht<100?[2,!1]:(t.ht=n,t.checkedAlready=!0,[4,new Yn(function(t){return o.requestWindowAnimationFrame(window,t)})]);case 1:return r.sent(),i=[],rt(t.ft,function(t){var r=t.vt(n);r&&i.push(r)}),[4,Yn.all(i)];case 2:return r.sent(),o.requestWindowAnimationFrame(window,Tt.wrap(function(){t.checkedAlready=!1})),[2,!0];}})})},t.stopAll=function(){rt(this.ft,function(t){return t.stop()})},t.prototype.setTick=function(t){this.et=t},t.prototype.stop=function(){this.cancel(),delete t.ft[this.ot]},t.prototype.register=function(n){this.st=p()+100+1.5*n,t.ft[this.ot]=this},t.prototype.timerIsRunning=function(){return null!=t.ft[this.ot]},t.prototype.unregister=function(){delete t.ft[this.ot]},t.prototype.vt=function(t){if(t>this.st)return Yn.resolve().then(this.rt)["catch"](function(){})},t.ft={},t.ut=0,t.checkedAlready=!1,t.ht=0,t}(),Zi=function(t){function n(n){var i=t.call(this)||this;return i.lt=n,i.dt=-1,i}return(0,e.__extends)(n,t),n.prototype.start=function(t){var n=this;-1==this.dt&&(this.setTick(function(){t(),n.register(n.lt)}),this.dt=o.setWindowInterval(window,this.rt,this.lt),this.register(this.lt))},n.prototype.cancel=function(){-1!=this.dt&&(o.clearWindowInterval(window,this.dt),this.dt=-1,this.setTick(function(){}))},n}(Ji),Yi=function(t){function n(n,i,r){void 0===i&&(i=0);for(var e=[],s=3;sn&&(this.St=t-n,this.St>1e3&&this.kt("timekeeper set with future ts"))},t.prototype.kt=function(t){Qi({msg:t,skew:this.St,startTime:this.xt,wallTime:this.wallTime()},1024)},t}(),ir=function(){function t(t,n){this._t=t,this.At=n,this.It=!1,this.Tt={},this.Ct={},this.Pt={},this.jt=!1,this.Ot=!1,Gi=this,this.Mt=t.window.document}return t.prototype.start=function(){var t;(t=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value"))&&t.set&&(rr||(yt(HTMLInputElement,"value",ar),yt(HTMLInputElement,"checked",ar),yt(HTMLSelectElement,"value",ar),yt(HTMLTextAreaElement,"value",ar),yt(HTMLSelectElement,"selectedIndex",ar),yt(HTMLOptionElement,"selected",ar),rr=!0),1)||(this.It=!0)},t.prototype.hookInstance=function(t){if("input"===ki(t))switch(t.type){case"checkbox":case"radio":bt(t,"checked",ar);break;default:bt(t,"value",ar);}},t.prototype.addInput=function(t){if(t){var n=Bi(t);if(n){"input"===ki(t)&&this.Kt(t);var i=!1;if(function(t){switch(t.type){case"checkbox":case"radio":return t.checked!=t.hasAttribute("checked");default:return(t.value||"")!=function(t){if("select"!=ki(t))return t.getAttribute("value")||"";var n=t,i=n.querySelector("option[selected]")||n.querySelector("option");return i&&i.value||""}(t);}}(t)&&(this.Rt(t),i=!0),this.It&&(this.Tt[n]={elem:t}),!i)if(hr(t)){var r=or(t);t.checked&&(this.Pt[r]=n)}else this.Ct[n]=cr(t)}}},t.prototype.Kt=function(t){if(this.jt)this.Ot&&this.hookInstance(t);else{var n="checkbox"===t.type||"radio"===t.type?"checked":"value",i=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,n),r=Object.getOwnPropertyDescriptor(t,n);i&&r&&i!==r&&(this.Ot=!0,this.hookInstance(t)),this.jt=!0}},t.prototype.diffValue=function(t,n){void 0===n&&(n=cr(t));var i=Bi(t);if(!t||!i)return!1;if(hr(t)){var r=or(t);return this.Pt[r]===i!=("true"===n)}return this.Ct[i]!==n},t.prototype.onChange=function(t,n,i){void 0===i&&(i=cr(t));var r=Bi(t);t&&r&&(n||this.diffValue(t,i))&&this.Rt(t,n)},t.prototype.onKeyboardChange=function(t){var n,i=function(t){for(var n=t.activeElement;n&&n.shadowRoot;){var i=n.shadowRoot.activeElement;if(!i)return n;n=i}return n}(this.Mt);i&&("value"in(n=i)||"checked"in n)&&!Hi(i)&&this.diffValue(i)&&this.Rt(i,t)},t.prototype.tick=function(){for(var t in this.Tt){var n=this.Tt[t],i=n.elem;if(Bi(i))try{delete this.Tt[t];var r=cr(i);if(this.diffValue(i,r))this.Rt(i);else if(n.noFsIdInOption){var e=i;Array.prototype.slice.call(e.options).every(function(t){return Bi(t)})&&(n.noFsIdInOption=!1,this.Rt(i))}}finally{this.It&&(this.Tt[t]=n)}else delete this.Tt[t],delete this.Ct[t],hr(i)&&delete this.Pt[or(i)]}},t.prototype.stop=function(){Gi=void 0},t.prototype.Rt=function(t,n){var i=this;void 0===n&&(n=!1);var r=Bi(t);if(t&&r&&!this.Ht(r,t)){var e=cr(t);if(hr(t)){var s=or(t);"false"===e&&this.Pt[s]===r?delete this.Pt[s]:"true"===e&&(this.Pt[s]=r)}else this.Ct[r]=e;this._t.measurer.requestMeasureTask(ii.Medium,function(){var s=t.getBoundingClientRect(),o=s.width>0&&s.height>0,u=Ni(t)?Ci(e):e;i.At.enqueue({Kind:Ot.VALUECHANGE,Args:[r,u,n,o]})})}},t.prototype.Ht=function(t,n){if(this.Tt[t])return!0;if("select"!==ki(n))return!1;for(var i=n.options,r=0;r-1||wr.indexOf("Trident/")>-1,mr=(gr&&wr.indexOf("Trident/5"),gr&&wr.indexOf("Trident/6"),gr&&wr.indexOf("rv:11")>-1),yr=wr.indexOf("Edge/")>-1,br=(wr.indexOf("CriOS"),wr.indexOf("Snapchat")>-1),Er=/^((?!chrome|android).)*safari/i.test(window.navigator.userAgent);function Sr(){var t=window.navigator.userAgent.match(/Version\/(\d+)/);return t&&t[1]?parseInt(t[1],10):-1}function xr(t){if(!Er)return!1;var n=Sr();return n>=0&&n===t}function kr(t){if(!Er)return!1;var n=Sr();return n>=0&&nne?(Tt.sendToBugsnag("Ignoring huge text node","warning",{length:s}),""):t.parentNode&&"style"==ki(t.parentNode)?r:e.mask?Ci(r):r}function re(t){return Kr[t]||t.toLowerCase()}var ee=/^\s*((prefetch|preload|prerender)\s*)+$/i,se=/^\s*.*((worklet|script|worker|font|fetch)\s*)+$/i;function oe(t,n,i,r,e){var s,u;if(void 0===r&&(r=ki(t)),void 0===e&&(e=Ui(t)),null===r||""===n)return null;if("link"===r&&ee.test(null!==(s=t.getAttribute("rel"))&&void 0!==s?s:"")&&!se.test(null!==(u=t.getAttribute("as"))&&void 0!==u?u:""))return null;var a,c="style"===n?ae(i):i,h=function(t,n,i){var r,e,s,u,a,c,h,f,v,l,d,p,w,g=void 0;(null===(r=null==n?void 0:n.watchKind)||void 0===r?void 0:r.has(_i.Exclude))?g=Yt.Exclude:(null==n?void 0:n.mask)&&(g=Yt.Mask);var m=[null===(u=null===(s=null===(e=Ee.blocklist[Yt.Any])||void 0===e?void 0:e[t])||void 0===s?void 0:s["static"])||void 0===u?void 0:u[i],null===(h=null===(c=null===(a=Ee.blocklist[Yt.Any])||void 0===a?void 0:a["*"])||void 0===c?void 0:c["static"])||void 0===h?void 0:h[i],g?null===(l=null===(v=null===(f=Ee.blocklist[g])||void 0===f?void 0:f[t])||void 0===v?void 0:v["static"])||void 0===l?void 0:l[i]:void 0,g?null===(w=null===(p=null===(d=Ee.blocklist[g])||void 0===d?void 0:d["*"])||void 0===p?void 0:p["static"])||void 0===w?void 0:w[i]:void 0];return Ee.hasPrefix&&m.push(ke(Yt.Any,t,i),ke(Yt.Any,"*",i),g?ke(g,t,i):void 0,g?ke(g,"*",i):void 0),function(t){var n=t.filter(function(t){return void 0!==t});if(0!==n.length)return o.mathMin.apply(o,n)}(m)}(r,e,n);if(void 0===h&&!e)return null;switch(h){case void 0:return c;case tn.Erase:return null;case tn.MaskText:return Ci(c);case tn.ScrubCss:return a=function(t,n,i){return""+t+Se+i},c.replace(pi,function(t){for(var n=[],i=1;i-1)return f.substring(v)}return f;default:return(0,Ir.nt)(h);}}var ue={},ae=function(t,n){void 0===n&&(n=window);try{var i=n.location,r=""+i.origin+i.pathname+i.search,e=ue[r];return e?e.lastIndex=0:(e=new RegExp((s=r,($r.test(s)?s.replace(zr,"\\$&"):s)+"/?(#)"),"g"),ue[r]=e),t.replace(e,"https://fs-currenturl.invalid$1")}catch(n){return Ut("cleanCSS",n),t}var s},ce=/^data:/i;function he(t,n){if(ce.test(t))return t;switch(n.source){case"dom":switch(i=n.type){case"frame":case"iframe":return we(t);default:return fe(t);}case"event":switch(i=n.type){case Ot.AJAX_REQUEST:case Ot.NAVIGATE:return fe(t);case Ot.SET_FRAME_BASE:return we(t);default:return(0,Ir.nt)(i);}case"log":return we(t);case"page":var i;switch(i=n.type){case"base":return we(t);case"referrer":case"url":return fe(t);default:return(0,Ir.nt)(i);}case"perfEntry":switch(n.type){case"frame":case"iframe":case"navigation":case"other":return we(t);default:return fe(t);}default:return(0,Ir.nt)(n);}}function fe(t){return ge(de,t)}var ve=cn.DefaultOrgSettings.MaxUrlLength,le=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig),de=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig);function pe(t,n){le=Rr(cn.DefaultOrgSettings.UrlPrivacyConfig.concat(t)),de=Rr(t),ve=n||cn.DefaultOrgSettings.MaxUrlLength}function we(t){return ge(le,t)}function ge(t,n){return function(t,n,i){void 0===i&&(i=Lr);for(var r={Hash:[],Host:[],Path:[],QueryParam:[],Query:[]},e=0,s=t;e").replace(ye,function(t){return he(t,{source:"log",type:"debug"})})}var Ee,Se="https://fs-excluded.invalid";function xe(t){var n,i,r,e,s,o,u,a,c,h,f,v,l,d,p,w;try{for(var g=(Ee={blocklist:{},hasPrefix:!1}).blocklist,m=(null!==(r=null==t?void 0:t.length)&&void 0!==r?r:0)>0?t:cn.DefaultOrgSettings.AttributeBlocklist,y={},b=0,E=m;b-1;var n}var Te="#polyfillshadow";function Ce(t){var n;return(null===(n=t.childNodes)||void 0===n?void 0:n.length)>0}function Pe(t,n){Oe(t.childNodes,n)}function je(t,n){Oe(t.childNodes,n,!0)}function Oe(t,n,i){void 0===i&&(i=!1);for(var r=i?t.length-1:0,e=i?-1:t.length;r!==e;){var s=t[r];s&&"frag"in s&&!St(s)&&Array.isArray(s.frag)?s.frag.length&&Oe(s.childNodes,n,i):n(s),i?--r:++r}}var Me={INPUT:!0,TEXTAREA:!0,NOSCRIPT:!0},Ke=function(){function t(t,n,i){this.Xt=t,this.Jt=n,this.Zt=i,Mi={},Ki=1}return t.prototype.tokenizeNode=function(t,n,i,r,e,s,o){var u=this,a=Ui(n),c=Ui(i),h=[];return function(n){var i=Ki;try{return u.Yt(t,a,c,r,h,e,s,o),!0}catch(t){return Ki=i,!1}}()||(h=[]),h},t.prototype.Yt=function(t,n,i,r,s,o,u,a){for(var c,h,f=[{parentMirror:n,nextMirror:i,node:r}],v=function(t,n){return function(i){i&&t.push({parentMirror:n,nextMirror:null,node:i})}};f.length;){var l=f.pop();if(l)if("string"!=typeof l){var d=l.node,p=ki(d),w=this.tn(t,p,l,s,o,u);if(null!=w&&!(null===(c=w.watchKind)||void 0===c?void 0:c.has(_i.Exclude))){var g=1===d.nodeType?d.shadowRoot:null,m=w.shadowRootType===Te&&window.HTMLSlotElement&&"slot"===p&&d.assignedNodes();if(g||m||Ce(d))if(null===(h=w.watchKind)||void 0===h?void 0:h.has(_i.Defer))a(w.node,Ai.Deferred);else{if(f.push("]"),je(d,v(f,w)),g)f.push({parentMirror:w,nextMirror:null,node:g});else if(m&&m.length>0){for(var y=[],b=!1,E=0,S=m;E1e3)return null;if(!i||1!=i.nodeType)return null;var r=i;if(getComputedStyle(r).display.indexOf("inline")<0)return r;i=i.parentNode}},n}(Ze),ts=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return(0,e.__extends)(n,t),n.prototype.observe=function(t){var n=this;if(t&&1==t.nodeType){var i=t;this.Tn(Ui(t)),this._t.measurer.requestMeasureTask(ii.Medium,function(){n.addEntry(i)})}},n.prototype.unobserveSubtree=function(t){var n=Ui(t);n&&this.Cn(n)},n.prototype.nodeChanged=function(t){var n=this,i=this.Pn(t);this._t.measurer.requestMeasureTask(ii.Medium,function(){for(var t=0,r=i;t0||this.Hn.length>0){var r={},s={};for(var o in (this.Gn(t,i,s,r), s)){var u=o.split("\t");i.push({Kind:Ot.MUT_ATTR,Args:[parseInt(u[0],10),u[1],s[o]],When:t})}for(var o in r)i.push({Kind:Ot.MUT_TEXT,Args:[parseInt(o,10),r[o]],When:t})}var a=this.Rn;this.Rn=[];for(var c=0;c0&&(i.push({Kind:Ot.DEFERRED_RESOLVED,Args:(0,e.__spreadArray)([],this.Ln),When:t}),this.Ln=[]),this.Nn.length>0){for(var f=0,v=this.Nn;f0&&this.Un.push(es(l))}this.Nn=[]}return i},t.prototype.recordingIsDetached=function(){return!!this.Wn&&this.Wn!=this.Dn.document},t.prototype.$n=function(t,n){if(!this.Kn&&this.Wn){window;var i=this.Xt.allWatchedElements(this.Wn);this.Zn(i,t,n,null,this.Wn,null),this.Jt.nodeChanged(this.Wn),this.qn&&this.Xn(this.Wn),this.Kn=!0,this.Yn(),window}},t.prototype.Yn=function(){var t=this;this.zn=mt(Element.prototype,"attachShadow",!0),this.zn&&this.zn.before(function(n){n.that.shadowRoot||t.Rn.push(n.that)})},t.prototype.Xn=function(t){var n;try{null===(n=this.qn)||void 0===n||n.observe(t,{childList:!0,attributes:!0,characterData:!0,subtree:!0,attributeOldValue:!0,characterDataOldValue:!0})}catch(t){}},t.prototype.Gn=function(t,n,i,r){for(var e,s,o,u,a=this,c={},h={},f=function(i){if(Ui(i)){a.ti(t,n,Ui(i));var r=Ui(i.parentNode);r&&(h[r.id]=r.node)}},v=0;v0)for(var m=0;m0){h[g]=l.target;var y=!(null==(T=l.target)?void 0:T.shadowRoot)||Ie(T.shadowRoot)?null:Ui(T.shadowRoot);y&&(h[y.id]=y.node)}break;case"characterData":Hi(l.target)||l.oldValue!=l.target.textContent&&(r[g]=ie(l.target));break;case"attributes":var b=ki(j=l.target);if("link"===b&&"rel"===l.attributeName&&ee.test(null!==(o=l.oldValue)&&void 0!==o?o:"")){f(j);break}var E,S=Li(j),x=this.Xt.isWatched(j);if($e(x)>$e(S)){f(j);break}De.needsToObserve(S,x)&&(this.Jt.observe(j),(null==x?void 0:x.has(_i.Watch))&&(null===(u=this.Zt)||void 0===u||u.observe(j)),(E=Ui(j))&&(E.watchKind=De.combineKindsPreservePrivacy(S,x)));var k=(void 0===(I=l.attributeNamespace)&&(I=""),(null===I?"":{"http://www.w3.org/1999/xlink":"xlink:","http://www.w3.org/XML/1998/namespace":"xml:","http://www.w3.org/2000/xmlns/":"xmlns:"}[I]||"")+(l.attributeName||"")),_=re(k);if("dialog"===b&&"open"===k)break;if(j.hasAttribute(k)){var A=l.target.getAttribute(k);l.oldValue!=A&&(A=oe(l.target,_,A||"",b),this.Mn(b,l.target,((e={})[_]=A||"",e)),null!==A&&(i[g+"\t"+_]=A))}else i[g+"\t"+_]=null;}}catch(t){}for(var I,T,C=0,P=this.Hn;C0&&i.push({Kind:Ot.MUT_SHADOW,Args:[s,u],When:n},{Kind:Ot.TIMING,Args:[[Nt.Internal,Kt.Serialization,Ht.NodeEncoding,n,a]],When:n})},t.prototype.Zn=function(t,n,i,r,e,s){var o=Di(r)||-1,u=Di(s)||-1,a=-1===o&&-1===u,c=p();window;var h=this.ei(t,r,e,s);window;var f=p()-c;h.length>0&&i.push({Kind:Ot.MUT_INSERT,Args:[o,u,h],When:n},{Kind:Ot.TIMING,Args:[[Nt.Internal,Kt.Serialization,a?Ht.DomSnapshot:Ht.NodeEncoding,n,f]],When:n})},t.prototype.ei=function(t,n,i,r){var e=this;if(n&&Hi(n))return[];for(var s=[],o=this.Bn.tokenizeNode(t,n,r,i,function(t){if(1==t.nodeType){var n=t;if(n.shadowRoot&&e.Xn(n.shadowRoot),"SLOT"===t.nodeName){var i=Ui(t);(null==i?void 0:i.shadowRootType)===Te&&t.addEventListener("slotchange",Tt.wrap(function(n){var i;e.Hn.push(null!==(i=n.target)&&void 0!==i?i:t)}))}}e.jn(t,s)},this.Mn,function(t,n){switch(n){case Ai.Immediate:e.refreshElement(t);break;case Ai.Deferred:e.Nn.push(t);}}),u=0,a=s;u0){var e=n[n.length-1];if(e.Kind==Ot.MUT_REMOVE)return void e.Args.push(r)}n.push({Kind:Ot.MUT_REMOVE,Args:[r],When:t})},t.prototype.setUpIEWorkarounds=function(){var n=this;if(mr){var i=Object.getOwnPropertyDescriptor(Node.prototype,"textContent"),r=i&&i.set;if(!i||!r)throw new Error("Missing textContent setter -- not safe to record mutations.");Object.defineProperty(Element.prototype,"textContent",(0,e.__assign)((0,e.__assign)({},i),{set:function(t){try{for(var n=void 0;n=this.firstChild;)this.removeChild(n);if(null===t||""==t)return;var i=(this.ownerDocument||document).createTextNode(t);this.appendChild(i)}catch(n){r&&r.call(this,t)}}}))}this.si=new tr(t.ThrottleMax,t.ThrottleInterval,function(){return new Yi(function(){n.Fn=!0,n.tearDownIEWorkarounds()}).start()});var s=this.si.guard(function(t){var n=t.cssText;t.cssText=n});this.si.open(),this.oi=mt(CSSStyleDeclaration.prototype,"setProperty"),this.oi&&this.oi.afterSync(function(t){s(t.that)}),this.ui=mt(CSSStyleDeclaration.prototype,"removeProperty"),this.ui&&this.ui.afterSync(function(t){s(t.that)})},t.prototype.tearDownIEWorkarounds=function(){this.si&&this.si.close(),this.oi&&this.oi.disable(),this.ui&&this.ui.disable()},t.prototype.updateConsent=function(){var t=this;this.Wn&&Pe(this.Wn,function(n){return t.refreshElement(n)})},t.prototype.refreshElement=function(t){Di(t)&&this.Hn.push(t)},t.ThrottleMax=1024,t.ThrottleInterval=1e4,t;}();function os(t){for(var n=new WeakMap,i=t;i;i=i.parentNode){if(n.has(i))return null;if(n.set(i,!0),11===i.nodeType)break}if(!i)return null;var r=Ui(i);return(null==r?void 0:r.shadowRootType)===Te&&(null==r?void 0:r.parent)?[r.parent.id,r.parent.node]:null}var us="navigation",as="resource",cs="paint",hs="measure",fs="mark",vs="layout-shift",ls="first-input",ds="largest-contentful-paint",ps="longtask",ws=function(){function t(t,n,i,r){var e=this;this._t=t,this.At=n,this.ai=r,this.ci=!1,this.hi=!1,this.fi=!1,this.vi=!1,this.li=!1,this.di=!1,this.pi=!1,this.wi=cn.DefaultOrgSettings.MaxPerfMarksPerPage,this.gi=0,this.mi=!1,this.yi=!1,this.bi=!1,this.Ei=!1,this.Si=0,this.xi=!1,this.qn=null,this.ki=[],this._i=new Yn(function(t){e.Ai=function(){t({timeRemaining:function(){return Number.POSITIVE_INFINITY},didTimeout:!1}),e.Ai=void 0}}),this.Ii=!1;var s=window.performance;s&&(this.fi=!0,s.timing&&(this.vi=!0),s.memory&&(this.di=!0),s.timeOrigin&&(this.pi=!0),"function"==typeof s.getEntries&&(this.li=!0),this.mi=gs(window,vs),this.yi=gs(window,ls),this.bi=gs(window,ds),this.Ei=gs(window,ps),this.T=i.createChild())}return t.prototype.initialize=function(t){var n=t.resourceUploader,i=t.recTimings,r=t.recImgs,e=t.maxPerfMarksPerPage;this.Ti=n,this.hi=i,this.ci=r,this.wi=e||cn.DefaultOrgSettings.MaxPerfMarksPerPage},t.prototype.start=function(){var t=this;this.gi=0;var n=window.performance;n&&(this._t.recording.inFrame||this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Performance,this.vi,zt.PerformanceEntries,this.li,zt.PerformanceMemory,this.di,zt.PerformanceObserver,!!window.PerformanceObserver,zt.PerformanceTimeOrigin,this.pi,zt.LayoutShift,this.mi,zt.FirstInput,this.yi,zt.LargestContentfulPaint,this.bi,zt.LongTask,this.Ei]}),this.Xn(),!this.qn&&n.addEventListener&&n.removeEventListener&&this.T&&this.T.add(n,"resourcetimingbufferfull",!0,function(){t.At.enqueue({Kind:Ot.RESOURCE_TIMING_BUFFER_FULL,Args:[]})}),this.Ci(),this.Pi())},t.prototype.ji=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(t){switch(t.label){case 0:if(!this.fi||!this.li||0==this.ki.length)return[2];if(this.Ii)return[2];this.Ii=!0,t.label=1;case 1:return t.trys.push([1,,3,4]),[4,this.Oi()];case 2:return t.sent(),[3,4];case 3:return this.Ii=!1,this.ki=[],[7];case 4:return[2];}})})},t.prototype.Mi=function(){return this.Ai?Yn.race([this._i,si(250,1e3)]):this._i},t.prototype.Oi=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t,n,i,r,s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t=0,n=0,i=this.ki,e.label=1;case 1:if(!(nt?[4,this.Mi()]:[3,4]):[3,6];case 3:a=e.sent(),t=p()+Math.max(a.timeRemaining(),15),e.label=4;case 4:this.Ki(u),e.label=5;case 5:return s++,[3,2];case 6:return n++,[3,1];case 7:return[2];}})})},t.prototype.onLoad=function(){this.xi||(this.xi=!0,this.vi&&(this.Ri(performance.timing),this.ji()))},t.prototype.tick=function(){this.Ci()},t.prototype.stop=function(){var t;this.T&&this.T.clear(),this.Ti=void 0;var n=[];this.qn?(this.qn.takeRecords&&(n=this.qn.takeRecords()),this.qn.disconnect()):window.performance&&window.performance.getEntries&&(n=window.performance.getEntries()),n.length>300&&(n=n.slice(0,300),this.At.enqueue({Kind:Ot.RESOURCE_TIMING_BUFFER_FULL,Args:[]})),this.Ci(),null===(t=this.Ai)||void 0===t||t.call(this),this.ki.push(n),this.ji()},t.prototype.Xn=function(){var t=this;if(!this.qn&&this.li&&window.PerformanceObserver){this.ki.push(performance.getEntries()),this.ji(),this.qn=new window.PerformanceObserver(function(n){var i=n.getEntries();t.ki.push(i),t.ji()});var n=[us,as,hs,fs];window.PerformancePaintTiming&&n.push(cs),this.mi&&n.push(vs),this.yi&&n.push(ls),this.bi&&n.push(ds),this.Ei&&n.push(ps),this.qn.observe({entryTypes:n})}},t.prototype.Ci=function(){if(this.di&&!this._t.recording.inFrame){var t=performance.memory;if(t){var n=t.usedJSHeapSize-this.Si;(0==this.Si||o.mathAbs(n/this.Si)>.2)&&(this.Hi(Qt.Memory,t,Vt.Memory),this.Si=t.usedJSHeapSize)}}},t.prototype.Pi=function(){var t={timeOrigin:d.timeOrigin};this.Hi(Qt.TimeOrigin,t,Vt.TimeOrigin)},t.prototype.Ki=function(t){switch(t.entryType){case us:this.Ni(t);break;case as:this.Li(t);break;case cs:this.Ui(t);break;case hs:this.Fi(t);break;case fs:this.Di(t);break;case vs:this.Bi(t);break;case ls:this.Wi(t);break;case ds:this.qi(t);break;case ps:this.Qi(t);}},t.prototype.Ri=function(t){this.Hi(Qt.Timing,t,Vt.Timing)},t.prototype.Ni=function(t){this.Hi(Qt.Navigation,t,Vt.Navigation,{name:us})},t.prototype.Li=function(t){if(this.hi){var n=t.initiatorType;(this.ci||"img"!==n&&"image"!==n)&&this.Hi(Qt.Resource,t,Vt.Resource,{name:n})}},t.prototype.Ui=function(t){this.Hi(Qt.Paint,t,Vt.Measure)},t.prototype.Di=function(t){this.Hi(Qt.Mark,t,Vt.Measure)},t.prototype.Fi=function(t){this.Hi(Qt.Measure,t,Vt.Measure)},t.prototype.Bi=function(t){this.Hi(Qt.LayoutShift,t,Vt.LayoutShift)},t.prototype.Wi=function(t){this.Hi(Qt.FirstInput,t,Vt.FirstInput)},t.prototype.qi=function(t){this.Hi(Qt.LargestContentfulPaint,t,Vt.LargestContentfulPaint)},t.prototype.Qi=function(t){this.Hi(Qt.LongTask,t,Vt.Measure)},t.prototype.Hi=function(t,n,i,r){if(void 0===r&&(r={}),!this.atLimit(t)){for(var e=[t],s=0,o=i;s=this.wi)return!0;this.gi++;}return!1},t}();function gs(t,n){var i,r;return(null!==(r=null===(i=t.PerformanceObserver)||void 0===i?void 0:i.supportedEntryTypes)&&void 0!==r?r:[]).indexOf(n)>-1}function ms(t){var n=0,i={id:n++,edges:{}};return t.split("\n").forEach(function(t){var r=t.trim();if(""!=r){if(0==r.indexOf("/")||r.lastIndexOf("/")==r.length-1)throw new Error("Leading and trailing slashes are not supported");var e=i,s=r.split("/");s.forEach(function(t,i){var r=t.trim();if(""===r)throw new Error("Empty elements are not allowed");if("**"!=r&&"*"!=r&&-1!=r.indexOf("*"))throw new Error("Embedded wildcards are not supported");var o=null;r in e.edges&&(o=e.edges[r]),o||(o={id:n++,edges:{}},e.edges[r]=o),i==s.length-1&&(o.term=!0),e=o})}}),i}var ys=ms("**");function bs(t,n,i){if(!js(i)){try{for(var r=[],e=0,s=i;e=n&&(v?e=void 0:(e="_fs_trimmed_values",v=!0)),f[f.length-1]--,e&&e!==cn.BlockedFieldValue&&s?f.push(o.objectKeys(e).length):c.pop();f[f.length-1]<=0;)f.pop(),c.pop();for(var u=0,a=r;u0&&l!==f.length-1)throw new Error("Property matcher depth out of sync")}return e})}catch(t){Tt.sendToBugsnag(t,"error")}return"[error serializing "+t.constructor.name+"]"}}var Es=function(){function t(t){this.zi=1;var n=[t];t.edges["**"]&&n.push(t.edges["**"]),this.$i=[n]}return t.prototype.Gi=function(){if(this.$i.length<=0)return[];var t=this.$i.length-1,n=this.$i[t];return"number"==typeof n?this.$i[t-1]:n},t.prototype.depth=function(){return this.zi},t.prototype.isRedacted=function(t){var n=this.Gi();return 0===n.length||t&&!n.some(function(t){return t.term})},t.prototype.push=function(t){var n;this.zi++;var i=this.Gi(),r=[];function e(n){n.edges["**"]&&(r.push(n.edges["**"],Ss(n)),e(n.edges["**"])),n.edges["*"]&&r.push(n.edges["*"]),n.edges[t]&&r.push(n.edges[t])}for(var s=0,o=i;s0&&this.zi--;var t=this.$i[this.$i.length-1];"number"==typeof t&&t>1?this.$i[this.$i.length-1]--:this.$i.pop()},t}();function Ss(t){var n=t.edges["**"];if(!n)throw new Error("Node must have double-wildcard edge.");return ot(t.edges,1)?{id:-n.id,edges:{"**":n}}:t}var xs,ks,_s,As=function(){function t(t){this.Xi=t,this.Ji=null}return t.prototype.disable=function(){this.Ji&&(this.Ji.disable(),this.Ji=null)},t.prototype.enable=function(t){var n,i=this,r=T(t),s=null===(n=null==r?void 0:r._w)||void 0===n?void 0:n.fetch;(s||t.fetch)&&(this.Ji=mt(s?r._w:t,"fetch"),this.Ji&&this.Ji.afterSync(function(t){var n=t.result;t.result=(0,e.__awaiter)(i,void 0,void 0,function(){return(0,e.__generator)(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.Zi(n,t.args[0],t.args[1])];case 1:case 2:return i.sent(),[3,3];case 3:return[2,n];}})})}))},t.prototype.Zi=function(t,n,i){return (0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u,a,c;return (0,e.__generator)(this,function(e){switch(e.label){case 0:return r="GET",s="",a=!1,"string"==typeof n?s=n:"url"in n?(s=n.url,r=n.method,o=n.body,u=n.headers,a=!!n.signal):s=""+n,s?(i&&(r=i.method||r,u=Ds(i.headers),o=i.body||o,a=!!i.signal||a),c=this.Yi(t),a&&s.search(/\/(graphql|gql)/i)>-1?[4,Yn.race([c,ni(5e3)])]:[3,2]):[2];case 1:e.sent(),e.label=2;case 2:return this.Xi.startRequest(r,s,{body:function(){return o},headers:u},c),[2];}});});},t.prototype.Yi=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i,r,s;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return[4,t];case 1:if(n=e.sent(),i=n.headers,r=(i.get("content-type")||"default").split(";")[0],!(["default","text/plain","text/json","application/json"].indexOf(r)>-1))return[2,{status:n.status,data:{headers:i,body:null}}];s=null,e.label=2;case 2:return e.trys.push([2,4,,5]),[4,n.clone().text()];case 3:return s=e.sent(),[3,5];case 4:return e.sent(),[3,5];case 5:return[2,{status:n.status,data:{headers:i,body:s}}];}})})},t;}(),Is=function(){function t(t){this.Xi=t,this.tr=new WeakMap}return t.prototype.disable=function(){this.nr&&(this.nr.disable(),this.nr=null),this.ir&&(this.ir.disable(),this.ir=null),this.rr&&(this.rr.disable(),this.rr=null)},t.prototype.er=function(t){var n=this.tr.get(t);if(n)return n;var i={};return this.tr.set(t,i),i},t.prototype.enable=function(t){var n,i,r,s,o=this,u=T(t),a=(null===(n=null==u?void 0:u._w)||void 0===n?void 0:n.XMLHttpRequest)||t.XMLHttpRequest;if(a){var c=a.prototype;this.nr=null===(i=mt(c,"open"))||void 0===i?void 0:i.before(function(t){var n=o.er(t.that);n.method=t.args[0],n.url=t.args[1]}),this.rr=null===(r=mt(c,"setRequestHeader"))||void 0===r?void 0:r.before(function(t){var n=t.that,i=t.args[0],r=t.args[1],e=o.er(n);e.headers||(e.headers=[]),e.headers.push([i,r])}),this.ir=null===(s=mt(c,"send"))||void 0===s?void 0:s.before(function(t){var n=t.that,i=t.args[0],r=o.er(n),s=r.url,u=r.method,a=r.headers;void 0!==s&&void 0!==u&&(o.tr["delete"](n),o.Xi.startRequest(u,s,{headers:Ds(a),body:i},function(t){return (0,e.__awaiter)(this,void 0,Yn,function(){var n;return (0,e.__generator)(this,function(i){switch(i.label){case 0:return[4,new Yn(function(n){t.addEventListener("readystatechange",function(){t.readyState===XMLHttpRequest.DONE&&n()}),t.addEventListener("load",n),t.addEventListener("error",n)})];case 1:return i.sent(),n=function(t){if(t)return {forEach:function(n){for(var i,r=/([^:]*):\s+(.*)(?:\r\n|$)/g;i=r.exec(t);)n(i[2],i[1])}};}(t.getAllResponseHeaders()),[2,{status:t.status,data:{headers:n,body:function(){return"text"===t.responseType?t.responseText:t.response}}}];}});});}(n)))})}},t;}(),Ts=/^data:/i,Cs=function(){function t(t,n){this._t=t,this.At=n,this.sr=!1,this.ur=new Ps(t,n),this.ar=new Is(this.ur),this.cr=new As(this.ur)}return t.prototype.isEnabled=function(){return this.sr},t.prototype.start=function(t){t.AjaxWatcher&&(this.sr||(this.sr=!0,this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Ajax,!0]}),this.ar.enable(this._t.window),this.cr.enable(this._t.window)))},t.prototype.stop=function(){this.sr&&(this.sr=!1,this.ar.disable(),this.cr.disable())},t.prototype.tick=function(){this.ur.tick()},t.prototype.setWatches=function(t){this.ur.setWatches(t)},t.prototype.initialize=function(t){this.ur.initialize(t)},t}(),Ps=function(){function t(t,n){this._t=t,this.At=n,this.hr=[],this.vr={},this.lr={},this.dr=[],this.pr=0;var i=cn.DefaultOrgSettings;this.initialize({requests:i.HttpRequestHeadersAllowlist,responses:i.HttpResponseHeadersAllowlist,maxAjaxPayloadLength:i.MaxAjaxPayloadLength})}return t.prototype.wr=function(t){for(var n=!1,i=!1,r=[],e=[],s=0,o=this.hr;s-1}function Os(t,n,i){return[t.length,Ns(t,n,i)]}function Ms(t,n,i){var r=void 0;return js(n)||(r=bs(t,i,n)),[Hs(t),r]}function Ks(t,n){var i=t.byteLength,r=void 0;return js(n)||(r="[ArrayBuffer]"),[i,r]}function Rs(t,n,i){return(0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:if(s=(r=t).size,js(n))return[2,[s,void 0]];switch(r.type){case"application/json":case"application/vnd.api+json":case"text/plain":return[3,1];}return[3,4];case 1:return e.trys.push([1,3,,4]),[4,r.text()["catch"](function(t){Tt.sendToBugsnag(t,"warning")})];case 2:return(o=e.sent())&&(u=Ns(o,n,i))?[2,[s,u]]:[3,4];case 3:return a=e.sent(),Tt.sendToBugsnag(a,"warning"),[3,4];case 4:return[2,[s,"[Blob]"]];}})})}function Hs(t){try{return o.jsonStringify(t).length}catch(t){}return 0}function Ns(t,n,i){if(!js(n))try{return bs(o.jsonParse(t),i,n)}catch(r){return n.length>0&&n.every(function(t){return!0===t})?t.slice(0,i):void 0}}function Ls(t,n){switch(t){default:case Zt.Elide:return!1;case Zt.Record:return!0;case Zt.Allowlist:try{return ms(n)}catch(t){return!1}}}function Us(t,n,i,r){var s;return(0,e.__awaiter)(this,void 0,Yn,function(){var o,u,a,c,h,f,v;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return o="",null===(s=r.headers)||void 0===s||s.forEach(function(n,i){var r=i.toLowerCase(),e=t[r];o+=r+(e?": "+n:"")+"\r\n"}),"function"!=typeof(u=null==r?void 0:r.body)?[3,2]:[4,u()];case 1:return a=e.sent(),[3,3];case 2:a=u,e.label=3;case 3:return[4,Fs(n,a,i)];case 4:return c=e.sent(),h=c[0],f=c[1],v=0!==h||f?qt.NotEmpty:qt.Unknown,[2,{headers:o,text:f,size:h,legibility:v}];}})})}function Fs(t,n,i){return void 0===i&&(i=cn.DefaultOrgSettings.MaxAjaxPayloadLength),(0,e.__awaiter)(this,void 0,Yn,function(){var r;return(0,e.__generator)(this,function(e){if(null==n)return[2,[0,void 0]];switch(typeof n){default:return[2,[-1,js(t)?void 0:"[unknown]"]];case"string":return[2,Os(n,t,i)];case"object":switch(r=n.constructor){case Object:default:return[2,Ms(n,t,i)];case Blob:return[2,Rs(n,t,i)];case ArrayBuffer:return[2,Ks(n,t)];case Document:case FormData:case URLSearchParams:case ReadableStream:return[2,[-1,js(t)?void 0:""+r.name]];}}return[2]})})}function Ds(t){return t?tt(t)?{forEach:function(n){for(var i=0,r=t;i-1){if(n.unshift(e),r instanceof CSSStyleSheet)break;i=r}else Tt.sendToBugsnag("Could not find intermediate rule in parent","warning")}return n},t.prototype.Wr=function(t,n){for(var i=0;i=t?(this.oe-=t,[!0,0]):[!1,(t-this.oe)/this.ne]},t}())(2,2e5),ho=new Set(["measureText","getImageData","getError","getTransform","isContextLost","isEnabled","isFramebuffer","isProgram","isRenderbuffer","isShader","isTexture"]),fo=new Set(["fillText"]),vo=function(){function t(t,n,i,r){this.At=n,this.Ti=i,this.ai=r,this.ue=dn.CaptureCanvasOps,this.ae=[],this.ce=[],this.he=new WeakMap,this.fe=new WeakMap,this.ve=new Set,this.le=0,this.de=new WeakMap,this.pe=!1,this.we=new WeakMap,this.ge=new Set,this.me=new WeakMap,this.ye=1,this.be=new WeakMap,this.Ee=1,this.Se=0,this.xe=!1}return t.prototype.start=function(t){var n,i=this;if(t.CanvasWatcherMode&&(this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.CanvasWatcherEnabled,!0]}),this.pe=!0,this.ue=null!==(n=t.CanvasWatcherMode)&&void 0!==n?n:dn.CaptureCanvasOps,this.Ji("2d",CanvasRenderingContext2D),this.Ji("webgl",WebGLRenderingContext),this.ue===dn.ScreenshotCanvas)){if(!HTMLCanvasElement.prototype.toDataURL)return;this.le=setInterval(function(){return i.screenshotConnectedCanvases()},1e3)}},t.prototype.ke=function(t,n){return"object"!=typeof n?[void 0,0]:(this.be.has(n)||this.be.set(n,[t,this.Ee++]),this.be.get(n))},t.prototype.Ji=function(t,n){var i=this;if(n)for(var r=n.prototype,e=function(e){if(ho.has(e))return"continue";var o=Object.getOwnPropertyDescriptor(r,e);if("function"==typeof(null==o?void 0:o.value)){var u=mt(r,e);u&&(u.afterSync(function(n){return i._e(t,e,n.that,n.args,n.result)}),s.ae.push(u))}else"function"==typeof(null==o?void 0:o.set)&&s.ce.push(yt(n,e,s.Ae(t,e)))},s=this,o=0,u=Object.keys(r);o0){var o=n;if(!o){var u=t instanceof HTMLCanvasElement?Ui(t):void 0,a=t instanceof HTMLCanvasElement&&St(t);o=null!==(r=null==u?void 0:u.mask)&&void 0!==r?r:a}this.Pe(t,e,s,o)}return e}},t.prototype.je=function(t,n,i,r,e,s,o){var u;switch(typeof r){case"string":return e?Ci(r):r;case"number":case"boolean":case"bigint":return r;case"undefined":return{undef:!0};case"object":if(!r)return r;try{o.set(r,!0)}catch(t){}var a=null===(u=Object.getPrototypeOf(r))||void 0===u?void 0:u.constructor,c=(null==a?void 0:a.name)||function(t){var n;if(t){var i=t.toString(),r=po.exec(i);return r||(r=wo.exec(i)),null===(n=null==r?void 0:r[1])||void 0===n?void 0:n.trim()}}(a),h={ctor:c};if(r instanceof Node&&(l=Di(r)))return h.id=l,h;switch(c){case"Array":return this.Se+=r.length,this.Oe(t,n,i,r,e,s,o);case"CanvasGradient":return h;case"HTMLImageElement":var f=he(r.src,{source:"dom",type:"canvas"});return this.ai.record(f),h.src=f,h;case"HTMLCanvasElement":var v=r,l=this.flush(v,e);return h.srcId=l,h;}if(function(t){var n;return!!(null===(n=Object.prototype.toString.call(t))||void 0===n?void 0:n.match(lo))}(r))return this.be.has(r)?this.Me(r,h,e):(h.typedArray="["+r.toString()+"]",this.Se+=r.length,h);if("object"==typeof r&&this.be.has(r))return this.Me(r,h,e);if(r instanceof WebGLBuffer||r instanceof WebGLTexture){var d=void 0;switch(s){case"bindTexture":d=this.Ke(t,"createTexture",n,i,r);break;case"bindBuffer":d=this.Ke(t,"createBuffer",n,i,r);}if(void 0!==d)return this.Me(r,h,e)}var p=r;for(var w in (h.obj={}, p)){try{switch(typeof p[w]){case"function":continue;case"object":if(p[w]&&o.has(p[w]))continue;}}catch(t){continue}++this.Se,h.obj[w]=this.je(t,n,i,p[w],e,s,o)}return h;default:return null;}},t.prototype.Me=function(t,n,i){var r=this.be.get(t),e=r[0],s=r[1];return this.flush(e,i),n.ref=s,delete n.ctor,n},t.prototype.Ke=function(t,n,i,r,e){var s=this.ke(i,e),o=(s[0],s[1]);return this.Re(r,[[t,ln.Function,n,[],o]]),o},t.prototype.Oe=function(t,n,i,r,e,s,o){var u=this;return void 0===o&&(o=new WeakMap),this.Se+=r.length+1,r.map(function(r){return u.je(t,n,i,r,e,s,o)})},t.prototype.Pe=function(t,n,i,r){var e=this;if(void 0===r&&(r=!1),!this.xe){var s=i.map(function(i){var s=i[0],o=i[1],u=i[2],a=i[3],c=i[4];return[s,o,u,e.Oe(s,t,n,a,r&&fo.has(u),u),c]});if(!this.he.has(t)&&(this.he.set(t,!0),i.some(function(t){return"2d"===t[0]}))){var o=this.He(t);if(o.length>0)return o.push.apply(o,s),void this.Re(n,o)}this.Re(n,s)}},t.prototype.Re=function(t,n){if(!this.xe){var i=co.hasCapacityFor(this.Se),r=i[0];i[1],this.Se=0,r?this.At.enqueue({Kind:Ot.CANVAS,Args:[t,n]}):this.xe=!0}},t.prototype.He=function(t){var n=t.getContext("2d");if(!n)return[];var i=[];if((n instanceof CanvasRenderingContext2D||n instanceof OffscreenCanvasRenderingContext2D)&&"function"==typeof n.getTransform){var r=n.getTransform();if(!r.isIdentity){var e=r.a,s=r.b,o=r.c,u=r.d,a=r.e,c=r.f;i.push(["2d",ln.Function,"transform",[e,s,o,u,a,c],-1])}}return i},t.prototype.Ne=function(t,n){t instanceof HTMLCanvasElement&&(this.ue===dn.ScreenshotCanvas?(this.fe.set(t,!0),this.ve.add(t)):(this.ge.add(t),this.Ie(t,n)))},t.prototype._e=function(t,n,i,r,e){for(var s=[],o=0;o))/m,mo=/^(eval@)?(\[native code\])?$/;function yo(t){if(!t||"string"!=typeof t.stack)return[];var n=t;return n.stack.match(go)?n.stack.split("\n").filter(function(t){return!!t.match(go)}).map(function(t){var n=t;n.indexOf("(eval ")>-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var i=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").replace(/\(native code\)/,"").split(/\s+/).slice(1),r=Eo(i.pop());return bo(i.join(" "),["eval",""].indexOf(r[0])>-1?"":r[0],r[1],r[2])}):n.stack.split("\n").filter(function(t){return!t.match(mo)}).map(function(t){var n=t;if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return[n,"",-1,-1];var i=n.split("@"),r=Eo(i.pop());return bo(i.join("@"),r[0],r[1],r[2])});}function bo(t,n,i,r){return[t||"",n||"",parseInt(i||"-1",10),parseInt(r||"-1",10)]}function Eo(t){if(!t||-1===t.indexOf(":"))return["","",""];var n=/(.+?)(?::(\d+))?(?::(\d+))?$/.exec(t.replace(/[()]/g,""));return n?[n[1]||"",n[2]||"",n[3]||""]:["","",""]}var So,xo,ko=["log","info","warn","error","debug","_fs_debug","assert","trace"],_o=ko.filter(function(t){return !/debug/.test(t);}),Ao=function(t,n,i){void 0===i&&(i=!0);var r=Qi(t,n);return i?be(r):r},Io=function(){function t(t,n,i){this.At=n,this.sr=!1,this.Fe=!1,this.De=0,this.Dt=[],this.Be=cn.DefaultOrgSettings.MaxConsoleLogPerPage,this.Dn=t.window,this.T=i.createChild()}return t.prototype.initializeMaxLogsPerPage=function(t){this.Be=t||cn.DefaultOrgSettings.MaxConsoleLogPerPage},t.prototype.We=function(){return"\"[received more than "+this.Be+" messages]\""},t.prototype.start=function(t){var n=this;if(t.ConsoleWatcher&&(this.T.add(this.Dn,"error",!0,function(t){return n.addError(t)}),this.T.add(this.Dn,"unhandledrejection",!0,function(t){n.addError({error:t.reason,message:"Uncaught (in promise)",filename:"",lineno:0,colno:0})},!0),!this.sr))if(this.sr=!0,this.At.enqueue({Kind:Ot.REC_FEAT_SUPPORTED,Args:[zt.Console,!0]}),this.Dn.console)for(var i=function(t){var i=mt(r.Dn.console,t);if(!i)return"continue";"assert"===t?i.before(function(i){var r=i.args;r[0]||n.qe(t,Array.prototype.slice.apply(r,[1]))}):i.before(function(i){var r=i.args;return n.qe(t,r)}),r.Dt.push(i)},r=this,e=0,s=_o;e5e5)return!1;var i=Ws(Bs(t));return!!i&&(!!("style"===ki(t)&&i.length>0&&Xs.test(n))||function(t){var n;try{if((null===(n=t.classList)||void 0===n?void 0:n.contains("fs-css-in-js"))||t.hasAttribute("data-fela-type")||t.hasAttribute("data-aphrodite"))return!0}catch(t){Tt.sendToBugsnag(t,"error")}return!1}(t))}(s)&&(null==n||n.push(function(){u.snapshotEl(s),"link"===ki(s)&&i.T.add(s,"load",!1,function(){u.snapshotEl(s)})}));break;case"CANVAS":this._t.measurer.requestMeasureTask(ii.Low,function(){return i.us[So.Canvas].flush(t)});break;default:t.nodeName&&"#"!==t.nodeName[0]&&t.nodeName.indexOf("-")>-1&&this.us[So.CustomElement].onCustomNodeVisited(t);}if("scrollLeft"in t&&"scrollTop"in t){var a=t;this._t.measurer.requestMeasureTask(ii.Low,function(){0==a.scrollLeft&&0==a.scrollTop||i.Ps(a)})}null==n||n.push(function(){i._t.measurer.requestMeasureTask(ii.Low,function(){i.us[So.Animation].snapshot(t)})})},t.prototype.On=function(t){var n,i=t.node,r=ki(t.node);if("iframe"===r)this.$e(t.node);else if("function"==typeof i.getElementsByTagName)for(var e=null!==(n=i.getElementsByTagName("iframe"))&&void 0!==n?n:[],s=0;s-1&&s.push(i.href),("img"===t||"source"===t)&&(e=i.srcset)&&null==e.match(/^\s*$/))for(var c=0,h=e.split(",");c0)return i[0]}}return t.target}function Mo(t){var n;return!!(null!==(n=t._fs_trust_event)&&void 0!==n&&n||t.isTrusted)}var Ko,Ro=function(){function t(t,n){this.Vr=t,this.Gs=n,this.Xs=[],this.Js=0}return t.prototype.add=function(t){this.Xs.length>0&&this.Xs[this.Xs.length-1].When===t.When&&this.Xs.pop(),0===this.Xs.length?(this.Vr.push(t),this.Js=t.When):t.When>this.Js&&(this.Js=t.When),this.Xs.push(t)},t.prototype.finish=function(t,n){void 0===n&&(n=[]);var i=this.Xs.length;if(i<=1)return!1;for(var r=[],s=this.Xs[0].When,o=this.Xs[i-1].When,u=o-s!=0?o-s:1,a=0;a0&&this.Zs--,Lo(this.Wn.prev)},t.prototype.shift=function(){return this.Zs>0&&this.Zs--,Lo(this.Wn.next)},t}();function No(t,n){var i=t.next;n.next=i,n.prev=t,t.next=i.prev=n}function Lo(t){var n=t.prev,i=t.next;return n.next=i,i.prev=n,t.value}!function(t){t[t.rageWindowMillis=2e3]="rageWindowMillis",t[t.defaultRageThreshold=5]="defaultRageThreshold",t[t.rageThresholdIfPageChanges=8]="rageThresholdIfPageChanges",t[t.thresholdChangeQuiescenceMillis=2e3]="thresholdChangeQuiescenceMillis"}(Ko||(Ko={}));var Uo=function(){function t(t,n){var i,r;void 0===n&&(n=w),this._t=t,this.Ys=n,this.no=new Ho,this.io=Ko.defaultRageThreshold,this.ro=-1,this.eo=new WeakMap;var e=t.recording.pageResponse();if(!e)throw new Error("Attempt to construct EasyBake before rec/page response is set.");for(var s=[".fs-ignore-rage-clicks",".fs-ignore-rage-clicks *"],o=0,u=null!==(r=null===(i=e.BehaviorSignalSettings)||void 0===i?void 0:i.ElementBlocks)&&void 0!==r?r:[];o-1&&(s.push(a.Selector),s.push(a.Selector+" *"))}var c=s.join(", ");Be(c)?this.so=[c]:this.so=s}return t.prototype.oo=function(t){var n=this.eo.get(t);if(void 0!==n)return n;for(var i=0,r=this.so;i=this.io){var a=this._t.recording.getCurrentSessionURL,c={eventStartTimeStamp:this.no.first(),eventEndTimeStamp:i,eventReplayUrlAtStart:a(),eventReplayUrlAtCurrentTime:a(!0)};this.dispatchRageClickEvent(r,c),this.io=Ko.defaultRageThreshold,this.no=new Ho}}}}}},t.prototype.dispatchRageClickEvent=function(t,n){var i,r="fullstory/rageclick";try{i=new CustomEvent(r,{detail:n,bubbles:!0,cancelable:!0})}catch(t){(i=document.createEvent("customevent")).initCustomEvent(r,!0,!0,n)}o.setWindowTimeout(window,Tt.wrap(function(){t.dispatchEvent(i)}),0)},t}(),Fo=function(){function t(t){this._t=t,this.uo=this._t.time.wallTime(),this.ao=!1}return t.prototype.getLastUserAcitivityTS=function(){return this.uo},t.prototype.getMsSinceLastUserAcivity=function(){return o.mathFloor(this._t.time.wallTime()-this.uo)},t.prototype.resetUserActivity=function(){this.uo=this._t.time.wallTime()},t.prototype.isHibernating=function(){return this.ao},t.prototype.setHibernating=function(){this.ao=!0},t}(),Do=function(){function t(t,n,i,r){void 0===r&&(r=Yi),this._t=t,this.co=n,this.At=i,this.ho=!1,this.fo=!1,this.vo=cn.HeartbeatInitial,this.lo=cn.PageInactivityTimeout,this.heartbeatTimeout=new r(this["do"].bind(this)),this.hibernationTimeout=new r(this.po.bind(this),this.lo)}return t.prototype.getUserActivityModel=function(){return this.co},t.prototype.manualHibernateCheck=function(){this.co.isHibernating()||this.co.getMsSinceLastUserAcivity()>=cn.PageInactivityTimeout+5e3&&this.po()},t.prototype.scanEvents=function(t){if(!this.ho){this.manualHibernateCheck();for(var n=!1,i=0,r=t;icn.HeartbeatMax&&(this.vo=cn.HeartbeatMax),this.heartbeatTimeout.start(this.vo)},t.prototype.po=function(){if(!this.co.isHibernating()){var t=!1;this.co.getMsSinceLastUserAcivity()<=2*cn.PageInactivityTimeout?this.At.enqueue({Kind:Ot.UNLOAD,Args:[Wt.Hibernation]}):t=!0;try{this.ho=!0,this.co.setHibernating(),this.shutdown(),this.At.onHibernate(t)}finally{this.ho=!1}}},t.prototype.wo=function(){this.fo||(this.fo=!0,this._t.recording.splitPage(Wt.Hibernation))},t}(),Bo=function(){function t(t,n,i,r,e,s){void 0===r&&(r=function(){return[]}),void 0===e&&(e=Zi),void 0===s&&(s=Yi),this._t=t,this.mo=n,this.yo=r,this.bo=e,this.Eo=0,this.So=[],this.xo=!1,this.ko=!1,this._o=0,this.Ao=-1,this.Io=!1,this.Qt=[],this.To=new this.bo(cn.CurveSamplingInterval),this.Co=new this.bo(cn.MutationProcessingInterval),i&&(this.Po=new Do(this._t,i,this,s))}return t.prototype.startPipeline=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r=this;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return this.ko||this.xo?[2]:(this.xo=!0,t.frameId&&(this.Eo=t.frameId),t.parentIds&&(this.So=t.parentIds),i=!0,[4,ei()]);case 1:return e.sent(),this.processEvents(),[4,ei()];case 2:return e.sent(),window,this.Co.start(function(){window,r.processEvents(),window}),this.To.start(function(){window,r.processEvents(i),window}),null===(n=this.Po)||void 0===n||n.start(),this.mo.startPipeline(t),window,[2];}})})},t.prototype.enableEasyBake=function(){this.jo=new Uo(this._t)},t.prototype.enqueueSimultaneousEventsIn=function(t){if(0===this._o){var n=this._t.time.now();this.Ao=n>this.Ao?n:this.Ao}try{return this._o++,t(this.Ao)}finally{this._o--,this._o<0&&(this._o=0)}},t.prototype.enqueue=function(t){var n=this._o>0?this.Ao:this._t.time.now();this.Oo(n,t),Ji.checkForBrokenSchedulers()},t.prototype.Oo=function(t,n){var i;if(!this.ko){var r=t;r0){var n=t;n.When=this.Qt[0].When,this.Qt.unshift(n)}else this.enqueue(t)},t.prototype.addUnload=function(t){this.Io||(this.Io=!0,this.enqueue({Kind:Ot.UNLOAD,Args:[t]}),this.singSwanSong(t))},t.prototype.shutdown=function(t){this.addUnload(t),this.Mo(),this.ko=!0,this.Ko()},t.prototype.Mo=function(){this.processEvents(),this.mo.flush()},t.prototype.singSwanSong=function(t){this.ko||(window,this.Mo(),t===Wt.Hidden&&this.Io||this.mo.singSwanSong(),window)},t.prototype.rebaseIframe=function(t,n){for(var i=Math.max(0,n),r=this._t.time.startTime(),e=function(n){var e=r+n-t;return e>=i?e:i},s=0,o=this.Qt;s0){var f=h[h.length-1].Args[2];f&&(h[0].Args[9]=f)}}for(var v in s)s[l=parseInt(v,10)].finish(Ot.SCROLL_LAYOUT_CURVE,[l]);for(var v in o)o[l=parseInt(v,10)].finish(Ot.SCROLL_VISUAL_OFFSET_CURVE,[l]);for(var v in e){var l;e[l=parseInt(v,10)].finish(Ot.TOUCHMOVE_CURVE,[l])}return n&&n.finish(Ot.RESIZE_VISUAL_CURVE),i}(n);t||(i=i.concat(this.yo())),this.Ro(i),this.sendEvents(this._t.recording.pageSignature(),i)}},t.prototype.sendEvents=function(t,n){var i;0!=n.length&&(null===(i=this.Po)||void 0===i||i.scanEvents(n),this.mo.enqueueEvents(t,n))},t.prototype.onHibernate=function(t){t||this.Mo(),this.mo.singSwanSong(),this.mo.stopPipeline()},t.prototype.Ro=function(t){if(this.Eo)for(var n=this.So,i=n&&n.length>0,r=0;r>>0).toString(16)).slice(-8);return t},t;}();function qo(t){var n=new Wo(1);return n.writeAscii(t),n.sumAsHex()}function Qo(t){var n=new Uint8Array(t);return Vo(String.fromCharCode.apply(null,n))}function Vo(t){var n;return (null!==(n=window.btoa)&&void 0!==n?n:zo)(t).replace(/\+/g,"-").replace(/\//g,"_");}function zo(t){for(var n=String(t),i=[],r=0,e=0,s=0,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.charAt(0|s)||(o="=",s%1);i.push(o.charAt(63&r>>8-s%1*8))){if((e=n.charCodeAt(s+=3/4))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|e}return i.join("")}function $o(t,n,i,r){return void 0===r&&(r=new Wo),(0,e.__awaiter)(this,void 0,Yn,function(){var s,o,u,a;return(0,e.__generator)(this,function(e){switch(e.label){case 0:s=t.now(),o=i.byteLength,u=0,e.label=1;case 1:return u25?[4,n(100)]:[3,3]:[3,5];case 2:e.sent(),s=t.now(),e.label=3;case 3:a=new Uint8Array(i,u,Math.min(o-u,1e4)),r.write(a),e.label=4;case 4:return u+=1e4,[3,1];case 5:return[2,{hash:r.sum(),hasher:r}];}})})}var Go=6e6,Xo="resource-uploader",Jo=function(){function t(t,n,i,r,e){void 0===r&&(r=window.FormData),void 0===e&&(e=Yi),this._t=t,this.At=n,this.Ho=i,this.No=r,this.Lo=e,this.pe={},this.Uo={},this.Fo=!1,this.Do=[]}return t.prototype.init=function(){this.No&&this.Bo()["catch"](function(t){Tt.sendToBugsnag(t,"error")})},t.prototype.Bo=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t,n,i,r,s,o,u,a,c,h,f,v,l,d,p,w,g,m,y,b,E,S,x,k,_;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t=this._t.options.orgId,e.label=1;case 1:return[4,this.Wo()];case 2:for(n=e.sent(),i={fsnv:{},sha1:{}},r={},s=0,o=n;sGo){var r=he(t,{source:"log",type:"bugsnag"});return Tt.sendToBugsnag("Size of blob resource exceeds limit","warning",{url:r,MaxResourceSizeBytes:Go}),void i(null)}(function(t){var n=ti(),i=n.resolve,r=n.promise,e=new FileReader;return e.readAsArrayBuffer(t),e.onload=function(){i(e.result)},e.onerror=function(t){Tt.sendToBugsnag(t,"error"),i(null)},r})(n).then(function(t){i(t?{buffer:t,blob:n,contentType:n.type}:null)})},e.send(),r)}function Yo(t,n){var i,r;return(0,e.__awaiter)(this,void 0,Yn,function(){var s;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return s=t.window,(null===(r=null===(i=s.crypto)||void 0===i?void 0:i.subtle)||void 0===r?void 0:r.digest)?[4,s.crypto.subtle.digest({name:"sha-1"},n)]:[3,2];case 1:return[2,{hash:Qo(e.sent()),algorithm:"sha1"}];case 2:return[4,$o(t.time,ni,n)];case 3:return[2,{hash:e.sent().hash,algorithm:"fsnv"}];}})})}var tu=/^data:([^;,]*)(;?charset=[^;]+)?(?:;base64)?$/i,nu="Could not parse data url",iu=function(t,n,i){this.name="ProtocolError",this.message=n,this.status=t,this.data=i};function ru(t){return t>=400&&502!==t||202==t||206==t}var eu=function(){function t(t){this.Vo=0,this.zo=t.options.scheme,this.$o=t.options.cdnHost,this._t=t}return t.prototype.page=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/page",vt(t))];case 1:return[2,pt(n.sent().text)];}})})},t.prototype.settings=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n;return(0,e.__generator)(this,function(i){return n=t.previewMode||t.fallback?vu(this._t):this.$o,[2,fu(this.zo,n,t)]})})},t.prototype.bundle=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return[4,ei()];case 1:return e.sent(),window,i=vt(t.bundle),this.Vo+=i.length,this.Vo,window,i.length>2e6?[4,ei()]:[3,3];case 2:e.sent(),e.label=3;case 3:return window,r=ou(t.bundle.Seq,t),[4,uu(this.zo,null!==(n=t.recHost)&&void 0!==n?n:vu(this._t),r,i)];case 4:return s=e.sent().text,o=pt(s),window,[2,[this.Vo,o]];}})})},t.prototype.bundleBeacon=function(t){var n;return hu(this.zo,null!==(n=t.recHost)&&void 0!==n?n:vu(this._t),t)},t.prototype.exponentialBackoffMs=function(t,n){var i=o.mathMin(cn.BackoffMax,5e3*o.mathPow(2,t));return n?i+.25*o.mathRandom()*i:i},t}(),su=function(){function t(t){this.zo=t.options.scheme,this._t=t}return t.prototype.uploadResource=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/uploadResource",t)];case 1:return[2,n.sent().text];}})})},t.prototype.queryResources=function(t){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(n){switch(n.label){case 0:return[4,uu(this.zo,vu(this._t),"/rec/queryResources",vt(t))];case 1:return[2,pt(n.sent().text)];}})})},t}();function ou(t,n){var i="/rec/bundle"+("v2"===n.version?"/v2":"")+"?OrgId="+n.orgId+"&UserId="+n.userId+"&SessionId="+n.sessionId+"&PageId="+n.pageId+"&Seq="+t;return null!=n.serverPageStart&&(i+="&PageStart="+n.serverPageStart),null!=n.serverBundleTime&&(i+="&PrevBundleTime="+n.serverBundleTime),null!=n.lastUserActivity&&(i+="&LastActivity="+n.lastUserActivity),n.isNewSession&&(i+="&IsNewSession=true"),null!=n.deltaT&&(i+="&DeltaT="+n.deltaT),i}function uu(t,n,i,r){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(e){return[2,cu("POST",t,n,lu(i),!0,r)]})})}function au(t,n,i){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(r){return[2,cu("GET",t,n,lu(i),!1)]})})}function cu(t,n,i,r,s,o){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(e){return[2,new Yn(function(e,u){var a="//"+i+r,c=!1,h=new XMLHttpRequest,f=("withCredentials"in h);jt(f,"XHR missing CORS support"),f&&(h.onreadystatechange=function(){if(4==h.readyState){if(c)return;c=!0;try{var t={text:h.responseText};if(200==h.status)return void e(t);var n=void 0;try{n=pt(t.text)}catch(t){}u(new iu(h.status,t.text,n))}catch(t){Tt.sendToBugsnag(t,"error"),u(t)}}},h.open(t,n+a,!0),h.withCredentials=s,o&&"function"!=typeof o.append&&h.setRequestHeader("Content-Type","text/plain"),h.send(o))})]})})}function hu(t,n,i){if("function"==typeof navigator.sendBeacon){var r=t+"//"+n+ou(i.bundle.Seq,i)+"&SkipResponseBody=true",e=vt(i.bundle);try{return navigator.sendBeacon.bind(navigator)(r,e)}catch(t){}}return!1}function fu(t,n,i){var r;return(0,e.__awaiter)(this,void 0,Yn,function(){var s,o;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return s=null!==(r=i.version)&&void 0!==r?r:"v1",o=i.previewMode?"?previewMode=true":"",[4,au(t,n,"/s/settings/"+i.orgId+"/"+s+"/web"+o)];case 1:return[2,pt(e.sent().text)];}})})}function vu(t){var n,i=null===(n=t.recording.pageResponse())||void 0===n?void 0:n.GCLBSubdomain,r=t.options.recHost;return i&&K(r)?r.replace(/^rs\./,i+"."):r;}function lu(t){if(!window.Zone)return t;var n="?";return t.indexOf(n)>-1&&(n="&"),""+t+n+"ngsw-bypass=true"}var du,pu=function(){function t(t,n,i){void 0===i&&(i=new wu),this._t=t,this.Vr=n,this.Go=i}return t.prototype.initialize=function(t){var n;if(t){this.Xo(t);var i=null===(n=this._t.window.location)||void 0===n?void 0:n.href;this.onNavigate(i)}},t.prototype.onNavigate=function(t){return!!this.Go.matches(t)&&(this.Vr.enqueue({Kind:Ot.KEEP_URL,Args:[this.Jo(t)]}),!0)},t.prototype.onClick=function(t){var n;return!!(null===(n=null==t?void 0:t.watchKind)||void 0===n?void 0:n.has(_i.Keep))&&(this.Vr.enqueue({Kind:Ot.KEEP_ELEMENT,Args:[t.id]}),!0)},t.prototype.urlMatches=function(t){return this.Go.matches(t)},t.prototype.Xo=function(t){this.Go.setRules(t)},t.prototype.Jo=function(t){return he(t,{source:"page",type:"base"})},t}(),wu=function(){function t(){this.Zo=null}return t.prototype.setRules=function(t){var n=t.map(function(t){return t.Regex}).filter(this.Yo);n.length>0&&(this.Zo=this.tu(n))},t.prototype.matches=function(t){return!!this.Zo&&this.Zo.test(t)},t.prototype.Yo=function(t){try{return new RegExp(t),!0}catch(n){return Tt.sendToBugsnag("Browser rejected UrlKeep.Regex","error",{expr:t,error:n.toString()}),!1}},t.prototype.tu=function(t){try{return new RegExp("("+t.join(")|(")+")","i")}catch(n){return Tt.sendToBugsnag("Browser rejected joining UrlKeep.Regexs","error",{exprs:t,error:n.toString()}),null}},t}(),gu=function(t){var n=(void 0===t?{}:t).wnd,i=void 0===n?window:n;!function(t,n,i,r,e,s,o,u){var a,c;function h(t){var n,i=[];function r(){n&&(i.forEach(function(t){var i;try{i=t[n[0]]&&t[n[0]](n[1])}catch(n){return void(t[3]&&t[3](n))}i&&i.then?i.then(t[2],t[3]):t[2]&&t[2](i)}),i.length=0)}function e(t){return function(i){n||(n=[t,i],r())}}return t(e(0),e(1)),{then:function(t,n){return h(function(e,s){i.push([t,n,e,s]),r()})}}}(!(i in t)||(t.console&&t.console.log&&t.console.log("FullStory namespace conflict. Please set window[\"_fs_namespace\"]."),0))&&(u=t[i]=function(){var t=function(t,i,r){function e(e,s){n(t,i,r,e,s)}var s=/Async$/;return s.test(t)?(t=t.replace(s,""),"function"==typeof Promise?new Promise(e):h(e)):n(t,i,r)};function n(n,i,r,e,s){return t._api?t._api(n,i,r,e,s):(t.q&&t.q.push([n,i,r,e,s]),null)}return t.q=[],t}(),function(){function t(){}function n(t,n,i){u("setProperties",{type:t,properties:n},i)}function i(t,i){n("user",t,i)}function r(t,n,r){i({uid:t},r),n&&i(n,r)}u.identify=r,u.setUserVars=i,u.identifyAccount=t,u.clearUserCookie=t,u.setVars=n,u.event=function(t,n,i){u("trackEvent",{name:t,properties:n},i)},u.anonymize=function(){r(!1)},u.shutdown=function(){u("shutdown")},u.restart=function(){u("restart")},u.log=function(t,n){u("log",{level:t,msg:n})},u.consent=function(t){u("setIdentity",{consent:!arguments.length||t})}}(),a="fetch",c="XMLHttpRequest",u._w={},u._w[c]=t[c],u._w[a]=t[a],t[a]&&(t[a]=function(){return u._w[a].apply(this,arguments)}),u._v="2.0.0")}(i,i.document,i._fs_namespace,0,0,i._fs_script)};function mu(t,n){if(t&&t.postMessage)try{t.postMessage(function(t){var n;return vt(((n={}).__fs=t,n))}(n),"*")}catch(t){Ut("postMessage",t)}}function yu(t){try{var n=pt(t);if("__fs"in n)return n.__fs}catch(t){}return[du.Unknown]}function bu(t,n,i,r){var e=W(t);if(!e)return!1;try{e.send(n,i,r)}catch(t){e.send(n,i)}return!0}!function(t){t.EndPreviewMode="EndPreviewMode",t.EvtBundle="EvtBundle",t.GreetFrame="GreetFrame",t.InitFrameMobile="InitFrameMobile",t.RequestFrameId="RequestFrameId",t.RestartFrame="RestartFrame",t.SetConsent="SetConsent",t.SetFrameId="SetFrameId",t.ShutdownFrame="ShutdownFrame",t.Unknown="Unknown"}(du||(du={}));var Eu=new RegExp(/^\s+$/),Su=/^fb\d{18}$/,xu=function(t){var n=t.frame,i=t.orgId,r=t.scheme,e=t.script,s=t.recHost,u=t.cdnHost,a=t.appHost,c=t.namespace,h=(t.desc,t.snippetVersion);try{if(function(t){return t.id==t.name&&Su.test(t.id)}(n))return Rt.BlocklistedFrame;if(function(t){return!(t.contentDocument&&t.contentWindow&&t.contentWindow.location)||function(t){return!!t.src&&"about:blank"!=t.src&&t.src.indexOf("javascript:")<0}(t)&&t.src!=t.contentWindow.location.href&&"loading"==t.contentDocument.readyState}(n))return Rt.PartiallyLoaded;var f=n.contentWindow,v=n.contentDocument;if(!f||!v)return Rt.MissingWindowOrDocument;if(!v.head)return Rt.MissingDocumentHead;if(!v.body||0===v.body.childNodes.length)return Rt.MissingBodyOrChildren;for(var l=!1,d=v.body.childNodes,p=0;p0&&(null!==(s=null===(e=null===(r=t.OrgSettings)||void 0===r?void 0:r.UrlPrivacyConfig)||void 0===e?void 0:e.length)&&void 0!==s?s:0)>0&&(null!==(a=null===(u=null===(o=t.OrgSettings)||void 0===o?void 0:o.AttributeBlocklist)||void 0===u?void 0:u.length)&&void 0!==a?a:0)>0;return c||Tt.sendToBugsnag("Invalid page response","error",{rsp:t}),c},t.prototype.handleResponse=function(t,n){var i,r,e,s,o=t.Flags,u=o.AjaxWatcher,a=o.ClientSideRageClick,c=o.GetCurrentSession,h=o.ResourceUploading,f=o.UseClientSideId;this.ku=t,this.Pu=t.UserIntId,this.ju=t.SessionIntId,this.Ou=t.PageIntId,this.Mu=t.PageStart,this.pu=c?_u.Enabled:_u.Disabled,this.cu=t.OrgSettings,pe(null!==(i=this.cu.UrlPrivacyConfig)&&void 0!==i?i:cn.DefaultOrgSettings.UrlPrivacyConfig,this.cu.MaxUrlLength);var v=null!==(r=this.cu.AttributeBlocklist)&&void 0!==r?r:[];(null===(s=null===(e=this._u)||void 0===e?void 0:e.privacy)||void 0===s?void 0:s.attributeBlocklist)&&(this._u.privacy.attributeBlocklist.length,v.push.apply(v,this._u.privacy.attributeBlocklist.map(Ae))),xe(v),this.yu.consoleWatcher().initializeMaxLogsPerPage(this.cu.MaxConsoleLogPerPage),this.yu.ajaxWatcher().initialize({requests:this.cu.HttpRequestHeadersAllowlist,responses:this.cu.HttpResponseHeadersAllowlist,maxAjaxPayloadLength:this.cu.MaxAjaxPayloadLength}),this.yu.perfWatcher().initialize({resourceUploader:this.yu.getResourceUploader(),recTimings:!!this.cu.RecordPerformanceResourceTiming,recImgs:!!this.cu.RecordPerformanceResourceImg,maxPerfMarksPerPage:this.cu.MaxPerfMarksPerPage}),this.Xt.initialize({canvasWatcherMode:t.Flags.CanvasWatcherMode,blocks:t.ElementBlocks,deferreds:t.ElementDeferreds,keeps:t.ElementKeeps,watches:t.ElementWatches}),this.Ve.initialize(t.UrlKeeps),this.Xt.initializeConsent(null!=n?n:!!t.Consented),"number"==typeof t.BundleUploadInterval&&(this.fu=t.BundleUploadInterval),h&&this.enableResourceUploading(),u&&t.AjaxWatches&&this.yu.ajaxWatcher().setWatches(t.AjaxWatches),a&&this.At.enableEasyBake(),f&&(this.hu=!0),this.yu.start(t.Flags)},t.prototype.fullyStarted=function(){this.Au&&this.Au()},t.prototype.enableResourceUploading=function(){this.wu=!0,this.yu.initResourceUploading()},t.prototype.flushPendingChildFrameInits=function(){if(this.du.length>0){for(var t=0;t0&&this.At.sendEvents(e,i);break;case du.RequestFrameId:if(!t)return;var s=this.Nu(t);void 0===s||(this.mu[s]=!1,this.Lu(t,s));case du.Unknown:}},t.prototype.Nu=function(t){for(var n=0,i=this.vu;n2e6))try{localStorage._fs_swan_song=i}catch(t){}},t.prototype.sing=function(){try{var t=this.purge();if(void 0===t)return;if(!(t.Bundles&&t.UserId&&t.SessionId&&t.PageId))return;t.OrgId||(t.OrgId=this.Uu.getOrgId()),t.Bundles.length>0&&(t.Bundles.length,this.Du(t))}catch(t){}},t.prototype.purge=function(){try{if("_fs_swan_song"in localStorage){var t=localStorage._fs_swan_song;return delete localStorage._fs_swan_song,pt(t)}}catch(t){}},t.prototype.Du=function(t,n){return void 0===n&&(n=0),(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o;return(0,e.__generator)(this,function(u){switch(u.label){case 0:if(i=null,!tt(t.Bundles)||0===t.Bundles.length||void 0===t.Bundles[0])return[2];1==t.Bundles.length&&(i=this._t.time.wallTime()-(t.LastBundleTime||0)),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,this.Ho.bundle({bundle:t.Bundles[0],deltaT:i,isNewSession:t.IsNewSession,orgId:t.OrgId,pageId:t.PageId,recHost:t.RecHost,serverBundleTime:t.ServerBundleTime,serverPageStart:t.ServerPageStart,sessionId:t.SessionId,userId:t.UserId,version:t.Version})];case 2:return r=u.sent(),s=r[1],t.Bundles[0].Evts.length,t.Bundles[0].Seq,t.Bundles.shift(),t.Bundles.length>0&&this.Du((0,e.__assign)((0,e.__assign)({},t),{ServerBundleTime:s.BundleTime})),[3,4];case 3:return(o=u.sent())instanceof iu&&ru(o.status)?[2]:(this.Bu=new this.Fu(this.Du,this.Ho.exponentialBackoffMs(n,!0),this,t,n+1).start(),[3,4]);case 4:return[2];}})})},t}(),ju=function(){function t(){}return t.prototype.encode=function(t){return t},t}(),Ou=function(){function t(){this.dict={idx:-1,map:{}},this.nodeCount=1,this.startIdx=0}return t.prototype.encode=function(n){if(0==n.length)return[];var i,r,e=n[0],s=Object.prototype.hasOwnProperty.call(this.dict.map,e)?this.dict.map[e]:void 0,o=[],u=1;function a(){s?u>1?o.push([s.idx,u]):o.push(s.idx):o.push(e)}for(i=1;ithis._t.recording.bundleUploadInterval()?[4,this.aa()]:[3,4]):[2];case 3:e.sent(),e.label=4;case 4:return[3,6];case 5:if((r=e.sent())instanceof iu){if(ru(r.status))return 206==r.status?Tt.sendToBugsnag("Failed to send bundle, probably because of its large size","error"):r.status>=500&&Tt.sendToBugsnag("Failed to send bundle, recording outage likely","error"),this.ea&&this.ea(),[2]}else Tt.sendToBugsnag("Failed to send bundle, unknown err","error",{err:r});return this.qu=!0,this.Vu=this.$u+this.Ho.exponentialBackoffMs(this.Qu++,!1),[3,6];case 6:return[2];}})})},t.prototype.va=function(t){var n,i;return(0,e.__awaiter)(this,void 0,Yn,function(){var r,s,o,u;return(0,e.__generator)(this,function(e){switch(e.label){case 0:return this.Ou?(window,r=this.co.getMsSinceLastUserAcivity(),[4,this.Ho.bundle({bundle:t,deltaT:null,lastUserActivity:r,orgId:this.Uu.getOrgId(),pageId:this.Ou,serverBundleTime:this.Zu,serverPageStart:this.Mu,isNewSession:this.Gu,sessionId:null!==(n=this.Uu.getSessionId())&&void 0!==n?n:"",userId:this.Uu.getUserId(),version:this._t.recording.bundleApiVersion()})]):[2];case 1:return s=e.sent(),o=s[0],u=s[1],null===(i=this._t.recording.observer)||void 0===i||i.onBundleSent(o),o>this.Ju&&this.zu>16&&this._t.recording.splitPage(Wt.Size),window,[2,u];}})})},t.prototype.fa=function(t){if(0===t.Evts.length)return t;for(var n=[],i=0,r=t.Evts;i0},t.prototype.hasActiveEvents=function(){return this.da},t.prototype.pushEvent=function(t){Mu[t.Kind]||(this.da=!0),this.pa.When<0&&(this.pa.When=t.When),this.pa.Evts.push(t)},t}();function Hu(t,n){void 0===t&&(t=[]),void 0===n&&(n=0);for(var i="",r=0,e=t;r-1},t.prototype.ba=function(){return this.Dn.document.location.search.indexOf("_fs_preview=false")>-1},t.prototype.ya=function(){return!!this.wa.getValue(this.ga)},t}();function Uu(t){var n,i,r;return{Kind:Ot.CAPTURE_SOURCE,Args:[t.type,t.entrypoint,"dom",null===(i=null===(n=t.source)||void 0===n?void 0:n.integration)||void 0===i?void 0:i.slice(0,1024),!!(null===(r=t.source)||void 0===r?void 0:r.userInitiated)]}}function Fu(t){return(0,e.__awaiter)(this,void 0,Yn,function(){var n,i,r,s;return(0,e.__generator)(this,function(e){if(n=function(t){return"msCrypto"in t?t.msCrypto:t.crypto}(t),"function"==typeof(null==n?void 0:n.randomUUID))return[2,n.randomUUID()];for(i=new Uint8Array(16),n.getRandomValues(i),i[6]=15&i[6]|64,i[8]=63&i[8]|128,r=[],s=0;s=864e5)return Wu;var c=null!==(n=this.Sa.getLastUserActivityTimeMS())&&void 0!==n?n:u;return o.mathAbs(s-c)>=qu||(null!==(i=this.Sa.getPageCount())&&void 0!==i?i:0)>=250?Wu:e},t.prototype.start=function(){this.lastUserActivityTimeout.start(3e5)},t.prototype.stop=function(){this.lastUserActivityTimeout.stop()},t.prototype.ka=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){var t;return(0,e.__generator)(this,function(n){return(t=this.Sa.getUserId())&&Bu(t)?[2,t]:[2,Fu(this._t.window)]})})},t.prototype.xa=function(){var t=this.co.getLastUserAcitivityTS();t!==this.lastUserActivityTS&&(this.lastUserActivityTS=t,this.Sa.setLastUserActivityTimeMS(t),this.start())},t}(),Vu=function(t){function n(n,i,r,e,s,o,u){void 0===r&&(r=!0),void 0===e&&(e=new Fo(n)),void 0===s&&(s=new Ku(n,i,e,r)),void 0===o&&(o=Zi),void 0===u&&(u=xu);var a,c=t.call(this,n,o,e,s,u)||this;return c.Ho=i,c.mo=s,c._a=!1,c.ko=!1,c.Aa=!1,s.onShutdown(function(){return c.shutdown(Wt.SettingsBlocked)}),c.Mt=c.Dn.document,c.Eo=0,c.Uu=n.recording.identity,c.Ia=new Lu(c.xu,c.Dn,c.Uu.getClientStore()),c.pu=_u.NoInfoYet,c.Ta=new Qu(n,e,c.Uu),a=function(t){if(c.yu.stop(Wt.Api),t){var n=c.Mt.getElementById(t);n&&c.Ca&&n.setAttribute("_fs_embed_token",c.Ca)}},c.Dn._fs_shutdown=a,c}return (0,e.__extends)(n,t),n.prototype.onDomLoad=function(){var n=this;t.prototype.onDomLoad.call(this),this._a=!0,this.Pa(function(){n.fireFsReady(n.ko)})},n.prototype.ja=function(){var t=R(this.Dn,"_fs_replay_flags");if(/[?&]_fs_force_session=true(&|#|$)/.test(location.search)&&(t+=",forceSession",this.Dn.history)){var n=location.search.replace(/(^\?|&)_fs_force_session=true(&|$)/,function(t,n,i){return i?n:""});this.Dn.history.replaceState({},"",this.Dn.location.href.replace(location.search,n))}return t},n.prototype.start=function(n,i,r){var s,o,u;return(0,e.__awaiter)(this,void 0,Yn,function(){var a,c,h,f,v,l,d,p,w,g,m,y,b,E,S,x,k,_,A,I,T,C,P,j=this;return(0,e.__generator)(this,function(e){switch(e.label){case 0:t.prototype.start.call(this,n,i,r),a=this.ja(),c=yi(this.Mt),h=c[0],f=c[1],O=this.Dn,M=0,K=0,v=null==O.screen?[M,K]:(M=parseInt(String(O.screen.width),10),K=parseInt(String(O.screen.height),10),[M=isNaN(M)?0:M,K=isNaN(K)?0:K]),l=v[0],d=v[1],p="",n||(p=this.Uu.getUserId()),w=null!==(u=null===(o=null===(s=this._t)||void 0===s?void 0:s.recording)||void 0===o?void 0:o.preroll)&&void 0!==u?u:-1,g=function(){return he(Mr(j.Dn),{source:"page",type:"base"})},m=function(){return he(j.Dn.location.href,{source:"page",type:"url"})},y=function(){return""===j.Mt.referrer?"":he(j.Mt.referrer,{source:"page",type:"referrer"})},b=function(t){var n,i="_fs_tab_id";try{var r=t.sessionStorage.getItem(i);if(r)return r;var e=Math.floor(1e17*Math.random()).toString(16);return t.sessionStorage.setItem(i,e),null!==(n=t.sessionStorage.getItem(i))&&void 0!==n?n:void 0}catch(t){return}}(this.Dn),E={OrgId:this.xu,UserId:p,Url:m(),Base:g(),Width:h,Height:f,ScreenWidth:l,ScreenHeight:d,SnippetVersion:V(this.Dn),Referrer:y(),Preroll:w,Doctype:dt(this.Mt),CompiledVersion:"11aa377d19",CompiledTimestamp:1678707725,AppId:this.Uu.getAppId(),TabId:b,PreviewMode:this.Ia.isPreviewMode()||void 0},a&&(E.ReplayFlags=a),e.label=1;case 1:return e.trys.push([1,5,,6]),S=this.Oa,[4,this.Ho.page(E)];case 2:return[4,S.apply(this,[e.sent()])];case 3:return P=e.sent(),this.isSafeResponse(P)?this.gu?[2]:(window,this.handleResponse(P),window,this.Ma(P.CookieDomain,P.UserIntId,P.SessionIntId,P.PageIntId,P.EmbedToken),P.Flags.UseStatelessConsent||this.Uu.getConsentStore().setConsentState(!!P.Consented),this.Ka(),P.PreviewMode&&this.Ra(),x=function(t){return R(t,"_fs_pagestart","function")}(this.Dn),x&&x(),this.At.enqueueFirst(this.yu.getNavigateEvent(this.Dn.location.href,Ot.ENTRY_NAVIGATE)),k=!!P.Consented,this.At.enqueueFirst({Kind:Ot.SYS_REPORTCONSENT,Args:[k,Bt.Document]}),_=dt(this.Mt),A=m(),I=y(),T=g(),this.At.enqueueFirst({Kind:Ot.SET_FRAME_BASE,Args:[he(Mr(this.Dn),{source:"event",type:Ot.SET_FRAME_BASE}),_,A,I]}),this.mo.setPageData({Kind:Ot.PAGE_DATA,Args:[A,T,h,f,l,d,V(this.Dn),I,_,w,p,P.PageStart,Et(this.Dn),this.Dn.navigator.userAgent,b,!!P.IsNewSession]}),this.At.enqueue({Kind:Ot.SCRIPT_COMPILED_VERSION,Args:["11aa377d19"]}),this.At.enqueue(Uu({type:"default"})),this.yu.addVisibilityChangeEvent(),this.addInitEvent(),[4,this.At.startPipeline({pageId:P.PageIntId,serverPageStart:P.PageStart,isNewSession:!!P.IsNewSession})]):[2,this.Ha()];case 4:return e.sent(),this.enqueueDocumentProperties(this.Mt),this.fullyStarted(),[3,6];case 5:return(C=e.sent())instanceof iu&&(P=C.data)&&P.user_id&&P.cookie_domain&&P.reason_code===en.ReasonBlockedTrafficRamping&&p!==P.user_id&&this.Ma(P.cookie_domain,P.user_id,"","",""),this.Ha(),[3,6];case 6:return[2];}var O,M,K})})},n.prototype.Ka=function(){var t=this;this.Aa=!0,this.Pa(function(){t.fireFsReady(t.ko)})},n.prototype.Ma=function(t,n,i,r,e){var s=this.Uu;s.setIds(this.Dn,t,n,i),this.Ca=e,this.Ia.write(),s.getUserId(),s.getSessionId()},n.prototype.Pa=function(t){var n,i;if(this._a&&this.Aa)if(null===(i=null===(n=this.ku)||void 0===n?void 0:n.Flags)||void 0===i?void 0:i.FetchIntegrations){var r=this.Mt.createElement("script");r.addEventListener("load",t),r.addEventListener("error",t),r.async=!0,r.src=this.zo+"//"+this.Eu+"/rec/integrations?OrgId="+this.xu,this.Mt.head.appendChild(r)}else t()},n.prototype.Ra=function(){var t="FullStory-preview-script";if(!this.Mt.getElementById(t)){var n=this.Mt.createElement("script");n.id=t,n.async=!0,n.src=this.zo+"//"+this.Su+"/s/fspreview.js",this.Mt.head.appendChild(n)}},n.prototype.Ha=function(){this.Iu&&this.Iu(),this.shutdown(Wt.SettingsBlocked),this.ko=!0,this.fireFsReady(this.ko)},n.prototype.Oa=function(t){var n;return(0,e.__awaiter)(this,void 0,Yn,function(){var i,r,s,o,u;return(0,e.__generator)(this,function(a){switch(a.label){case 0:return(i=(0,e.__assign)({},t)).Flags.UseStaticSettings?(r=this.Ia.isPreviewMode(),[4,this.Ho.settings({orgId:this.xu,previewMode:r,fallback:!1})["catch"](function(t){Tt.sendToBugsnag("Edge Rec settings error","error",{err:t})})]):[3,4];case 1:return(s=a.sent())?[3,3]:[4,this.Ho.settings({orgId:this.xu,previewMode:r,fallback:!0})["catch"](function(t){Tt.sendToBugsnag("Rs Rec settings error","error",{err:t})})];case 2:s=a.sent(),a.label=3;case 3:s&&(i=(0,e.__assign)((0,e.__assign)({},i),s)),a.label=4;case 4:return i.Flags.UseClientSideId?(this.Uu.setCookieDomain(this.Dn,i.CookieDomain),Bu(o=null!==(n=t.UserUUID)&&void 0!==n?n:"")&&this.Uu.setUserId(o),[4,this.Ta.createUserSessionPage()]):[3,6];case 5:u=a.sent(),this.Ta.start(),i=(0,e.__assign)((0,e.__assign)({},i),{UserIntId:u.userId,SessionIntId:u.sessionId,PageIntId:u.pageId,IsNewSession:u.isNewSession,PageStart:p()}),a.label=6;case 6:return i.Flags.UseStatelessConsent&&(i=(0,e.__assign)((0,e.__assign)({},i),{Consented:this.Uu.getConsentStore().getConsentState()})),[2,i];}})})},n.prototype.onMessageReceived=function(n,i){t.prototype.onMessageReceived.call(this,n,i),(null==n?void 0:n.parent)==this.Dn&&i[0]===du.EndPreviewMode&&this.Ia.clear()},n;}(Cu),zu=function(){function t(t,n){void 0===n&&(n=new $u(t)),this.Dn=t,this.Na=n}return t.prototype.enqueueEvents=function(t,n){var i=null!=t?t:void 0;this.Na.postMessage(this.Dn.parent,[du.EvtBundle,n,i],i)},t.prototype.startPipeline=function(){},t.prototype.stopPipeline=function(){},t.prototype.flush=function(){return(0,e.__awaiter)(this,void 0,Yn,function(){return(0,e.__generator)(this,function(t){return[2]})})},t.prototype.singSwanSong=function(){},t.prototype.onShutdown=function(t){},t.prototype.setPageData=function(t){},t}(),$u=function(){function t(t){this.Dn=t}return t.prototype.postMessage=function(t,n,i){switch(n[0]){case du.EvtBundle:bu(this.Dn,n[0],vt(n[1]),i)||mu(t,n);break;case du.RequestFrameId:bu(this.Dn,n[0],"[]",i)||mu(t,n);break;default:n[0];}},t}(),Gu=function(t){function n(n,i,r,e,s){void 0===i&&(i=new $u(n.window)),void 0===r&&(r=new zu(n.window,i)),void 0===e&&(e=Zi),void 0===s&&(s=xu);var o=t.call(this,n,e,void 0,r,s)||this;return o.Na=i,o}return(0,e.__extends)(n,t),n.prototype.start=function(n,i,r){var e=this;t.prototype.start.call(this,n,i,r),this.La(),this.T.add(this.Dn,"load",!1,function(){e.yu.recordingIsDetached()&&e._t.recording.splitPage(Wt.FsShutdownFrame)}),this.yu.addVisibilityChangeEvent()},n.prototype.onMessageReceived=function(n,i){if(t.prototype.onMessageReceived.call(this,n,i),n===this.Dn.parent||n===this.Dn)switch(i[0]){case du.GreetFrame:this.La(i[1]);break;case du.SetFrameId:try{var r=i[1];if(!r)return void he(location.href,{source:"log",type:"debug"});this.Ua({frameId:r,parentIds:i[2],outerStartTime:i[3],scheme:i[4],script:i[5],appHost:i[6],orgId:i[7],initConfig:i[8],pageRsp:i[9],consentOverride:i[10],minimumWhen:i[11]})}catch(t){vt(i)}break;case du.SetConsent:this.setConsent(i[1]);break;case du.InitFrameMobile:try{var e=JSON.parse(i[1]),s=e.StartTime;if(i.length>2&&i[2]){var o=i[2];Object.prototype.hasOwnProperty.call(o,"ProtocolVersion")&&o.ProtocolVersion>=20180723&&Object.prototype.hasOwnProperty.call(o,"OuterStartTime")&&(s=o.OuterStartTime)}var u=e.Host;this.Ua({frameId:0,parentIds:[],outerStartTime:s,scheme:"https:",script:G(u),appHost:$(u),orgId:e.OrgId,initConfig:void 0,pageRsp:e.PageResponse,consentOverride:this.Xt.getConsent()})}catch(t){vt(i)}}},n.prototype.La=function(t){this.Eo&&this.Eo===t||0!=this.Eo&&this.Dn.parent&&this.Na.postMessage(this.Dn.parent,[du.RequestFrameId])},n.prototype.Ua=function(t){var n,i,r=this;if(this.Eo)this.Eo!==t.frameId?(this.Eo,t.frameId,this._t.recording.splitPage(Wt.FsShutdownFrame)):this.Eo;else if(he(location.href,{source:"log",type:"debug"}),t.frameId,this.zo=t.scheme,this.bu=t.script,this.Su=t.appHost,this.xu=t.orgId,this._u=t.initConfig,this.Eo=t.frameId,this.So=t.parentIds,t.pageRsp&&this.isSafeResponse(t.pageRsp)){if(!this.gu){var e=null!==(n=t.consentOverride)&&void 0!==n?n:!!t.pageRsp.Consented;this.handleResponse(t.pageRsp,e),this.fireFsReady(),this.At.enqueueFirst({Kind:Ot.SYS_REPORTCONSENT,Args:[e,Bt.Document]}),this.At.enqueueFirst({Kind:Ot.SET_FRAME_BASE,Args:[he(Mr(this.Dn),{source:"event",type:Ot.SET_FRAME_BASE}),dt(this.Dn.document)]}),this.At.enqueue({Kind:Ot.SCRIPT_COMPILED_VERSION,Args:["11aa377d19"]}),this.At.enqueue(Uu({type:"default"})),this.addInitEvent(),this.At.rebaseIframe(t.outerStartTime,null!==(i=t.minimumWhen)&&void 0!==i?i:0),this._t.time.setStartTime(t.outerStartTime),this.Ou&&this.At.startPipeline({pageId:this.Ou,serverPageStart:t.pageRsp.PageStart,isNewSession:!!t.pageRsp.IsNewSession,frameId:t.frameId,parentIds:t.parentIds}).then(function(){r.flushPendingChildFrameInits(),r.enqueueDocumentProperties(r.Dn.document),r.fullyStarted()})}}else this.shutdown(Wt.FsShutdownFrame)},n}(Cu),Xu=function(){function t(t,n,i){void 0===n&&(n=function(){}),void 0===i&&(i=!1),this.Mt=t,this.Fa=n,this.Da=i,this._cookies={},this._cookies=k(this.Mt)}return t.prototype.setDomain=function(t){this.Ba=t},t.prototype.getValue=function(t,n){var i=this._cookies[t];if(!i)try{i=localStorage[null!=n?n:t]}catch(t){}return i},t.prototype.setValue=function(t,n,i,r){if(null!=this.Ba&&!this.Da){var e=[];this._setCookie(t,n,i,e),this.Wa(null!=r?r:t,n,e,t),e.length>0&&this.Fa(e)}},t.prototype.setCookie=function(t,n,i){this._setCookie(t,n,i,[])},Object.defineProperty(t.prototype,"cookies",{get:function(){return this._cookies},enumerable:!1,configurable:!0}),t.prototype.clearCookie=function(t,n){if(this._cookies[t]&&(this.Mt.cookie=Ju(this.Ba,t,"","Thu, 01 Jan 1970 00:00:01 GMT"),delete this._cookies[t]),n)try{delete localStorage[n]}catch(t){}},t.prototype._setCookie=function(t,n,i,r){try{this.Mt.cookie=Ju(this.Ba,t,n,i),-1===this.Mt.cookie.indexOf(n)&&r.push([t,"cookie"])}finally{this._cookies=k(this.Mt)}},t.prototype.Wa=function(t,n,i,r){try{localStorage[t]=n,localStorage[t]!==n&&i.push([null!=r?r:t,"localStorage"])}catch(n){i.push([null!=r?r:t,"localStorage",String(n)])}},t}();function Ju(t,n,i,r){var e=n+"="+i;return e+="; domain="+function(t){return t?"."+encodeURIComponent(t):""}(t),e+="; Expires="+r+"; path=/; SameSite=Strict","https:"===location.protocol&&(e+="; Secure"),e}var Zu,Yu="fs_cid",ta=function(){function t(t){this.Sa=t,this.qa=1;var n=this.Sa.getValue(Yu,wn);this.Qa=function(t){var n={consent:Dt.RevokeConsent};if(!t)return n;var i=t.split(".");return i.length<1?n:(i[0],"1"===i[1]?{consent:Dt.GrantConsent}:n)}(n)}return t.prototype.getConsentState=function(){return this.Qa.consent},t.prototype.setConsentState=function(t){if(this.Qa.consent=t,t!==Dt.RevokeConsent){var n=this.Va(),i=this.za();this.Sa.setValue(Yu,n,i,wn)}else this.Sa.clearCookie(Yu,wn)},t.prototype.Va=function(){return[this.qa,this.Qa.consent===Dt.GrantConsent?1:0].join(".")},t.prototype.za=function(){return new Date(1e3*S()).toUTCString()},t}(),na="fs_lua",ia=function(){function t(t){this.qa=1,this.Sa=t;var n=this.Sa.getValue(na,gn);this.Qa=function(t){var n={lastUserActivityTime:void 0};if(!t)return n;var i=t.split(".");return i.length<1?n:(i[0],{lastUserActivityTime:_(i[1])})}(n)}return t.prototype.getLastUserActivityTimeMS=function(){return this.Qa.lastUserActivityTime},t.prototype.setLastUserActivityTimeMS=function(t){this.Qa.lastUserActivityTime=t;var n=this.Va(),i=this.za();this.Sa.setValue(na,n,i,gn)},t.prototype.Va=function(){var t;return[this.qa,null!==(t=this.Qa.lastUserActivityTime)&&void 0!==t?t:""].join(".")},t.prototype.za=function(){return new Date(p()+qu).toUTCString()},t}(),ra="fs_uid",ea=function(){function t(t,n,i,r){void 0===n&&(n=document),void 0===i&&(i=function(){}),void 0===r&&(r=!1),this.$a=void 0,this.wa=new Xu(n,i,r),this.Ga=new ta(this.wa),this.Xa=new ia(this.wa),this.Qa=this.Ja(t)}return t.prototype.Ja=function(t){var n=x(this.wa.getValue(ra,pn));return n&&n.orgId==t?n:{expirationAbsTimeSeconds:S(),orgId:t,userId:"",sessionId:"",appKeyHash:""}},t.prototype.getConsentStore=function(){return this.Ga},t.prototype.clear=function(){this.Xa.setLastUserActivityTimeMS(void 0),this.Qa.sessionStartTime=this.Qa.pageCount=void 0,this.Qa.userId=this.Qa.sessionId=this.Qa.appKeyHash=this.$a="",this.Qa.expirationAbsTimeSeconds=S(),this.Za()},t.prototype.create=function(t){this.Xa.setLastUserActivityTimeMS(t.lastUserActivityTime),this.Qa=(0,e.__assign)((0,e.__assign)({},this.Qa),t),this.Za()},t.prototype.getOrgId=function(){return this.Qa.orgId},t.prototype.getUserId=function(){return this.Qa.userId},t.prototype.setUserId=function(t){this.Qa.userId=t,this.Za()},t.prototype.getSessionId=function(){return this.Qa.sessionId},t.prototype.getAppKeyHash=function(){return this.Qa.appKeyHash},t.prototype.getCookies=function(){return this.wa.cookies},t.prototype.setAppId=function(t){this.$a=t,this.Qa.appKeyHash=qo(t),this.Za()},t.prototype.getAppId=function(){return this.$a},t.prototype.setSessionStartTimeMS=function(t){this.Qa.sessionStartTime=t,this.Za()},t.prototype.getSessionStartTimeMS=function(){return this.Qa.sessionStartTime},t.prototype.setLastUserActivityTimeMS=function(t){this.Xa.setLastUserActivityTimeMS(t)},t.prototype.getLastUserActivityTimeMS=function(){return this.Xa.getLastUserActivityTimeMS()},t.prototype.setPageCount=function(t){this.Qa.pageCount=t,this.Za()},t.prototype.getPageCount=function(){return this.Qa.pageCount},t.prototype.getClientStore=function(){return this.wa},t.prototype.setCookie=function(t,n,i){void 0===i&&(i=new Date(p()+6048e5).toUTCString()),this.wa.setCookie(t,n,i)},t.prototype.setCookieDomain=function(t,n){var i=n;(C(i)||i.match(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/g))&&(i="");var r=function(t){return R(t,"_fs_cookie_domain")}(t);"string"==typeof r&&(i=r),this.wa.setDomain(i)},t.prototype.setIds=function(t,n,i,r){this.setCookieDomain(t,n),this.Qa.userId=i,this.Qa.sessionId=r,this.Za()},t.prototype.clearAppId=function(){return!!this.Qa.appKeyHash&&(this.$a="",this.Qa.appKeyHash="",this.Za(),!0)},t.prototype.encode=function(){var t,n,i,r=[this.Qa.userId,null!==(t=this.Qa.sessionId)&&void 0!==t?t:"",""+(null!==(n=this.Qa.sessionStartTime)&&void 0!==n?n:""),"",""+(null!==(i=this.Qa.pageCount)&&void 0!==i?i:"")].join(":"),e=["",this.Qa.orgId,r];return this.Qa.appKeyHash&&e.push(encodeURIComponent(this.Qa.appKeyHash)),e.push("/"+this.Qa.expirationAbsTimeSeconds),e.join("#")},t.prototype.Za=function(){var t=this.encode(),n=new Date(1e3*this.Qa.expirationAbsTimeSeconds).toUTCString();this.wa.setValue(ra,t,n,pn)},t;}(),sa=((Zu={})[Xt.Document]={assetMapId:"str",releaseDatetime:"date",releaseVersion:"str"},Zu[Xt.Event]={},Zu[Xt.Page]={pageName:"str",releaseVersion:"str",releaseDatetime:"str"},Zu[Xt.User]={uid:"str",displayName:"str",email:"str"},Zu),oa={str:ua,bool:aa,real:ca,"int":ha,date:fa,strs:va(ua),bools:va(aa),reals:va(ca),ints:va(ha),dates:va(fa),objs:va(la),obj:la};function ua(t){return"string"==typeof t}function aa(t){return"boolean"==typeof t}function ca(t){return"number"==typeof t}function ha(t){return"number"==typeof t&&t-o.mathFloor(t)==0}function fa(t){return!(!t||(t.constructor===Date?isNaN(t):"number"!=typeof t&&"string"!=typeof t||isNaN(new Date(t))))}function va(t){return function(n){if(!(n instanceof Array))return!1;for(var i=0;i=0)return[void 0,Jt.FsId];var e=qo(r),s=void 0;return n&&n.Qa.appKeyHash&&n.Qa.appKeyHash!==e&&n.Qa.appKeyHash!==r&&(n.Qa.appKeyHash,s=Jt.NewUid),[r,s]}(f,this.Uu),l=v[0],d=v[1];if(!l)return Jt.FsId,{events:r};a.properties.uid=l,this.Uu.setAppId(l),d===Jt.NewUid&&(i=!0)}}Ea(t.source,"setVars",e),e(this.nc(s,wa(s,a.properties),u));break;default:(0,Ir.nt)(s,"Unsupported");}}catch(n){t.operation,n.message}return{events:r,reidentify:i}},t.prototype.nc=function(t,n,i,r){var e=vt(n.PayloadToSend),s=!!i&&"fs"!==i;switch(t){case Xt.Event:return{When:0,Kind:Ot.SYS_CUSTOM,Args:s?[r,e,i]:[r,e]};case Xt.Document:case Xt.Page:case Xt.User:return{When:0,Kind:Ot.SYS_SETVAR,Args:s?[t,e,i]:[t,e]};default:(0,Ir.nt)(t,"Unsupported");}},t.prototype.ic=function(t,n){var i=t.PayloadToSend;if(i&&"object"==typeof i){var r=0,e={};for(var s in i)if(!(s in this.Ya)){var o=i[s];this.Ya[s]={value:o,apiSource:n},e[s]=o,r++}if(0!==r)return{PayloadToSend:e,ValidationErrors:t.ValidationErrors}}},t;}();function wa(t,n){var i=1500;return ga(function(){return--i},t,n)}var ga=function(t,n,i){var r,e,s={PayloadToSend:{},ValidationErrors:[]},u=function(i){var r=ga(t,n,i);return s.ValidationErrors=s.ValidationErrors.concat(r.ValidationErrors),r.PayloadToSend};for(var a in i)if(o.objectHasOwnProp(i,a)){if(t()<=0)break;var c=i[a],h=ya(n,a,c,s.ValidationErrors);if(h){var f=h.name;if("obj"!==h.type){if("objs"!==h.type)s.PayloadToSend[f]=ma(h.type,h.value);else{n!=Xt.Event&&s.ValidationErrors.push({Type:"vartype",FieldName:f,ValueType:"Array (unsupported)"});for(var v=[],l=0;l0&&(s.PayloadToSend[f]=v)}}else{var d=u(h.value),p=(e="_obj").length>(r=a).length||r.substring(r.length-e.length)!=e?f.substring(0,f.length-"_obj".length):f;s.PayloadToSend[p]=d}}else s.PayloadToSend[a]=ma("str",c)}return s};function ma(t,n){var i=n;return"str"==t&&"string"==typeof i&&(i=i.trim()),null==i||"date"!=t&&i.constructor!=Date||(i=function(t){var n=t.constructor===Date?t:new Date(t);try{return n.toISOString()}catch(t){return null}}(i)),i}function ya(t,n,i,r){var e=n,s=e,u=typeof i;if("undefined"===u)return r.push({Type:"vartype",FieldName:e,ValueType:u+" (unsupported)"}),null;var a=sa[t];if(o.objectHasOwnProp(a,e))return{name:e,type:a[e],value:i};var c=e.lastIndexOf("_");if(-1==c||!ba(e.substring(c+1))){var h=function(t){for(var n in oa)if(oa[n](t))return n;return null}(i);if(null==h)return i?r.push({Type:"vartype",FieldName:e}):r.push({Type:"vartype",FieldName:e,ValueType:"null (unsupported)"}),null;c=e.length,e=e+"_"+h}var f=e.substring(0,c),v=e.substring(c+1);if("object"===u&&!i)return r.push({Type:"vartype",FieldName:s,ValueType:"null (unsupported)"}),null;if(!da.test(f)){f=f.replace(/[^a-zA-Z0-9_]/g,"").replace(/^[0-9]+/,""),/[0-9]/.test(f[0])&&(f=f.substring(1)),r.push({Type:"varname",FieldName:s});var l=f+"_"+v;if(da.source,""==f)return null;e=l}return ba(v)?function(t,n){return oa[t](n)}(v,i)?{name:e,type:v,value:i}:(vt(i),"number"===u?u=i%1==0?"integer":"real":"object"==u&&null!=i&&i.constructor==Date&&(u=isNaN(i)?"invalid date":"date"),r.push({Type:"vartype",FieldName:s,ValueType:u}),null):(r.push({Type:"varname",FieldName:s}),null)}function ba(t){return!!oa[t]}function Ea(t,n,i){var r=Uu({source:t,type:"api",entrypoint:n});r&&i({When:0,Kind:r.Kind,Args:r.Args})}function Sa(t,n){return(0,e.__awaiter)(this,void 0,Yn,function(){var i,s,o,a,c;return(0,e.__generator)(this,function(h){switch(h.label){case 0:if(h.trys.push([0,2,,3]),gr||yr||function(t){return!!R(t,"_fs_use_polyfilled_apis","boolean")}(t))return[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];if(!t.document||n.status!==r.Unknown)return[2,n];if(i=function(t,n){var i=n.functions,s={},o=(0,e.__assign)({},n.helpers);if(o.functionToString=function(t,n){var i,r,e=null===(i=t["__core-js_shared__"])||void 0===i?void 0:i.inspectSource;if(e){var s=function(){return e(this)};if(ka(s,2))return s}var o=null===(r=t["__core-js_shared__"])||void 0===r?void 0:r["native-function-to-string"];if(ka(o))return o;var u=n.__zone_symbol__OriginalDelegate;return ka(u)?u:ka(n)?n:void 0}(t,o.functionToString),!o.functionToString)return n;var u=!1;for(var a in i)if(i[a]){if(s[a]=Ia(o.functionToString,i[a]),s[a]||(s[a]=Ta(o.functionToString,o,a)),!s[a])return n;s[a]!==i[a]&&(u=!0)}else s[a]=void 0;return{status:r.Clean,functions:u?s:i,helpers:o,errors:[]}}(t,n),i.status===r.Clean)return[2,i];(s=t.document.createElement("iframe")).id="FullStory-iframe",s.className="fs-hide",s.style.display="none",o=t.document.body||t.document.head||t.document.documentElement||t.document;try{o.appendChild(s)}catch(t){return[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})]}return s.contentWindow?(a=u(s.contentWindow,r.Clean),s.parentNode&&s.parentNode.removeChild(s),a.status===r.UnrecoverableFailure?[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})]:[4,xa(a,n)]):[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];case 1:return[2,h.sent()];case 2:return c=h.sent(),Tt.sendToBugsnag(c,"error"),[2,(0,e.__assign)((0,e.__assign)({},n),{status:r.Clean})];case 3:return[2];}})})}function xa(t,n){var i,s=new Yn(function(t){return i=t});return setTimeout(function(){try{t.functions.jsonParse("[]").push(0)}catch(t){i((0,e.__assign)((0,e.__assign)({},n),{status:r.Clean}))}i(t)}),s}function ka(t,n){var i;if(void 0===n&&(n=0),!t)return!1;try{t.call(function(){})}catch(t){return!1}var r=function(t){try{return void t.call(null)}catch(t){return (t.stack||"").replace(/__fs_nomangle_check_stack(.|\n)*$/,"");}},e=void 0;0!==n&&"number"==typeof Error.stackTraceLimit&&(e=Error.stackTraceLimit,Error.stackTraceLimit=Number.POSITIVE_INFINITY);var s=[function(){throw new Error("")},t],o=function __fs_nomangle_check_stack(){return s.map(r)}(),u=o[0],a=o[1];if(void 0!==e&&(Error.stackTraceLimit=e),!u||!a)return!1;for(var c="\n".charCodeAt(0),h=u.length>a.length?a.length:u.length,f=1,v=f;v=0}var Aa=["__zone_symbol__OriginalDelegate","nr@original"];function Ia(t,n){if(n){for(var i=0,r=Aa;i0&&this.lc[t].some(function(t){return!t.disconnected})},t.prototype.takeRecords=function(t){var n,i=null!==(n=this.lc[t.type])&&void 0!==n?n:[];if(0!==i.length)for(var r=0,e=i;r-1,!!ja.userAgent.match("CriOS")||"Google Inc."===Oa&&!Ma&&!Ka),Fa=/Firefox/.test(window.navigator.userAgent);function Da(t){if(!Fa)return!1;var n=window.navigator.userAgent.match(/Firefox\/(\d+)/);return!(!n||!n[1])&&parseInt(n[1],10)0||null===H){n="Init config rejected: "+R.unrecoverable.join(",\n"),k(t,new Error(n));break}R.recoverable.length>0&&(n="Init config partially rejected: "+R.recoverable.join(",\n")),a=H,x(t);break;default:(0,Ir.nt)(t,"invalid operation");}}catch(n){Tt.sendToBugsnag(n,"error"),k(t,n)}},A=0,I=p;A=0;u--)(e=t[u])&&(o=(s<3?e(o):s>3?e(n,i,o):e(n,i))||o);return s>3&&o&&Object.defineProperty(n,i,o),o}function a(t,n){return function(i,r){n(i,r,t)}}function c(t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,n)}function h(t,n,i,r){return new(i||(i=Promise))(function(e,s){function o(t){try{a(r.next(t))}catch(t){s(t)}}function u(t){try{a(r["throw"](t))}catch(t){s(t)}}function a(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(t){t(n)})).then(o,u)}a((r=r.apply(t,n||[])).next())})}function f(t,n){var i,r,e,s,o={label:0,sent:function(){if(1&e[0])throw e[1];return e[1]},trys:[],ops:[]};return s={next:u(0),"throw":u(1),"return":u(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function u(s){return function(u){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,r&&(e=2&s[0]?r["return"]:s[0]?r["throw"]||((e=r["return"])&&e.call(r),0):r.next)&&!(e=e.call(r,s[1])).done)return e;switch(r=0,e&&(s=[2&s[0],e.value]),s[0]){case 0:case 1:e=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((e=(e=o.trys).length>0&&e[e.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!e||s[1]>e[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function p(t,n){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var r,e,s=i.call(t),o=[];try{for(;(void 0===n||n-->0)&&!(r=s.next()).done;)o.push(r.value)}catch(t){e={error:t}}finally{try{r&&!r.done&&(i=s["return"])&&i.call(s)}finally{if(e)throw e.error}}return o}function w(){for(var t=[],n=0;n1||u(t,n)})})}function u(t,n){try{(i=e[t](n)).value instanceof y?Promise.resolve(i.value.v).then(a,c):h(s[0][2],i)}catch(t){h(s[0][3],t)}var i}function a(t){u("next",t)}function c(t){u("throw",t)}function h(t,n){t(n),s.shift(),s.length&&u(s[0][0],s[0][1])}}function E(t){var n,i;return n={},r("next"),r("throw",function(t){throw t}),r("return"),n[Symbol.iterator]=function(){return this},n;function r(r,e){n[r]=t[r]?function(n){return(i=!i)?{value:y(t[r](n)),done:"return"===r}:e?e(n):n}:e}}function S(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,i=t[Symbol.asyncIterator];return i?i.call(t):(t=d(t),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(i){n[i]=t[i]&&function(n){return new Promise(function(r,e){!function(t,n,i,r){Promise.resolve(r).then(function(n){t({value:n,done:i})},n)}(r,e,(n=t[i](n)).done,n.value)})}}}function x(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t}var k=Object.create?function(t,n){Object.defineProperty(t,"default",{enumerable:!0,value:n})}:function(t,n){t["default"]=n};function _(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var i in t)"default"!==i&&Object.prototype.hasOwnProperty.call(t,i)&&v(n,t,i);return k(n,t),n}function A(t){return t&&t.__esModule?t:{"default":t}}function I(t,n,i,r){if("a"===i&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?t!==n||!r:!n.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?r:"a"===i?r.call(t):r?r.value:n.get(t)}function T(t,n,i,r,e){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!e)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?t!==n||!e:!n.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?e.call(t,i):e?e.value=i:n.set(t,i),i}function C(t,n){if(null===n||"object"!=typeof n&&"function"!=typeof n)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof t?n===t:t.has(n)}}},n={};function i(r){var e=n[r];if(void 0!==e)return e.exports;var s=n[r]={exports:{}};return t[r](s,s.exports,i),s.exports}i.d=function(t,n){for(var r in n)i.o(n,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},i.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i(248)}(); diff --git a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts index 8090117ad5df2b..656c70a0dcbfd3 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/fleet_extensions/utils.ts @@ -152,7 +152,7 @@ type RegistryPolicyTemplateWithInputs = RegistryPolicyTemplate & { export const hasPolicyTemplateInputs = ( policyTemplate: RegistryPolicyTemplate ): policyTemplate is RegistryPolicyTemplateWithInputs => { - return policyTemplate.hasOwnProperty('inputs'); + return Object.hasOwn(policyTemplate, 'inputs'); }; export const getVulnMgmtCloudFormationDefaultValue = (packageInfo: PackageInfo): string => { diff --git a/x-pack/plugins/cross_cluster_replication/public/app/components/follower_index_actions_providers/follower_index_pause_provider.js b/x-pack/plugins/cross_cluster_replication/public/app/components/follower_index_actions_providers/follower_index_pause_provider.js index ea67df7b4fb6dc..7211c6e1425a2b 100644 --- a/x-pack/plugins/cross_cluster_replication/public/app/components/follower_index_actions_providers/follower_index_pause_provider.js +++ b/x-pack/plugins/cross_cluster_replication/public/app/components/follower_index_actions_providers/follower_index_pause_provider.js @@ -107,7 +107,6 @@ class FollowerIndexPauseProviderUi extends PureComponent { )}

)} - {!isSingle && (

diff --git a/x-pack/plugins/data_visualizer/common/types/field_vis_config.ts b/x-pack/plugins/data_visualizer/common/types/field_vis_config.ts index 8d46ca6c2d3c17..73b228ff454ef1 100644 --- a/x-pack/plugins/data_visualizer/common/types/field_vis_config.ts +++ b/x-pack/plugins/data_visualizer/common/types/field_vis_config.ts @@ -54,11 +54,11 @@ export interface FileBasedUnknownFieldVisConfig { export function isFileBasedFieldVisConfig( field: FieldVisConfig | FileBasedFieldVisConfig ): field is FileBasedFieldVisConfig { - return !field.hasOwnProperty('existsInDocs'); + return !Object.hasOwn(field, 'existsInDocs'); } export function isIndexBasedFieldVisConfig( field: FieldVisConfig | FileBasedFieldVisConfig ): field is FieldVisConfig { - return field.hasOwnProperty('existsInDocs'); + return Object.hasOwn(field, 'existsInDocs'); } diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx index 6f9f481a70a50f..8676be744cb53b 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/combined_fields/combined_fields_form.tsx @@ -145,7 +145,7 @@ export class CombinedFieldsForm extends Component { } const mappings = this.parseMappings(); - return mappings.properties.hasOwnProperty(name); + return Object.hasOwn(mappings.properties, name); }; render() { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx index 2f3dabec566c16..259b45d4e297bf 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx @@ -180,7 +180,7 @@ export const ResultsLinks: FC = ({ fieldStats && typeof fieldStats === 'object' && timeFieldName !== undefined && - fieldStats.hasOwnProperty(timeFieldName) && + Object.hasOwn(fieldStats, timeFieldName) && fieldStats[timeFieldName].earliest !== undefined && fieldStats[timeFieldName].latest !== undefined ) { diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts b/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts index f8d299f9e0ec73..0aca4f9260b7d3 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/common/components/utils/utils.ts @@ -58,7 +58,7 @@ export function readFile(file: File) { export function createUrlOverrides(overrides: InputOverrides, originalSettings: InputOverrides) { const formattedOverrides: InputOverrides = {}; for (const o in overrideDefaults) { - if (overrideDefaults.hasOwnProperty(o)) { + if (Object.hasOwn(overrideDefaults, o)) { let value = overrides[o]; if ( (Array.isArray(value) && isEqual(value, originalSettings[o])) || diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts index 6e3f4ae33fa3f1..6cfa569fdeafdd 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/hooks/use_overall_stats.ts @@ -354,7 +354,7 @@ export function useOverallStats { nonAggregatableFields.forEach((field, fieldIdx) => { - if (doc.hasOwnProperty(field)) { + if (Object.hasOwn(doc, field)) { nonAggregatableFieldsCount[fieldIdx] += 1; nonAggregatableFieldsUniqueCount[fieldIdx].add(doc[field]!); } diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx index 9412f08172c48c..745e03da10d09c 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/index_data_visualizer.tsx @@ -229,7 +229,7 @@ const DataVisualizerStateContextProvider: FC> { return ( isPopulatedObject(arg, ['rawResponse']) && - (arg.rawResponse as estypes.SearchResponse).hasOwnProperty('hits') + Object.hasOwn(arg.rawResponse as estypes.SearchResponse, 'hits') ); } @@ -179,8 +179,8 @@ export const processAggregatableFieldsExistResponse = ( }); } else { if ( - datafeedConfig?.script_fields?.hasOwnProperty(field) || - datafeedConfig?.runtime_mappings?.hasOwnProperty(field) + Object.hasOwn(datafeedConfig?.script_fields ?? {}, field) || + Object.hasOwn(datafeedConfig?.runtime_mappings ?? {}, field) ) { const cardinality = get(aggregations, [ ...aggsPath, diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts index 0e0efb057706ca..87235a7d14570d 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/utils/saved_search_utils.ts @@ -110,7 +110,7 @@ export function getEsQueryFromSavedSearch({ if (Array.isArray(savedQuery.bool.filter) && timeField !== undefined) { savedQuery.bool.filter = savedQuery.bool.filter.filter( (c: QueryDslQueryContainer) => - !(c.hasOwnProperty('range') && c.range?.hasOwnProperty(timeField)) + !(Object.hasOwn(c, 'range') && Object.hasOwn(c.range ?? {}, timeField)) ); } diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts index aebc84e41896a7..fd5b98a02ff083 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/curation/results/utils.ts @@ -43,7 +43,7 @@ export const convertToResultFormat = (document: CurationResult): SearchResult => // Convert `key: 'value'` into `key: { raw: 'value' }` const result = Object.entries(document).reduce((acc, [key, value]) => { acc[key] = - isNestedObject(value) || Object.prototype.hasOwnProperty.call(value, 'raw') + isNestedObject(value) || (typeof value === 'object' && Object.hasOwn(value, 'raw')) ? value : { raw: value }; return acc; diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion_logic.ts index 907961c142fb5e..a05e9525737813 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curation_suggestion/curation_suggestion_logic.ts @@ -282,7 +282,7 @@ const updateSuggestion = async ( } ); - if (response.results[0].hasOwnProperty('error')) { + if (Object.hasOwn(response.results[0], 'error')) { throw new Error((response.results[0] as APIResponseError).error); } diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_logic.ts index 3f4e1eb2318e67..5062c933d9f294 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/curations/views/curations_history/components/ignored_queries_panel/ignored_queries_logic.ts @@ -130,7 +130,7 @@ export const IgnoredQueriesLogic = kea(v: T | T[]): T[] => (Array.isArray(v) ? v : [v]); const toString = (v1: T) => String(v1); const normalizeBoostValue = (boost: RawBoost): Boost => { - if (!boost.hasOwnProperty('value')) { + if (!Object.hasOwn(boost, 'value')) { // Can't simply do `return boost` here as TS can't infer the correct type return omit(boost, 'value'); } diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result_settings/result_settings_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result_settings/result_settings_logic.ts index 288600eea8aa0a..481baca5e35d40 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/result_settings/result_settings_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/result_settings/result_settings_logic.ts @@ -151,7 +151,7 @@ export const ResultSettingsLogic = kea resetAllFields(resultFields), // @ts-expect-error upgrade typescript v5.1.6 updateField: (resultFields, { fieldName, settings }) => - resultFields.hasOwnProperty(fieldName) + Object.hasOwn(resultFields, fieldName) ? { ...resultFields, [fieldName]: settings } : resultFields, }, diff --git a/x-pack/plugins/enterprise_search/public/applications/app_search/components/schema/schema_logic.ts b/x-pack/plugins/enterprise_search/public/applications/app_search/components/schema/schema_logic.ts index f679e34dec56ed..418cfa66471f7b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/app_search/components/schema/schema_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/app_search/components/schema/schema_logic.ts @@ -140,7 +140,7 @@ export const SchemaLogic = kea>({ }, listeners: ({ actions, values }) => ({ addSchemaField: ({ fieldName, fieldType }) => { - if (values.schema.hasOwnProperty(fieldName)) { + if (Object.hasOwn(values.schema, fieldName)) { setErrorMessage(ADD_SCHEMA_ERROR(fieldName)); actions.closeModal(); } else { diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/docs_explorer/convert_results.ts b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/docs_explorer/convert_results.ts index 96ab127870a345..ff8e67817f86e6 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/docs_explorer/convert_results.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/search_application/docs_explorer/convert_results.ts @@ -49,7 +49,7 @@ export const getIndex = (result: SearchResult): string => { export const isFieldValue = (value: unknown): value is FieldValue => { if (value === null || typeof value !== 'object') return false; - return value.hasOwnProperty('raw') || value.hasOwnProperty('snippet'); + return Object.hasOwn(value, 'raw') || Object.hasOwn(value, 'snippet'); }; export const flattenObjectPreservingValues = ( diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.ts b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.ts index ddefe7e1b0d55f..864bfa5a34fa2b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/pipelines/pipelines_json_configurations_logic.ts @@ -98,7 +98,7 @@ export const IndexPipelinesConfigurationsLogic = kea< selectedPipeline: [ () => [selectors.selectedPipelineId, selectors.pipelines], (selectedPipelineId: string, pipelines: Record) => { - if (pipelines.hasOwnProperty(selectedPipelineId)) { + if (Object.hasOwn(pipelines, selectedPipelineId)) { return pipelines[selectedPipelineId]; } return undefined; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/pipelines/is_managed.ts b/x-pack/plugins/enterprise_search/public/applications/shared/pipelines/is_managed.ts index 30cf5ac145c876..a5bb8b23a77c32 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/pipelines/is_managed.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/pipelines/is_managed.ts @@ -17,7 +17,7 @@ interface IngestPipelineWithMetadata extends IngestPipeline { const isIngestPipelineWithMetadata = ( pipeline: IngestPipeline ): pipeline is IngestPipelineWithMetadata => { - return pipeline.hasOwnProperty('_meta'); + return Object.hasOwn(pipeline, '_meta'); }; export const isManagedPipeline = (pipeline: IngestPipeline): boolean => { diff --git a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts index e6abf4ccd54649..33b97bf0309547 100644 --- a/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts +++ b/x-pack/plugins/enterprise_search/server/lib/indices/pipelines/ml_inference/pipeline_processors/get_ml_inference_pipeline_processors.ts @@ -91,7 +91,7 @@ export const fetchPipelineProcessorInferenceData = async ( // Get the inference processors; there is one per configured field, but they share the same model ID const inferenceProcessors = subProcessors.filter((processor) => - processor.hasOwnProperty('inference') + Object.hasOwn(processor, 'inference') ); const trainedModelName = inferenceProcessors[0]?.inference?.model_id; @@ -153,7 +153,7 @@ export const getMlModelConfigsForModelIds = async ( trainedModelsStats.trained_model_stats.forEach((trainedModelStats) => { const trainedModelName = trainedModelStats.model_id; - if (modelConfigs.hasOwnProperty(trainedModelName)) { + if (Object.hasOwn(modelConfigs, trainedModelName)) { modelConfigs[trainedModelName].modelState = parseModelStateFromStats( trainedModelStats, modelConfigs[trainedModelName].types diff --git a/x-pack/plugins/fields_metadata/server/services/fields_metadata/fields_metadata_client.test.ts b/x-pack/plugins/fields_metadata/server/services/fields_metadata/fields_metadata_client.test.ts index e693725a93d89c..93c43fa69e5c87 100644 --- a/x-pack/plugins/fields_metadata/server/services/fields_metadata/fields_metadata_client.test.ts +++ b/x-pack/plugins/fields_metadata/server/services/fields_metadata/fields_metadata_client.test.ts @@ -93,16 +93,16 @@ describe('FieldsMetadataClient class', () => { const timestampField = timestampFieldInstance.toPlain(); - expect(timestampField.hasOwnProperty('dashed_name')).toBeTruthy(); - expect(timestampField.hasOwnProperty('description')).toBeTruthy(); - expect(timestampField.hasOwnProperty('example')).toBeTruthy(); - expect(timestampField.hasOwnProperty('flat_name')).toBeTruthy(); - expect(timestampField.hasOwnProperty('level')).toBeTruthy(); - expect(timestampField.hasOwnProperty('name')).toBeTruthy(); - expect(timestampField.hasOwnProperty('normalize')).toBeTruthy(); - expect(timestampField.hasOwnProperty('required')).toBeTruthy(); - expect(timestampField.hasOwnProperty('short')).toBeTruthy(); - expect(timestampField.hasOwnProperty('type')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'dashed_name')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'description')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'example')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'flat_name')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'level')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'name')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'normalize')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'required')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'short')).toBeTruthy(); + expect(Object.hasOwn(timestampField, 'type')).toBeTruthy(); }); it('should attempt resolving the field from an integration if it does not exist in ECS/Metadata and the integration and dataset params are provided', async () => { @@ -118,14 +118,14 @@ describe('FieldsMetadataClient class', () => { const onePasswordField = onePasswordFieldInstance.toPlain(); - expect(onePasswordField.hasOwnProperty('name')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('type')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('description')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('flat_name')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('source')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('dashed_name')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('normalize')).toBeTruthy(); - expect(onePasswordField.hasOwnProperty('short')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'name')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'type')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'description')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'flat_name')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'source')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'dashed_name')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'normalize')).toBeTruthy(); + expect(Object.hasOwn(onePasswordField, 'short')).toBeTruthy(); }); it('should not resolve the field from an integration if the integration and dataset params are not provided', async () => { @@ -148,7 +148,7 @@ describe('FieldsMetadataClient class', () => { const fields = fieldsDictionaryInstance.toPlain(); - expect(fields.hasOwnProperty('@timestamp')).toBeTruthy(); + expect(Object.hasOwn(fields, '@timestamp')).toBeTruthy(); }); it('should resolve a FieldsMetadataDictionary of matching fields, including integration fields when integration and dataset params are provided', async () => { @@ -162,8 +162,8 @@ describe('FieldsMetadataClient class', () => { const fields = fieldsDictionaryInstance.toPlain(); - expect(fields.hasOwnProperty('@timestamp')).toBeTruthy(); - expect(fields.hasOwnProperty('onepassword.client.platform_version')).toBeTruthy(); + expect(Object.hasOwn(fields, '@timestamp')).toBeTruthy(); + expect(Object.hasOwn(fields, 'onepassword.client.platform_version')).toBeTruthy(); }); it('should resolve a FieldsMetadataDictionary of matching fields, skipping unmatched fields', async () => { @@ -177,9 +177,9 @@ describe('FieldsMetadataClient class', () => { const fields = fieldsDictionaryInstance.toPlain(); - expect(fields.hasOwnProperty('@timestamp')).toBeTruthy(); - expect(fields.hasOwnProperty('onepassword.client.platform_version')).toBeTruthy(); - expect(fields.hasOwnProperty('not-existing-field')).toBeFalsy(); + expect(Object.hasOwn(fields, '@timestamp')).toBeTruthy(); + expect(Object.hasOwn(fields, 'onepassword.client.platform_version')).toBeTruthy(); + expect(Object.hasOwn(fields, 'not-existing-field')).toBeFalsy(); }); }); }); diff --git a/x-pack/plugins/fields_metadata/server/services/fields_metadata/repositories/integration_fields_repository.ts b/x-pack/plugins/fields_metadata/server/services/fields_metadata/repositories/integration_fields_repository.ts index 0f25d9357855e0..cf3c2b0454c7de 100644 --- a/x-pack/plugins/fields_metadata/server/services/fields_metadata/repositories/integration_fields_repository.ts +++ b/x-pack/plugins/fields_metadata/server/services/fields_metadata/repositories/integration_fields_repository.ts @@ -82,12 +82,12 @@ export class IntegrationFieldsRepository { } // 2. Dataset is passed but was never fetched before - if (datasetName && !cachedIntegration.hasOwnProperty(datasetName)) { + if (datasetName && !Object.hasOwn(cachedIntegration, datasetName)) { return undefined; } // 3. Dataset is passed and it was previously fetched, should return the field - if (datasetName && cachedIntegration.hasOwnProperty(datasetName)) { + if (datasetName && Object.hasOwn(cachedIntegration, datasetName)) { const targetDataset = cachedIntegration[datasetName]; return targetDataset[fieldName]; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/app.tsx b/x-pack/plugins/fleet/public/applications/fleet/app.tsx index 65a57cc81523b9..ae4bbdf49747a7 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/app.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/app.tsx @@ -433,7 +433,6 @@ export const AppRoutes = memo( }} /> - {flyoutContext.isEnrollmentFlyoutOpen && ( )} - {flyoutContext.isFleetServerFlyoutOpen && ( flyoutContext.closeFleetServerFlyout()} /> diff --git a/x-pack/plugins/fleet/public/applications/integrations/app.tsx b/x-pack/plugins/fleet/public/applications/integrations/app.tsx index 992ecff3e49a32..8527dbc4c6c698 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/app.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/app.tsx @@ -169,7 +169,6 @@ export const AppRoutes = memo(() => { }} /> - {flyoutContext.isEnrollmentFlyoutOpen && ( { /> )} - {flyoutContext.isFleetServerFlyoutOpen && ( flyoutContext.closeFleetServerFlyout()} /> diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts index dd6760a9dc4ac0..d866e998b2886b 100644 --- a/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/cloud_security_posture/to_v8_11_0.ts @@ -22,7 +22,10 @@ export const migrateCspPackagePolicyToV8110: SavedObjectModelDataBackfillFn< const gcpPackage = updatedAttributes.inputs.find((input) => input.type === 'cloudbeat/cis_gcp'); if (gcpPackage) { - const isGcpAccountTypeExists = gcpPackage.streams[0]?.vars?.hasOwnProperty('gcp.account_type'); + const isGcpAccountTypeExists = Object.hasOwn( + gcpPackage.streams[0]?.vars ?? {}, + 'gcp.account_type' + ); if (!isGcpAccountTypeExists) { const migratedPolicy = { 'gcp.account_type': { value: 'single-account', type: 'text' } }; diff --git a/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts b/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts index ab17eeaac79216..8888ae75e46990 100644 --- a/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts +++ b/x-pack/plugins/fleet/server/services/api_keys/transform_api_keys.ts @@ -26,8 +26,8 @@ import type { export function isTransformApiKey(arg: any): arg is TransformAPIKey { return ( arg && - arg.hasOwnProperty('api_key') && - arg.hasOwnProperty('encoded') && + Object.hasOwn(arg, 'api_key') && + Object.hasOwn(arg, 'encoded') && typeof arg.encoded === 'string' ); } diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts index 58dde5d714886c..2ee8477e04f428 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/install.ts @@ -135,7 +135,7 @@ const installPreBuiltTemplates = async ( const esClientParams = { name: templateName, body: content }; const esClientRequestOptions = { ignore: [404] }; - if (content.hasOwnProperty('template') || content.hasOwnProperty('composed_of')) { + if (Object.hasOwn(content, 'template') || Object.hasOwn(content, 'composed_of')) { // Template is v2 return retryTransientEsErrors( () => esClient.indices.putIndexTemplate(esClientParams, esClientRequestOptions), diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts index e44e70b85efe0a..795c7418b3b702 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/template/template.ts @@ -651,10 +651,10 @@ function _generateMappings( function generateDynamicAndEnabled(field: Field) { const props: Properties = {}; - if (field.hasOwnProperty('enabled')) { + if (Object.hasOwn(field, 'enabled')) { props.enabled = field.enabled; } - if (field.hasOwnProperty('dynamic')) { + if (Object.hasOwn(field, 'dynamic')) { props.dynamic = field.dynamic; } return props; @@ -663,10 +663,10 @@ function generateDynamicAndEnabled(field: Field) { function generateNestedProps(field: Field) { const props = generateDynamicAndEnabled(field); - if (field.hasOwnProperty('include_in_parent')) { + if (Object.hasOwn(field, 'include_in_parent')) { props.include_in_parent = field.include_in_parent; } - if (field.hasOwnProperty('include_in_root')) { + if (Object.hasOwn(field, 'include_in_root')) { props.include_in_root = field.include_in_root; } return props; diff --git a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transform_utils.ts b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transform_utils.ts index 8a24e6fb78149f..16ff62acc1f748 100644 --- a/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transform_utils.ts +++ b/x-pack/plugins/fleet/server/services/epm/elasticsearch/transform/transform_utils.ts @@ -24,7 +24,7 @@ export const getDestinationIndexAliases = (aliasSettings: unknown): TransformAli if (isPopulatedObject(aliasSettings)) { Object.keys(aliasSettings).forEach((alias) => { - if (aliasSettings.hasOwnProperty(alias) && typeof alias === 'string') { + if (Object.hasOwn(aliasSettings, alias) && typeof alias === 'string') { const moveOnCreation = aliasSettings[alias]?.move_on_creation === true; aliases.push({ alias, move_on_creation: moveOnCreation }); } diff --git a/x-pack/plugins/graph/public/services/workspace/graph_client_workspace.js b/x-pack/plugins/graph/public/services/workspace/graph_client_workspace.js index 81e1d9ce232d5b..99eb2a63ee43b6 100644 --- a/x-pack/plugins/graph/public/services/workspace/graph_client_workspace.js +++ b/x-pack/plugins/graph/public/services/workspace/graph_client_workspace.js @@ -469,7 +469,7 @@ function GraphWorkspace(options) { }, }; for (const field in termsByField) { - if (termsByField.hasOwnProperty(field)) { + if (Object.hasOwn(termsByField, field)) { const tq = {}; tq[field] = termsByField[field]; q.bool.should.push({ @@ -529,7 +529,7 @@ function GraphWorkspace(options) { }); for (const n in allNodes) { - if (!allNodes.hasOwnProperty(n)) { + if (!Object.hasOwn(allNodes, n)) { continue; } let node = allNodes[n]; @@ -994,7 +994,7 @@ function GraphWorkspace(options) { const primaryVertices = []; const secondaryVertices = []; for (const fieldName in nodesByField) { - if (nodesByField.hasOwnProperty(fieldName)) { + if (Object.hasOwn(nodesByField, fieldName)) { primaryVertices.push({ field: fieldName, include: nodesByField[fieldName], @@ -1327,7 +1327,7 @@ function GraphWorkspace(options) { txtsByFieldType[node.data.field] = txt; }); for (const field in txtsByFieldType) { - if (txtsByFieldType.hasOwnProperty(field)) { + if (Object.hasOwn(txtsByFieldType, field)) { likeQueries.push({ more_like_this: { like: txtsByFieldType[field], diff --git a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/shared_fields/index_priority_field.tsx b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/shared_fields/index_priority_field.tsx index 309e283c14d7c4..e0989adf44e4fc 100644 --- a/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/shared_fields/index_priority_field.tsx +++ b/x-pack/plugins/index_lifecycle_management/public/application/sections/edit_policy/components/phases/shared_fields/index_priority_field.tsx @@ -28,9 +28,12 @@ export const IndexPriorityField: FunctionComponent = ({ phase }) => { const initialToggleValue = useMemo(() => { return ( - isNewPolicy || // enable index priority for new policies - !policy.phases[phase]?.actions || // enable index priority for new phases - policy.phases[phase]?.actions?.set_priority != null // enable index priority if it's set + // enable index priority for new policies + isNewPolicy || + // enable index priority for new phases: + !policy.phases[phase]?.actions || + // enable index priority if it's set: + policy.phases[phase]?.actions?.set_priority != null ); }, [isNewPolicy, policy.phases, phase]); diff --git a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts index 34f4f520243c9d..c5fee772e133a0 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/ecs/validate.ts @@ -140,7 +140,7 @@ export function findInvalidEcsFields(ecsMapping: AnyObject): string[] { ); for (const [ecsValue, paths] of Object.entries(filteredOutput)) { - if (!Object.prototype.hasOwnProperty.call(ecsDict, ecsValue)) { + if (!Object.hasOwn(ecsDict, ecsValue)) { const field = paths.map((p) => p.join('.')); results.push(`Invalid ECS field mapping identified for ${ecsValue} : ${field.join(', ')}`); } diff --git a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/time_shift.tsx b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/time_shift.tsx index 82da59b38cc277..f02a2897f825fd 100644 --- a/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/time_shift.tsx +++ b/x-pack/plugins/lens/public/datasources/form_based/dimension_panel/time_shift.tsx @@ -151,7 +151,7 @@ export function TimeShift({ options={timeShiftOptions.filter(({ value }) => { const parsedValue = parseTimeShift(value); return ( - parsedValue && !isValueTooSmall(parsedValue) && !isValueNotMultiple(parsedValue) // && + parsedValue && !isValueTooSmall(parsedValue) && !isValueNotMultiple(parsedValue) ); })} selectedOptions={getSelectedOption()} diff --git a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts index 92029e34f856c8..847876f5c0ebdd 100644 --- a/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts +++ b/x-pack/plugins/lens/public/visualizations/xy/xy_suggestions.ts @@ -61,7 +61,7 @@ export function getSuggestions({ !table.isMultiRow || table.columns.length <= 1 || table.columns.every((col) => col.operation.dataType !== 'number') || - table.columns.some((col) => !columnSortOrder.hasOwnProperty(col.operation.dataType)); + table.columns.some((col) => !Object.hasOwn(columnSortOrder, col.operation.dataType)); if ( (incompleteTable && state && !subVisualizationId) || diff --git a/x-pack/plugins/lens/server/migrations/common_migrations.ts b/x-pack/plugins/lens/server/migrations/common_migrations.ts index 0018f892b8b8e4..0943ba2f0da53a 100644 --- a/x-pack/plugins/lens/server/migrations/common_migrations.ts +++ b/x-pack/plugins/lens/server/migrations/common_migrations.ts @@ -323,7 +323,7 @@ export const getLensCustomVisualizationMigrations = ( const migrationMap: MigrateFunctionsObject = {}; const currentMigrations = migrationGetter(); for (const version in currentMigrations) { - if (currentMigrations.hasOwnProperty(version)) { + if (Object.hasOwn(currentMigrations, version)) { migrationMap[version] = getApplyCustomVisualizationMigrationToLens( id, currentMigrations[version] diff --git a/x-pack/plugins/licensing/common/license.ts b/x-pack/plugins/licensing/common/license.ts index 7231eeb4c1049c..2f43af4bef49fe 100644 --- a/x-pack/plugins/licensing/common/license.ts +++ b/x-pack/plugins/licensing/common/license.ts @@ -137,7 +137,7 @@ export class License implements ILicense { } getFeature(name: string) { - if (this.isAvailable && this.features && this.features.hasOwnProperty(name)) { + if (this.isAvailable && this.features && Object.hasOwn(this.features, name)) { return { ...this.features[name] }; } diff --git a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js index 096f5370ca3b97..079df81fdf1f84 100644 --- a/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js +++ b/x-pack/plugins/maps/common/elasticsearch_util/elasticsearch_geo_utils.test.js @@ -20,12 +20,12 @@ const geoFieldName = 'location'; const flattenHitMock = (hit) => { const properties = {}; for (const fieldName in hit._source) { - if (hit._source.hasOwnProperty(fieldName)) { + if (Object.hasOwn(hit._source, fieldName)) { properties[fieldName] = hit._source[fieldName]; } } for (const fieldName in hit.fields) { - if (hit.fields.hasOwnProperty(fieldName)) { + if (Object.hasOwn(hit.fields, fieldName)) { properties[fieldName] = hit.fields[fieldName]; } } @@ -338,7 +338,7 @@ describe('hitsToGeoJson', () => { }, ]; const geojson = hitsToGeoJson(hits, cachedFlattenHit, geoFieldName, 'geo_point', []); - expect(cachedProperities.hasOwnProperty('location')).toBe(true); + expect(Object.hasOwn(cachedProperities, 'location')).toBe(true); expect(geojson.features[0].properties).toEqual({}); }); }); diff --git a/x-pack/plugins/maps/common/elasticsearch_util/es_agg_utils.ts b/x-pack/plugins/maps/common/elasticsearch_util/es_agg_utils.ts index 393b30fb5feb20..7756a76159bc5c 100644 --- a/x-pack/plugins/maps/common/elasticsearch_util/es_agg_utils.ts +++ b/x-pack/plugins/maps/common/elasticsearch_util/es_agg_utils.ts @@ -44,7 +44,7 @@ export function extractPropertiesFromBucket( ): BucketProperties { const properties: BucketProperties = {}; for (const key in bucket) { - if (ignoreKeys.includes(key) || !bucket.hasOwnProperty(key)) { + if (ignoreKeys.includes(key) || !Object.hasOwn(bucket, key)) { continue; } @@ -72,7 +72,7 @@ export function extractPropertiesFromBucket( ) { const values = bucket[key].values; for (const k in values) { - if (values.hasOwnProperty(k)) { + if (Object.hasOwn(values, k)) { properties[key] = values[k]; break; } diff --git a/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx b/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx index 78f0297a0f38db..93e665b7af1875 100644 --- a/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx +++ b/x-pack/plugins/maps/public/classes/layers/ems_vector_tile_layer/ems_vector_tile_layer.tsx @@ -261,7 +261,7 @@ export class EmsVectorTileLayer extends AbstractLayer { _addSpriteSheetToMapFromImageData(json: EmsSpriteSheet, imgData: ImageData, mbMap: MbMap) { for (const imageId in json) { - if (!(json.hasOwnProperty(imageId) && !mbMap.hasImage(imageId))) { + if (!(Object.hasOwn(json, imageId) && !mbMap.hasImage(imageId))) { continue; } const { width, height, x, y, sdf, pixelRatio } = json[imageId]; @@ -310,7 +310,7 @@ export class EmsVectorTileLayer extends AbstractLayer { } const newJson: EmsSpriteSheet = {}; for (const imageId in spriteMeta.json) { - if (spriteMeta.json.hasOwnProperty(imageId)) { + if (Object.hasOwn(spriteMeta.json, imageId)) { const namespacedImageId = this._makeNamespacedImageId(imageId); newJson[namespacedImageId] = spriteMeta.json[imageId]; } diff --git a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts index b4330ce9a0f9b7..08a0d5c4c5e3ea 100644 --- a/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/es_agg_source/es_agg_source.ts @@ -129,7 +129,7 @@ export abstract class AbstractESAggSource extends AbstractESSource implements IE metricFields.forEach((metricField) => { let value; for (const key in mbProperties) { - if (mbProperties.hasOwnProperty(key) && metricField.getMbFieldName() === key) { + if (Object.hasOwn(mbProperties, key) && metricField.getMbFieldName() === key) { value = mbProperties[key]; break; } diff --git a/x-pack/plugins/maps/public/classes/sources/join_sources/es_distance_source/process_distance_response.ts b/x-pack/plugins/maps/public/classes/sources/join_sources/es_distance_source/process_distance_response.ts index 9f18195cb2f847..49b106a017a672 100644 --- a/x-pack/plugins/maps/public/classes/sources/join_sources/es_distance_source/process_distance_response.ts +++ b/x-pack/plugins/maps/public/classes/sources/join_sources/es_distance_source/process_distance_response.ts @@ -15,7 +15,7 @@ export function processDistanceResponse(response: any, countPropertyName: string const propertiesMap: PropertiesMap = new Map(); const buckets: any = response?.aggregations?.distance?.buckets ?? {}; for (const docId in buckets) { - if (buckets.hasOwnProperty(docId)) { + if (Object.hasOwn(buckets, docId)) { const bucket = buckets[docId]; // skip empty buckets diff --git a/x-pack/plugins/maps/public/classes/sources/join_sources/table_source/table_source.ts b/x-pack/plugins/maps/public/classes/sources/join_sources/table_source/table_source.ts index 0fb24d198bf78c..06395af80bf300 100644 --- a/x-pack/plugins/maps/public/classes/sources/join_sources/table_source/table_source.ts +++ b/x-pack/plugins/maps/public/classes/sources/join_sources/table_source/table_source.ts @@ -70,7 +70,7 @@ export class TableSource extends AbstractVectorSource implements ITermJoinSource let propKey: string | number | undefined; const props: { [key: string]: string | number } = {}; for (const key in row) { - if (row.hasOwnProperty(key)) { + if (Object.hasOwn(row, key)) { if (key === this._descriptor.term && row[key]) { propKey = row[key]; } @@ -200,7 +200,7 @@ export class TableSource extends AbstractVectorSource implements ITermJoinSource async getTooltipProperties(properties: GeoJsonProperties): Promise { const tooltipProperties: ITooltipProperty[] = []; for (const key in properties) { - if (properties.hasOwnProperty(key)) { + if (Object.hasOwn(properties, key)) { const field = this.getFieldByName(key); if (field) { tooltipProperties.push(new TooltipProperty(key, await field.getLabel(), properties[key])); diff --git a/x-pack/plugins/maps/public/classes/sources/mvt_single_layer_vector_source/mvt_single_layer_vector_source.tsx b/x-pack/plugins/maps/public/classes/sources/mvt_single_layer_vector_source/mvt_single_layer_vector_source.tsx index ee7e46c06ca0b5..9424e8dc34c9e4 100644 --- a/x-pack/plugins/maps/public/classes/sources/mvt_single_layer_vector_source/mvt_single_layer_vector_source.tsx +++ b/x-pack/plugins/maps/public/classes/sources/mvt_single_layer_vector_source/mvt_single_layer_vector_source.tsx @@ -199,7 +199,7 @@ export class MVTSingleLayerVectorSource extends AbstractSource implements IMvtVe async getTooltipProperties(properties: GeoJsonProperties): Promise { const tooltips = []; for (const key in properties) { - if (properties.hasOwnProperty(key)) { + if (Object.hasOwn(properties, key)) { for (let i = 0; i < this._tooltipFields.length; i++) { const mvtField = this._tooltipFields[i]; if (mvtField.getName() === key) { diff --git a/x-pack/plugins/maps/public/connected_components/mb_map/remove_orphaned.ts b/x-pack/plugins/maps/public/connected_components/mb_map/remove_orphaned.ts index db5ff3d22e6e34..4b6e8031f9e004 100644 --- a/x-pack/plugins/maps/public/connected_components/mb_map/remove_orphaned.ts +++ b/x-pack/plugins/maps/public/connected_components/mb_map/remove_orphaned.ts @@ -39,7 +39,7 @@ export function removeOrphanedSourcesAndLayers( }); for (const mbSourceId in mbStyle.sources) { - if (mbStyle.sources.hasOwnProperty(mbSourceId)) { + if (Object.hasOwn(mbStyle.sources, mbSourceId)) { // ignore mapbox sources from spatial filter layer if (spatialFilterLayer.ownsMbSourceId(mbSourceId)) { continue; diff --git a/x-pack/plugins/maps/public/lens/choropleth_chart/suggestions.ts b/x-pack/plugins/maps/public/lens/choropleth_chart/suggestions.ts index 68a17b4a0da67a..d22dec0ee4b790 100644 --- a/x-pack/plugins/maps/public/lens/choropleth_chart/suggestions.ts +++ b/x-pack/plugins/maps/public/lens/choropleth_chart/suggestions.ts @@ -49,7 +49,7 @@ export function getSuggestions( }) .forEach((bucket) => { for (const tableId in activeData) { - if (activeData.hasOwnProperty(tableId)) { + if (Object.hasOwn(activeData, tableId)) { const emsSuggestion = getEmsSuggestion( emsFileLayers, activeData[tableId], diff --git a/x-pack/plugins/maps/public/selectors/map_selectors.ts b/x-pack/plugins/maps/public/selectors/map_selectors.ts index ff47c2ccfa874a..3d00bcf4fee5bf 100644 --- a/x-pack/plugins/maps/public/selectors/map_selectors.ts +++ b/x-pack/plugins/maps/public/selectors/map_selectors.ts @@ -443,7 +443,7 @@ export const getMostCommonDataViewId = createSelector( const counts: { [key: string]: number } = {}; function incrementCount(ids: string[]) { ids.forEach((id) => { - const count = counts.hasOwnProperty(id) ? counts[id] : 0; + const count = Object.hasOwn(counts, id) ? counts[id] : 0; counts[id] = count + 1; }); } diff --git a/x-pack/plugins/maps/server/maps_telemetry/map_stats/map_stats_collector.ts b/x-pack/plugins/maps/server/maps_telemetry/map_stats/map_stats_collector.ts index e300c2a584873b..8a3cacf1821aeb 100644 --- a/x-pack/plugins/maps/server/maps_telemetry/map_stats/map_stats_collector.ts +++ b/x-pack/plugins/maps/server/maps_telemetry/map_stats/map_stats_collector.ts @@ -155,7 +155,7 @@ export class MapStatsCollector { counts: { [key: string]: number } ) { for (const key in counts) { - if (!counts.hasOwnProperty(key)) { + if (!Object.hasOwn(counts, key)) { continue; } @@ -174,7 +174,7 @@ export class MapStatsCollector { } for (const key in clusterStats) { - if (clusterStats.hasOwnProperty(key)) { + if (Object.hasOwn(clusterStats, key)) { clusterStats[key].avg = clusterStats[key].total / this._mapCount; } } @@ -186,7 +186,7 @@ export class MapStatsCollector { } { const results: { [key: string]: Omit } = {}; for (const key in clusterStats) { - if (clusterStats.hasOwnProperty(key)) { + if (Object.hasOwn(clusterStats, key)) { results[key] = this._excludeTotal(clusterStats[key]); } } diff --git a/x-pack/plugins/ml/common/types/alerts.ts b/x-pack/plugins/ml/common/types/alerts.ts index 12bae1a9d3d169..dd49f4fa272ec0 100644 --- a/x-pack/plugins/ml/common/types/alerts.ts +++ b/x-pack/plugins/ml/common/types/alerts.ts @@ -105,15 +105,15 @@ export interface InfluencerAnomalyAlertDoc extends BaseAnomalyAlertDoc { export type AlertHitDoc = RecordAnomalyAlertDoc | BucketAnomalyAlertDoc | InfluencerAnomalyAlertDoc; export function isRecordAnomalyAlertDoc(arg: any): arg is RecordAnomalyAlertDoc { - return arg.hasOwnProperty('result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.RECORD; + return Object.hasOwn(arg, 'result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.RECORD; } export function isBucketAnomalyAlertDoc(arg: any): arg is BucketAnomalyAlertDoc { - return arg.hasOwnProperty('result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.BUCKET; + return Object.hasOwn(arg, 'result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.BUCKET; } export function isInfluencerAnomalyAlertDoc(arg: any): arg is InfluencerAnomalyAlertDoc { - return arg.hasOwnProperty('result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.INFLUENCER; + return Object.hasOwn(arg, 'result_type') && arg.result_type === ML_ANOMALY_RESULT_TYPE.INFLUENCER; } export type MlAnomalyDetectionAlertParams = { diff --git a/x-pack/plugins/ml/common/util/es_utils.ts b/x-pack/plugins/ml/common/util/es_utils.ts index 44623dbd74ec66..f2ccd5980bcdc5 100644 --- a/x-pack/plugins/ml/common/util/es_utils.ts +++ b/x-pack/plugins/ml/common/util/es_utils.ts @@ -36,8 +36,7 @@ export function isValidIndexName(indexName: string) { /^[^-_\+]+$/.test(indexName.charAt(0)) && // Cannot be . or .. indexName !== '.' && - indexName !== '..' && - // Cannot be longer than 255 bytes (note it is bytes, + indexName !== '..' && // Cannot be longer than 255 bytes (note it is bytes, // so multi-byte characters will count towards the 255 limit faster) isValidIndexNameLength(indexName) ); diff --git a/x-pack/plugins/ml/common/util/job_utils.ts b/x-pack/plugins/ml/common/util/job_utils.ts index 73c8cc927e5c77..eb89fe695522f1 100644 --- a/x-pack/plugins/ml/common/util/job_utils.ts +++ b/x-pack/plugins/ml/common/util/job_utils.ts @@ -301,8 +301,8 @@ export function isModelPlotEnabled( // 'partition' field values even though this is supported on the back-end. // If supplied, check both the by and partition entities are in the terms. const detector = job.analysis_config.detectors[detectorIndex]; - const detectorHasPartitionField = detector.hasOwnProperty('partition_field_name'); - const detectorHasByField = detector.hasOwnProperty('by_field_name'); + const detectorHasPartitionField = Object.hasOwn(detector, 'partition_field_name'); + const detectorHasByField = Object.hasOwn(detector, 'by_field_name'); const terms = termsStr.split(','); if (detectorHasPartitionField) { diff --git a/x-pack/plugins/ml/common/util/validation_utils.ts b/x-pack/plugins/ml/common/util/validation_utils.ts index 66084f83ea87d1..b31431cdb7d0d9 100644 --- a/x-pack/plugins/ml/common/util/validation_utils.ts +++ b/x-pack/plugins/ml/common/util/validation_utils.ts @@ -45,7 +45,7 @@ export function findAggField( value = returnParent === true ? aggs : aggs[k]; return true; } - if (aggs.hasOwnProperty(k) && aggs[k] !== null && typeof aggs[k] === 'object') { + if (Object.hasOwn(aggs, k) && aggs[k] !== null && typeof aggs[k] === 'object') { value = findAggField(aggs[k], fieldName, returnParent); return value !== undefined; } diff --git a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx index 8d7f1cc1649da2..ac1e31ced032ca 100644 --- a/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/model_snapshots/revert_model_snapshot_flyout/revert_model_snapshot_flyout.tsx @@ -192,7 +192,6 @@ export const RevertModelSnapshotFlyout: FC = ({ {false && ( // disabled for now <> - = ({ - {revertModalVisible && ( = ( - {Array.isArray(chartsData.seriesToPlot) && chartsData.seriesToPlot.length === 0 && @@ -84,7 +83,6 @@ export const ExplorerAnomaliesContainer: FC = ( )} - {showCharts && ( { if (group.partial === false || (group.partial === true && j.oldGroups.includes(gId))) { @@ -159,7 +159,7 @@ export class GroupSelector extends Component { let success = true; for (const jobId in resp) { // check success of each job update - if (resp.hasOwnProperty(jobId)) { + if (Object.hasOwn(resp, jobId)) { if (resp[jobId].success === false) { getToastNotificationService().displayErrorToast(resp[jobId].error); success = false; diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts index 6baa258d9f624c..ce77b21a3bd341 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/get_inference_properties_from_pipeline_config.ts @@ -63,7 +63,7 @@ export function isMlInferencePipelineInferenceConfig( export function isMlIngestInferenceProcessor(arg: unknown): arg is MLIngestInferenceProcessor { return ( isPopulatedObject(arg) && - arg.hasOwnProperty('inference_config') && + Object.hasOwn(arg, 'inference_config') && (isPopulatedObject(arg.inference_config, [SUPPORTED_PYTORCH_TASKS.QUESTION_ANSWERING]) || isPopulatedObject(arg.inference_config, [SUPPORTED_PYTORCH_TASKS.ZERO_SHOT_CLASSIFICATION])) ); @@ -105,7 +105,7 @@ export function getInferencePropertiesFromPipelineConfig( const configSettings = propertiesToReturn.inferenceConfig && propertiesToReturn.inferenceConfig[type]; propertiesToReturn[property] = - configSettings && configSettings.hasOwnProperty(property) + configSettings && Object.hasOwn(configSettings, property) ? // @ts-ignore configSettings[property] : undefined; diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index bc5c2450ebacf5..c7622501d072ba 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -401,7 +401,7 @@ export const ModelsList: FC = ({ }); const elasticModels = models.filter((model) => - ELASTIC_MODEL_DEFINITIONS.hasOwnProperty(model.model_id) + Object.hasOwn(ELASTIC_MODEL_DEFINITIONS, model.model_id) ); if (elasticModels.length > 0) { for (const model of elasticModels) { diff --git a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx index 0ceea014110a80..dba75815770582 100644 --- a/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx +++ b/x-pack/plugins/ml/public/application/overview/components/anomaly_detection_panel/anomaly_detection_panel.tsx @@ -138,7 +138,7 @@ export const AnomalyDetectionPanel: FC = ({ anomalyTimelineService, setLa const tempGroups = { ...groupsObject }; for (const groupId in tempGroups) { - if (tempGroups.hasOwnProperty(groupId)) { + if (Object.hasOwn(tempGroups, groupId)) { tempGroups[groupId].overallSwimLane = groupsOverallScoreData[groupId]; } } diff --git a/x-pack/plugins/ml/public/application/services/field_format_service.ts b/x-pack/plugins/ml/public/application/services/field_format_service.ts index de4885861d331e..d01a7294d9c0ae 100644 --- a/x-pack/plugins/ml/public/application/services/field_format_service.ts +++ b/x-pack/plugins/ml/public/application/services/field_format_service.ts @@ -74,7 +74,7 @@ export class FieldFormatService { // Return the FieldFormat to use for formatting values from // the detector from the job with the specified ID. getFieldFormat(jobId: string, detectorIndex: number) { - if (this.formatsByJob.hasOwnProperty(jobId)) { + if (Object.hasOwn(this.formatsByJob, jobId)) { return this.formatsByJob[jobId][detectorIndex]; } } diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/series_controls/series_controls.tsx b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/series_controls/series_controls.tsx index 06e57b138386cb..ead36e4ffe3a4c 100644 --- a/x-pack/plugins/ml/public/application/timeseriesexplorer/components/series_controls/series_controls.tsx +++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/components/series_controls/series_controls.tsx @@ -268,7 +268,7 @@ export const SeriesControls: FC> = ({ // In case anomalous selector has been changed // we need to change it for all the other fields for (const c in updatedResultConfig) { - if (updatedResultConfig.hasOwnProperty(c)) { + if (Object.hasOwn(updatedResultConfig, c)) { updatedResultConfig[c as MlEntityFieldType]!.anomalousOnly = updatedFieldConfig.anomalousOnly; } @@ -279,7 +279,7 @@ export const SeriesControls: FC> = ({ // In case time range selector has been changed // we need to change it for all the other fields for (const c in updatedResultConfig) { - if (updatedResultConfig.hasOwnProperty(c)) { + if (Object.hasOwn(updatedResultConfig, c)) { updatedResultConfig[c as MlEntityFieldType]!.applyTimeRange = updatedFieldConfig.applyTimeRange; } diff --git a/x-pack/plugins/ml/public/application/util/custom_url_utils.ts b/x-pack/plugins/ml/public/application/util/custom_url_utils.ts index 6f5786e0eeb71d..8e9279688e91fb 100644 --- a/x-pack/plugins/ml/public/application/util/custom_url_utils.ts +++ b/x-pack/plugins/ml/public/application/util/custom_url_utils.ts @@ -141,8 +141,7 @@ function isKibanaUrl(urlConfig: MlUrlConfig) { urlValue.startsWith('apm#/') || // BrowserRouter based plugins urlValue.startsWith('metrics/') || - urlValue.startsWith('security/') || - // Legacy links + urlValue.startsWith('security/') || // Legacy links urlValue.startsWith('siem#/') ); } @@ -308,7 +307,7 @@ function buildKibanaUrl( const q = rison.decode(queryDef); - if (isRisonObject(q) && q.hasOwnProperty('query')) { + if (isRisonObject(q) && Object.hasOwn(q, 'query')) { const [resultPrefix, resultPostfix] = [prefix, postfix].map(replaceSingleTokenValues); const resultQuery = getQueryStringResult( resultPrefix, diff --git a/x-pack/plugins/ml/public/maps/anomaly_source.tsx b/x-pack/plugins/ml/public/maps/anomaly_source.tsx index 3c997cc98299ca..780ecd3cc73528 100644 --- a/x-pack/plugins/ml/public/maps/anomaly_source.tsx +++ b/x-pack/plugins/ml/public/maps/anomaly_source.tsx @@ -284,7 +284,7 @@ export class AnomalySource implements IVectorSource { if (key === GEOJSON_FEATURE_ID_PROPERTY_NAME) { continue; } - if (properties.hasOwnProperty(key)) { + if (Object.hasOwn(properties, key)) { tooltipProperties.push(new AnomalySourceTooltipProperty(key, properties[key])); } } diff --git a/x-pack/plugins/ml/public/maps/util.ts b/x-pack/plugins/ml/public/maps/util.ts index 84f1b62314e1ee..7666552e40e93a 100644 --- a/x-pack/plugins/ml/public/maps/util.ts +++ b/x-pack/plugins/ml/public/maps/util.ts @@ -98,7 +98,7 @@ function getCoordinates(latLonString: string): number[] { export function getInitialAnomaliesLayers(jobId: string) { const initialLayers = []; for (const layer in ML_ANOMALY_LAYERS) { - if (ML_ANOMALY_LAYERS.hasOwnProperty(layer)) { + if (Object.hasOwn(ML_ANOMALY_LAYERS, layer)) { initialLayers.push({ id: htmlIdGenerator()(), type: LAYER_TYPE.GEOJSON_VECTOR, @@ -119,7 +119,7 @@ export function getInitialAnomaliesLayers(jobId: string) { export function getInitialSourceIndexFieldLayers(sourceIndexWithGeoFields: SourceIndexGeoFields) { const initialLayers = [] as unknown as LayerDescriptor[] & SerializableRecord; for (const index in sourceIndexWithGeoFields) { - if (sourceIndexWithGeoFields.hasOwnProperty(index)) { + if (Object.hasOwn(sourceIndexWithGeoFields, index)) { const { dataViewId, geoFields } = sourceIndexWithGeoFields[index]; geoFields.forEach((geoField) => { diff --git a/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts b/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts index 04db54521680b5..720a39193b9a7b 100644 --- a/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts +++ b/x-pack/plugins/ml/server/models/data_visualizer/data_visualizer.ts @@ -409,9 +409,9 @@ export class DataVisualizer { }; let cardinalityField: AggCardinality; - if (datafeedConfig?.script_fields?.hasOwnProperty(field)) { + if (Object.hasOwn(datafeedConfig?.script_fields ?? {}, field)) { cardinalityField = aggs[`${safeFieldName}_cardinality`] = { - cardinality: { script: datafeedConfig?.script_fields[field].script }, + cardinality: { script: datafeedConfig?.script_fields![field].script }, }; } else { cardinalityField = { @@ -475,8 +475,8 @@ export class DataVisualizer { }); } else { if ( - datafeedConfig?.script_fields?.hasOwnProperty(field) || - datafeedConfig?.runtime_mappings?.hasOwnProperty(field) + Object.hasOwn(datafeedConfig?.script_fields ?? {}, field) || + Object.hasOwn(datafeedConfig?.runtime_mappings ?? {}, field) ) { const cardinality = get( aggregations, diff --git a/x-pack/plugins/ml/server/models/fields_service/fields_service.ts b/x-pack/plugins/ml/server/models/fields_service/fields_service.ts index 117dd7738d329c..cba34e2cbb8e3c 100644 --- a/x-pack/plugins/ml/server/models/fields_service/fields_service.ts +++ b/x-pack/plugins/ml/server/models/fields_service/fields_service.ts @@ -59,13 +59,13 @@ export function fieldsServiceProvider({ asCurrentUser }: IScopedClusterClient) { fieldNames.forEach((fieldName) => { if ( typeof datafeedConfig?.script_fields === 'object' && - datafeedConfig.script_fields.hasOwnProperty(fieldName) + Object.hasOwn(datafeedConfig.script_fields, fieldName) ) { aggregatableFields.push(fieldName); } if ( typeof datafeedConfig?.runtime_mappings === 'object' && - datafeedConfig.runtime_mappings.hasOwnProperty(fieldName) + Object.hasOwn(datafeedConfig.runtime_mappings, fieldName) ) { aggregatableFields.push(fieldName); } @@ -122,7 +122,7 @@ export function fieldsServiceProvider({ asCurrentUser }: IScopedClusterClient) { ) ?? {}; // No need to perform aggregation over the cached fields - const fieldsToAgg = aggregatableFields.filter((field) => !cachedValues.hasOwnProperty(field)); + const fieldsToAgg = aggregatableFields.filter((field) => !Object.hasOwn(cachedValues, field)); if (fieldsToAgg.length === 0) { return cachedValues; @@ -151,12 +151,12 @@ export function fieldsServiceProvider({ asCurrentUser }: IScopedClusterClient) { (obj, field) => { if ( typeof datafeedConfig?.script_fields === 'object' && - datafeedConfig.script_fields.hasOwnProperty(field) + Object.hasOwn(datafeedConfig.script_fields, field) ) { obj[field] = { cardinality: { script: datafeedConfig.script_fields[field].script } }; } else if ( typeof datafeedConfig?.runtime_mappings === 'object' && - datafeedConfig.runtime_mappings.hasOwnProperty(field) + Object.hasOwn(datafeedConfig.runtime_mappings, field) ) { obj[field] = { cardinality: { field } }; runtimeMappings.runtime_mappings = datafeedConfig.runtime_mappings; @@ -350,7 +350,7 @@ export function fieldsServiceProvider({ asCurrentUser }: IScopedClusterClient) { ) ?? {}; // No need to perform aggregation over the cached fields - const fieldsToAgg = aggregatableFields.filter((field) => !cachedValues.hasOwnProperty(field)); + const fieldsToAgg = aggregatableFields.filter((field) => !Object.hasOwn(cachedValues, field)); if (fieldsToAgg.length === 0) { return cachedValues; diff --git a/x-pack/plugins/ml/server/models/job_service/jobs.ts b/x-pack/plugins/ml/server/models/job_service/jobs.ts index d8a0557a90fd3c..d9cebc84bb7425 100644 --- a/x-pack/plugins/ml/server/models/job_service/jobs.ts +++ b/x-pack/plugins/ml/server/models/job_service/jobs.ts @@ -454,7 +454,7 @@ export function jobsProvider( // de-duplicate calendars for (const cal in calendarsByJobId) { - if (calendarsByJobId.hasOwnProperty(cal)) { + if (Object.hasOwn(calendarsByJobId, cal)) { calendarsByJobId[cal] = uniq(calendarsByJobId[cal]); } } diff --git a/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.ts b/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.ts index c2d9db3749375c..de07daf5057e71 100644 --- a/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.ts +++ b/x-pack/plugins/ml/server/models/job_validation/validate_cardinality.ts @@ -98,13 +98,13 @@ const validateFactory = (client: IScopedClusterClient, job: CombinedJob): Valida aggregatableFieldNames = uniqueFieldNames.filter((field) => { if ( typeof datafeedConfig?.script_fields === 'object' && - datafeedConfig?.script_fields.hasOwnProperty(field) + Object.hasOwn(datafeedConfig?.script_fields ?? {}, field) ) { return true; } if ( typeof datafeedConfig?.runtime_mappings === 'object' && - datafeedConfig?.runtime_mappings.hasOwnProperty(field) + Object.hasOwn(datafeedConfig?.runtime_mappings ?? {}, field) ) { return true; } diff --git a/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts b/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts index f5cf04915b536d..5b6239d0345273 100644 --- a/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts +++ b/x-pack/plugins/ml/server/models/notifications_service/notifications_service_provider.ts @@ -273,7 +273,7 @@ export class NotificationsService { return res.reduce((acc, curr) => { for (const levelKey in curr) { - if (curr.hasOwnProperty(levelKey)) { + if (Object.hasOwn(curr, levelKey)) { acc[levelKey as MlNotificationMessageLevel] += curr[levelKey as MlNotificationMessageLevel]; } diff --git a/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx b/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx index 44b1fd9f53995e..f853252bc69db2 100644 --- a/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx +++ b/x-pack/plugins/monitoring/public/application/contexts/global_state_context.tsx @@ -49,7 +49,7 @@ export const GlobalStateProvider: FC const initialState: any = globalState.getState(); for (const key in initialState) { - if (!initialState.hasOwnProperty(key)) { + if (!Object.hasOwn(initialState, key)) { continue; } localState[key] = initialState[key]; diff --git a/x-pack/plugins/monitoring/public/components/logstash/pipeline_viewer/models/graph/plugin_vertex.js b/x-pack/plugins/monitoring/public/components/logstash/pipeline_viewer/models/graph/plugin_vertex.js index 03d9fa747df135..4298408eeb657b 100644 --- a/x-pack/plugins/monitoring/public/components/logstash/pipeline_viewer/models/graph/plugin_vertex.js +++ b/x-pack/plugins/monitoring/public/components/logstash/pipeline_viewer/models/graph/plugin_vertex.js @@ -59,7 +59,7 @@ export class PluginVertex extends Vertex { } get eventsPerSecond() { - if (!this.eventsPerMillisecond.hasOwnProperty('data')) { + if (!Object.hasOwn(this.eventsPerMillisecond, 'data')) { return this.eventsPerMillisecond * 1000; } @@ -72,7 +72,7 @@ export class PluginVertex extends Vertex { } get latestEventsPerSecond() { - if (!this.eventsPerSecond.hasOwnProperty('data')) { + if (!Object.hasOwn(this.eventsPerSecond, 'data')) { return this.eventsPerSecond; } diff --git a/x-pack/plugins/monitoring/public/lib/form_validation.ts b/x-pack/plugins/monitoring/public/lib/form_validation.ts index f09e9f60150747..4a3633db61f15d 100644 --- a/x-pack/plugins/monitoring/public/lib/form_validation.ts +++ b/x-pack/plugins/monitoring/public/lib/form_validation.ts @@ -21,7 +21,7 @@ export function getMissingFieldErrors(data: any, defaultData: any) { const errors: any = {}; for (const key in data) { - if (!data.hasOwnProperty(key)) { + if (!Object.hasOwn(data, key)) { continue; } diff --git a/x-pack/plugins/monitoring/server/lib/alerts/fetch_available_ccs.ts b/x-pack/plugins/monitoring/server/lib/alerts/fetch_available_ccs.ts index 8be48d16463d8a..d65c71bab52bf4 100644 --- a/x-pack/plugins/monitoring/server/lib/alerts/fetch_available_ccs.ts +++ b/x-pack/plugins/monitoring/server/lib/alerts/fetch_available_ccs.ts @@ -11,7 +11,7 @@ export async function fetchAvailableCcs(esClient: ElasticsearchClient): Promise< const availableCcs = []; const response = await esClient.cluster.remoteInfo(); for (const remoteName in response) { - if (!response.hasOwnProperty(remoteName)) { + if (!Object.hasOwn(response, remoteName)) { continue; } const remoteInfo = response[remoteName]; @@ -26,7 +26,7 @@ export async function fetchAvailableCcsLegacy(callCluster: any): Promise { if (vertex?.stats) { - if (!vertex.stats.hasOwnProperty(stat)) { + if (!Object.hasOwn(vertex.stats, stat)) { vertex.stats[stat] = { data: [] }; } vertex.stats[stat].data?.push([timestamp, vertexStats[stat]]); diff --git a/x-pack/plugins/monitoring/server/telemetry_collection/get_beats_stats.ts b/x-pack/plugins/monitoring/server/telemetry_collection/get_beats_stats.ts index 6b23c04fe9ed62..9a0a8bba0153d3 100644 --- a/x-pack/plugins/monitoring/server/telemetry_collection/get_beats_stats.ts +++ b/x-pack/plugins/monitoring/server/telemetry_collection/get_beats_stats.ts @@ -233,7 +233,7 @@ export function processResults( const heartbeatState = hit._source?.beats_state?.state?.heartbeat; if (heartbeatState !== undefined) { - if (!clusters[clusterUuid].hasOwnProperty('heartbeat')) { + if (!Object.hasOwn(clusters[clusterUuid], 'heartbeat')) { clusters[clusterUuid].heartbeat = { monitors: 0, endpoints: 0, @@ -244,7 +244,7 @@ export function processResults( clusterHb.monitors += heartbeatState.monitors; clusterHb.endpoints += heartbeatState.endpoints; for (const proto in heartbeatState) { - if (!heartbeatState.hasOwnProperty(proto)) { + if (!Object.hasOwn(heartbeatState, proto)) { continue; } const val = heartbeatState[proto]; @@ -252,7 +252,7 @@ export function processResults( continue; } - if (!clusterHb.hasOwnProperty(proto)) { + if (!Object.hasOwn(clusterHb, proto)) { clusterHb[proto] = { monitors: 0, endpoints: 0, @@ -265,7 +265,7 @@ export function processResults( const functionbeatState = hit._source?.beats_state?.state?.functionbeat; if (functionbeatState !== undefined) { - if (!clusters[clusterUuid].hasOwnProperty('functionbeat')) { + if (!Object.hasOwn(clusters[clusterUuid], 'functionbeat')) { clusters[clusterUuid].functionbeat = { functions: { count: 0, diff --git a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_agent_monitoring.ts b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_agent_monitoring.ts index eef7637f1b8370..9c40bf11b67e5f 100644 --- a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_agent_monitoring.ts +++ b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_agent_monitoring.ts @@ -121,14 +121,14 @@ export class LogstashAgentMonitoring implements LogstashMonitoring { } const thisCollectionType = hit._source?.agent?.type || 'agent'; - if (!clusterStats.hasOwnProperty('collection_types')) { + if (!Object.hasOwn(clusterStats, 'collection_types')) { clusterStats.collection_types = {}; } clusterStats.collection_types![thisCollectionType] = (clusterStats.collection_types![thisCollectionType] || 0) + 1; const pipelines = logstashStats?.logstash?.pipelines || []; - if (!clusterStats.hasOwnProperty('pipelines')) { + if (!Object.hasOwn(clusterStats, 'pipelines')) { clusterStats.pipelines = {}; } clusterStats.pipelines!.count = pipelines.length; diff --git a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_metricbeat_monitoring.ts b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_metricbeat_monitoring.ts index 387daa51a67c81..c00c37ad597848 100644 --- a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_metricbeat_monitoring.ts +++ b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_metricbeat_monitoring.ts @@ -118,7 +118,7 @@ export class LogstashMetricbeatMonitoring implements LogstashMonitoring { clusters[clusterUuid].versions = mapToList(a, 'version'); const thisCollectionType = hit._source?.agent?.type || 'metricbeat'; - if (!clusterStats.hasOwnProperty('collection_types')) { + if (!Object.hasOwn(clusterStats, 'collection_types')) { clusterStats.collection_types = {}; } clusterStats.collection_types![thisCollectionType] = @@ -128,7 +128,7 @@ export class LogstashMetricbeatMonitoring implements LogstashMonitoring { pipelines.forEach((pipeline) => { const thisQueueType = pipeline.queue?.type; if (thisQueueType !== undefined) { - if (!clusterStats.hasOwnProperty('queues')) { + if (!Object.hasOwn(clusterStats, 'queues')) { clusterStats.queues = {}; } clusterStats.queues![thisQueueType] = (clusterStats.queues![thisQueueType] || 0) + 1; @@ -220,7 +220,7 @@ export class LogstashMetricbeatMonitoring implements LogstashMonitoring { } else { pipelineConfig = 'file'; } - if (!pipelineStats.hasOwnProperty('sources')) { + if (!Object.hasOwn(pipelineStats, 'sources')) { pipelineStats.sources = {}; } pipelineStats.sources![pipelineConfig] = true; diff --git a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_self_monitoring.ts b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_self_monitoring.ts index bc31c576d154c7..352f764186d39f 100644 --- a/x-pack/plugins/monitoring/server/telemetry_collection/logstash_self_monitoring.ts +++ b/x-pack/plugins/monitoring/server/telemetry_collection/logstash_self_monitoring.ts @@ -104,7 +104,7 @@ export class LogstashSelfMonitoring implements LogstashMonitoring { // Internal Collection has no agent field, so default to 'internal_collection' const thisCollectionType = hit._source?.agent?.type || 'internal_collection'; - if (!clusterStats.hasOwnProperty('collection_types')) { + if (!Object.hasOwn(clusterStats, 'collection_types')) { clusterStats.collection_types = {}; } clusterStats.collection_types![thisCollectionType] = @@ -114,7 +114,7 @@ export class LogstashSelfMonitoring implements LogstashMonitoring { pipelines.forEach((pipeline) => { const thisQueueType = pipeline.queue?.type; if (thisQueueType !== undefined) { - if (!clusterStats.hasOwnProperty('queues')) { + if (!Object.hasOwn(clusterStats, 'queues')) { clusterStats.queues = {}; } clusterStats.queues![thisQueueType] = (clusterStats.queues![thisQueueType] || 0) + 1; @@ -206,7 +206,7 @@ export class LogstashSelfMonitoring implements LogstashMonitoring { } else { pipelineConfig = 'file'; } - if (!pipelineStats.hasOwnProperty('sources')) { + if (!Object.hasOwn(pipelineStats, 'sources')) { pipelineStats.sources = {}; } pipelineStats.sources![pipelineConfig] = true; diff --git a/x-pack/plugins/monitoring_collection/server/plugin.ts b/x-pack/plugins/monitoring_collection/server/plugin.ts index fdfe532ced5db6..828a5e5fc49b2f 100644 --- a/x-pack/plugins/monitoring_collection/server/plugin.ts +++ b/x-pack/plugins/monitoring_collection/server/plugin.ts @@ -63,7 +63,7 @@ export class MonitoringCollectionPlugin implements Plugin(metric: Metric) => { - if (this.metrics.hasOwnProperty(metric.type)) { + if (Object.hasOwn(this.metrics, metric.type)) { this.logger.warn( `Skipping registration of metric type '${metric.type}'. This type has already been registered.` ); diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/settings/agent_configurations/agent_configuration_create_edit/settings_page/settings_page.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/settings/agent_configurations/agent_configuration_create_edit/settings_page/settings_page.tsx index 706340fb327576..dcfbe3d365102f 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/settings/agent_configurations/agent_configuration_create_edit/settings_page/settings_page.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/settings/agent_configurations/agent_configuration_create_edit/settings_page/settings_page.tsx @@ -229,7 +229,7 @@ function renderSettings({ .filter(filterByAgent(newConfig.agent_name as AgentName)) .map((setting) => ( { for (const key in metric) { - if (metric.hasOwnProperty(key)) { + if (Object.hasOwn(metric, key)) { const metricsKey = key as MetricsKey; const value = metric[metricsKey]; diff --git a/x-pack/plugins/observability_solution/infra/common/alerting/logs/log_threshold/types.ts b/x-pack/plugins/observability_solution/infra/common/alerting/logs/log_threshold/types.ts index 4f5b977dd3b827..b8410a478b6f8b 100644 --- a/x-pack/plugins/observability_solution/infra/common/alerting/logs/log_threshold/types.ts +++ b/x-pack/plugins/observability_solution/infra/common/alerting/logs/log_threshold/types.ts @@ -382,7 +382,7 @@ export const isOptimizedGroupedSearchQueryResponse = ( response: GroupedSearchQueryResponse['aggregations']['groups']['buckets'] ): response is OptimizedGroupedSearchQueryResponse['aggregations']['groups']['buckets'] => { const result = response[0]; - return result && !result.hasOwnProperty('filtered_results'); + return result && !Object.hasOwn(result, 'filtered_results'); }; export const isOptimizableGroupedThreshold = ( diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts index 4955f0fb5d497e..495328e3714c95 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metadata/utils.ts @@ -24,7 +24,7 @@ export const getAllFields = (metadata?: InfraMetadata) => { property: string ) => { const fieldsByCategory: FieldsByCategory = metadata?.info?.[`${category}`] ?? {}; - if (fieldsByCategory.hasOwnProperty(property)) { + if (Object.hasOwn(fieldsByCategory, property)) { const value = fieldsByCategory[property]; if (typeof value === 'boolean') { diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts index a32c924385dbcf..8f1fa804e8d588 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/lib/metric_query.test.ts @@ -37,7 +37,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { ); test('includes a range filter', () => { expect( - searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) + searchBody.query.bool.filter.find((filter) => Object.hasOwn(filter, 'range')) ).toBeTruthy(); }); @@ -65,7 +65,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { ); test('includes a range filter', () => { expect( - searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) + searchBody.query.bool.filter.find((filter) => Object.hasOwn(filter, 'range')) ).toBeTruthy(); }); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/utils/proxies.ts b/x-pack/plugins/observability_solution/logs_explorer/public/utils/proxies.ts index cfe4c133ec328a..487eab6241d176 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/utils/proxies.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/utils/proxies.ts @@ -33,4 +33,4 @@ export const createPropertyGetProxy = ( obj: T, key: string | number | symbol -): key is K => obj.hasOwnProperty(key); +): key is K => Object.hasOwn(obj, key); diff --git a/x-pack/plugins/observability_solution/observability/public/components/alerts_flyout/alerts_flyout.stories.tsx b/x-pack/plugins/observability_solution/observability/public/components/alerts_flyout/alerts_flyout.stories.tsx index be78ce851053ca..a6aa35ea8a4680 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/alerts_flyout/alerts_flyout.stories.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/alerts_flyout/alerts_flyout.stories.tsx @@ -42,7 +42,6 @@ export default { - // ); }, ], diff --git a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts index efaf7b36e3a0b0..53955b7130c543 100644 --- a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts +++ b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/lib/metric_query.test.ts @@ -69,7 +69,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { ); test('includes a range filter', () => { expect( - searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) + searchBody.query.bool.filter.find((filter) => Object.hasOwn(filter, 'range')) ).toBeTruthy(); }); @@ -126,7 +126,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { ); test('includes a range filter', () => { expect( - searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) + searchBody.query.bool.filter.find((filter) => Object.hasOwn(filter, 'range')) ).toBeTruthy(); }); @@ -238,7 +238,7 @@ describe("The Metric Threshold Alert's getElasticsearchMetricQuery", () => { ); test('includes a range filter', () => { expect( - searchBody.query.bool.filter.find((filter) => filter.hasOwnProperty('range')) + searchBody.query.bool.filter.find((filter) => Object.hasOwn(filter, 'range')) ).toBeTruthy(); }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts index ecd3554e4923dd..e06800aca07a03 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/utils/create_initialized_object.ts @@ -14,7 +14,7 @@ export function createInitializedObject(parameters: Params) { function traverseProperties({ properties, required }: Params) { for (const propName in properties) { - if (properties.hasOwnProperty(propName)) { + if (Object.hasOwn(properties, propName)) { const prop = properties[propName] as Params; if (prop.type === 'object') { diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/lib/get_fallback_urls.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/lib/get_fallback_urls.ts index 15185521563a18..22cdcf34f99fe5 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/lib/get_fallback_urls.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/lib/get_fallback_urls.ts @@ -11,9 +11,11 @@ import { EsLegacyConfigService } from '../services/es_legacy_config_service'; export function getKibanaUrl(coreSetup: CoreSetup, cloudSetup?: CloudSetup) { return ( + // falls back to local network binding + // then cloud id coreSetup.http.basePath.publicBaseUrl ?? // priority given to server.publicBaseUrl - cloudSetup?.kibanaUrl ?? // then cloud id - getFallbackKibanaUrl(coreSetup) // falls back to local network binding + cloudSetup?.kibanaUrl ?? + getFallbackKibanaUrl(coreSetup) ); } diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/hooks/use_group_name.ts b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/hooks/use_group_name.ts index ca6ddff88fb19f..ba19459d4dded6 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/hooks/use_group_name.ts +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/grouped_slos/hooks/use_group_name.ts @@ -54,7 +54,7 @@ export function useGroupName(groupBy: GroupByField, group: string, summary?: Gro function flattenObject(obj: Record, parentKey = '', result: Record = {}) { for (const key in obj) { - if (obj.hasOwnProperty(key)) { + if (Object.hasOwn(obj, key)) { const newKey = parentKey ? `${parentKey}.${key}` : key; if (typeof obj[key] === 'object' && obj[key] !== null) { flattenObject(obj[key], newKey, result); diff --git a/x-pack/plugins/osquery/public/agents/agents_table.tsx b/x-pack/plugins/osquery/public/agents/agents_table.tsx index c7b6fdd432fa31..ff9b89f73543b9 100644 --- a/x-pack/plugins/osquery/public/agents/agents_table.tsx +++ b/x-pack/plugins/osquery/public/agents/agents_table.tsx @@ -95,8 +95,7 @@ const AgentsTableComponent: React.FC = ({ agentSelection, onCh // filter out all the agents counted by selected policies and platforms selectedAgents.filter(checkAgent).length + // add the number of agents added via policy and platform groups - getNumAgentsInGrouping(selectedGroups) - - // subtract the number of agents double counted by policy/platform selections + getNumAgentsInGrouping(selectedGroups) - // subtract the number of agents double counted by policy/platform selections getNumOverlapped(selectedGroups, agentList?.groups?.overlap ?? {}) ); } diff --git a/x-pack/plugins/search_notebooks/server/lib/notebook_catalog.ts b/x-pack/plugins/search_notebooks/server/lib/notebook_catalog.ts index 54d2a1acd055fd..6bab7c28e85ca6 100644 --- a/x-pack/plugins/search_notebooks/server/lib/notebook_catalog.ts +++ b/x-pack/plugins/search_notebooks/server/lib/notebook_catalog.ts @@ -180,7 +180,7 @@ export const getNotebookMetadata = (id: string, cache: NotebooksCache) => { const nbInfo = cache.catalog.notebooks.find((nb) => nb.id === id); return nbInfo ? cleanNotebookMetadata(nbInfo) : undefined; } - if (!NOTEBOOKS_MAP.hasOwnProperty(id)) { + if (!Object.hasOwn(NOTEBOOKS_MAP, id)) { return undefined; } diff --git a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/services/role_template_type.ts b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/services/role_template_type.ts index 97f464ce0494fb..b98d2020649b8b 100644 --- a/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/services/role_template_type.ts +++ b/x-pack/plugins/security/public/management/role_mappings/edit_role_mapping/services/role_template_type.ts @@ -17,7 +17,8 @@ export function isStoredRoleTemplate( ): roleMappingTemplate is StoredRoleTemplate { return ( roleMappingTemplate.template != null && - roleMappingTemplate.template.hasOwnProperty('id') && + typeof roleMappingTemplate.template === 'object' && + Object.hasOwn(roleMappingTemplate.template, 'id') && typeof (roleMappingTemplate as unknown as StoredRoleTemplate).template.id === 'string' ); } @@ -27,7 +28,8 @@ export function isInlineRoleTemplate( ): roleMappingTemplate is InlineRoleTemplate { return ( roleMappingTemplate.template != null && - roleMappingTemplate.template.hasOwnProperty('source') && + typeof roleMappingTemplate.template === 'object' && + Object.hasOwn(roleMappingTemplate.template, 'source') && typeof (roleMappingTemplate as unknown as InlineRoleTemplate).template.source === 'string' ); } diff --git a/x-pack/plugins/security/public/management/users/edit_user/edit_user_page.tsx b/x-pack/plugins/security/public/management/users/edit_user/edit_user_page.tsx index 9926fe49883eb6..cb9587dd2971cd 100644 --- a/x-pack/plugins/security/public/management/users/edit_user/edit_user_page.tsx +++ b/x-pack/plugins/security/public/management/users/edit_user/edit_user_page.tsx @@ -99,9 +99,7 @@ export const EditUserPage: FunctionComponent = ({ username }) } /> - - {isDeprecatedUser ? ( <> = ({ username }) ) : undefined} - = ({ username }) onSuccess={backToUsers} disabled={readOnly} /> - {readOnly ? undefined : ( <> {action === 'changePassword' ? ( diff --git a/x-pack/plugins/security/public/management/users/edit_user/user_form.tsx b/x-pack/plugins/security/public/management/users/edit_user/user_form.tsx index b9da87e14ea3d6..d5cfc09819157b 100644 --- a/x-pack/plugins/security/public/management/users/edit_user/user_form.tsx +++ b/x-pack/plugins/security/public/management/users/edit_user/user_form.tsx @@ -316,7 +316,6 @@ export const UserForm: FunctionComponent = ({ ) : undefined} - {isNewUser ? ( = ({ ) : null} - diff --git a/x-pack/plugins/security/server/authentication/can_redirect_request.ts b/x-pack/plugins/security/server/authentication/can_redirect_request.ts index 37e6d6b7061f73..d2c6c8cee341f5 100644 --- a/x-pack/plugins/security/server/authentication/can_redirect_request.ts +++ b/x-pack/plugins/security/server/authentication/can_redirect_request.ts @@ -20,8 +20,8 @@ const KIBANA_VERSION_HEADER = 'kbn-version'; export function canRedirectRequest(request: KibanaRequest) { const headers = request.headers; const route = request.route; - const hasVersionHeader = headers.hasOwnProperty(KIBANA_VERSION_HEADER); - const hasXsrfHeader = headers.hasOwnProperty(KIBANA_XSRF_HEADER); + const hasVersionHeader = Object.hasOwn(headers, KIBANA_VERSION_HEADER); + const hasXsrfHeader = Object.hasOwn(headers, KIBANA_XSRF_HEADER); const isApiRoute = route.options.tags.includes(ROUTE_TAG_API) || diff --git a/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts b/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts index d9a83806abf510..262bc579c34c81 100644 --- a/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts +++ b/x-pack/plugins/security/server/authorization/disable_ui_capabilities.ts @@ -144,7 +144,7 @@ export function disableUICapabilitiesFactory( // Capabilities derived from Elasticsearch features should not be // included here, as the result is used to check authorization against // Kibana Privileges, rather than Elasticsearch Privileges. - if (elasticsearchFeatureMap.hasOwnProperty(featureId)) { + if (Object.hasOwn(elasticsearchFeatureMap, featureId)) { return []; } if (typeof value === 'boolean') { @@ -207,7 +207,7 @@ export function disableUICapabilitiesFactory( const action = authz.actions.ui.get(featureId, ...uiCapabilityParts); - const isElasticsearchFeature = elasticsearchFeatureMap.hasOwnProperty(featureId); + const isElasticsearchFeature = Object.hasOwn(elasticsearchFeatureMap, featureId); const isCatalogueFeature = featureId === 'catalogue'; const isManagementFeature = featureId === 'management'; @@ -238,7 +238,7 @@ export function disableUICapabilitiesFactory( } else if (isManagementFeature) { const [managementSectionId, managementEntryId] = uiCapabilityParts; const featureGrantsManagementEntry = - (esFeature.management ?? {}).hasOwnProperty(managementSectionId) && + Object.hasOwn(esFeature.management ?? {}, managementSectionId) && esFeature.management![managementSectionId].includes(managementEntryId); return ( diff --git a/x-pack/plugins/security/server/routes/feature_check/feature_check.ts b/x-pack/plugins/security/server/routes/feature_check/feature_check.ts index 46276957b6c838..b256ee77e55ff7 100644 --- a/x-pack/plugins/security/server/routes/feature_check/feature_check.ts +++ b/x-pack/plugins/security/server/routes/feature_check/feature_check.ts @@ -142,5 +142,5 @@ async function getEnabledSecurityFeatures(esClient: ElasticsearchClient, logger: function usesCustomScriptSettings( nodeResponse: NodeSettingsResponse | {} ): nodeResponse is NodeSettingsResponse { - return nodeResponse.hasOwnProperty('nodes'); + return Object.hasOwn(nodeResponse, 'nodes'); } diff --git a/x-pack/plugins/security_solution/public/assistant/comment_actions/index.tsx b/x-pack/plugins/security_solution/public/assistant/comment_actions/index.tsx index baf36e278b71f2..f145deb9febc7b 100644 --- a/x-pack/plugins/security_solution/public/assistant/comment_actions/index.tsx +++ b/x-pack/plugins/security_solution/public/assistant/comment_actions/index.tsx @@ -107,7 +107,6 @@ const CommentActionsComponent: React.FC = ({ message }) => { )} - = ({ message }) => { /> - = ({ message }) => { /> - diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_links.ts b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_links.ts index a2bc62eb268070..808c779a0aed5a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_links.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/suricata/suricata_links.ts @@ -18,8 +18,8 @@ const lazySuricataLibConfiguration = () => { ); }; -const has = (obj: T, key: string | number | symbol): key is keyof T => - Object.prototype.hasOwnProperty.call(obj, key); +const has = (obj: T, key: string | number | symbol): key is keyof T => + Object.hasOwn(obj, key); export const getLinksFromSignature = async (id: number): Promise => { const db = (await lazySuricataLibConfiguration()).db; diff --git a/x-pack/plugins/security_solution/scripts/run_cypress/utils.ts b/x-pack/plugins/security_solution/scripts/run_cypress/utils.ts index 857e29ab8d3907..7d6e35bc48f744 100644 --- a/x-pack/plugins/security_solution/scripts/run_cypress/utils.ts +++ b/x-pack/plugins/security_solution/scripts/run_cypress/utils.ts @@ -99,6 +99,7 @@ export const parseTestFileConfig = (filePath: string): SecuritySolutionDescribeB try { // TODO:PT need to assess implication of using this approach to get the JSON back out + // eslint-disable-next-line no-new-func const ftrConfigJson = new Function(`return ${ftrConfigCode}`)(); return TestFileFtrConfigSchema.validate(ftrConfigJson); } catch (err) { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts index 1c5d1cc1a63b2c..f802593c39121d 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_actions_legacy/logic/rule_actions/legacy_migrations.ts @@ -31,7 +31,7 @@ import { */ function isEmptyObject(obj: {}) { for (const attr in obj) { - if (Object.prototype.hasOwnProperty.call(obj, attr)) { + if (Object.hasOwn(obj, attr)) { return false; } } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/filter_field_entries.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/filter_field_entries.ts index 383aa616603e6a..581dd7ffbff1ad 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/filter_field_entries.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/filter_field_entries.ts @@ -29,11 +29,12 @@ export const filterFieldEntries = ( ): Array<[string, FieldsType]> => { return fieldEntries.filter(([fieldsKey, fieldsValue]: [string, FieldsType]) => { return ( + // TODO: Look at not filtering this and instead transform it so it can be inserted correctly in the strategies which does an overwrite of everything from fields !isEqlBug77152(fieldsKey) && !isIgnored(fieldsKey, ignoreFields) && !isInvalidKey(fieldsKey) && !isMultiField(fieldsKey, fieldEntries) && - !isTypeObject(fieldsValue) // TODO: Look at not filtering this and instead transform it so it can be inserted correctly in the strategies which does an overwrite of everything from fields + !isTypeObject(fieldsValue) ); }); }; diff --git a/x-pack/plugins/spaces/server/capabilities/capabilities_switcher.ts b/x-pack/plugins/spaces/server/capabilities/capabilities_switcher.ts index b5d9be07d91af7..d37337852b6b9e 100644 --- a/x-pack/plugins/spaces/server/capabilities/capabilities_switcher.ts +++ b/x-pack/plugins/spaces/server/capabilities/capabilities_switcher.ts @@ -98,7 +98,7 @@ function toggleDisabledFeatures( for (const feature of disabledFeatures) { // Disable associated navLink, if one exists feature.app.forEach((app) => { - if (navLinks.hasOwnProperty(app) && !enabledAppEntries.has(app)) { + if (Object.hasOwn(navLinks, app) && !enabledAppEntries.has(app)) { navLinks[app] = false; } }); @@ -117,8 +117,8 @@ function toggleDisabledFeatures( sectionItems.forEach((item) => { const enabledManagementEntriesSection = enabledManagementEntries.get(sectionId); if ( - managementItems.hasOwnProperty(sectionId) && - managementItems[sectionId].hasOwnProperty(item) + Object.hasOwn(managementItems, sectionId) && + Object.hasOwn(managementItems[sectionId], item) ) { const isEnabledElsewhere = (enabledManagementEntriesSection ?? []).includes(item); if (!isEnabledElsewhere) { @@ -129,7 +129,7 @@ function toggleDisabledFeatures( }); // Disable "sub features" that match the disabled feature - if (capabilities.hasOwnProperty(feature.id)) { + if (Object.hasOwn(capabilities, feature.id)) { const capability = capabilities[feature.id]; Object.keys(capability).forEach((featureKey) => { capability[featureKey] = false; diff --git a/x-pack/plugins/spaces/server/saved_objects/migrations/space_migrations.ts b/x-pack/plugins/spaces/server/saved_objects/migrations/space_migrations.ts index 28d4e42cfb9cf2..c060f8d36a09d7 100644 --- a/x-pack/plugins/spaces/server/saved_objects/migrations/space_migrations.ts +++ b/x-pack/plugins/spaces/server/saved_objects/migrations/space_migrations.ts @@ -10,7 +10,7 @@ import type { SavedObjectUnsanitizedDoc } from '@kbn/core/server'; import type { Space } from '../../../common'; export const migrateTo660 = (doc: SavedObjectUnsanitizedDoc) => { - if (!doc.attributes.hasOwnProperty('disabledFeatures')) { + if (!Object.hasOwn(doc.attributes, 'disabledFeatures')) { doc.attributes.disabledFeatures = []; } return doc; diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts index 7019520b9498c3..e94918a62b26b5 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts @@ -142,11 +142,11 @@ export class SpacesClient implements ISpacesClient { ); } - if (this.isServerless && space.hasOwnProperty('solution')) { + if (this.isServerless && Object.hasOwn(space, 'solution')) { throw Boom.badRequest('Unable to create Space, solution property is forbidden in serverless'); } - if (space.hasOwnProperty('solution') && !space.solution) { + if (Object.hasOwn(space, 'solution') && !space.solution) { throw Boom.badRequest('Unable to create Space, solution property cannot be empty'); } @@ -175,11 +175,11 @@ export class SpacesClient implements ISpacesClient { ); } - if (this.isServerless && space.hasOwnProperty('solution')) { + if (this.isServerless && Object.hasOwn(space, 'solution')) { throw Boom.badRequest('Unable to update Space, solution property is forbidden in serverless'); } - if (space.hasOwnProperty('solution') && !space.solution) { + if (Object.hasOwn(space, 'solution') && !space.solution) { throw Boom.badRequest('Unable to update Space, solution property cannot be empty'); } diff --git a/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_esql_query.ts b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_esql_query.ts index d6b8215bd2a375..f017ee0f63aed1 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_esql_query.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/es_query/lib/fetch_esql_query.ts @@ -11,8 +11,12 @@ import { SharePluginStart } from '@kbn/share-plugin/server'; import { IScopedClusterClient, Logger } from '@kbn/core/server'; import { ecsFieldMap, alertFieldMap } from '@kbn/alerts-as-data-utils'; import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; -import { OnlyEsqlQueryRuleParams } from '../types'; +import { LocatorPublic } from '@kbn/share-plugin/common'; +import { DiscoverAppLocatorParams } from '@kbn/discover-plugin/common'; +import { DataViewsContract } from '@kbn/data-views-plugin/common'; +import { Filter, Query } from '@kbn/es-query'; import { EsqlTable, toEsQueryHits } from '../../../../common'; +import { OnlyEsqlQueryRuleParams } from '../types'; export interface FetchEsqlQueryOpts { ruleId: string; @@ -127,3 +131,31 @@ export const getSourceFields = (results: EsqlTable) => { return intersectionBy(resultFields, ecsFields, 'label'); }; + +export async function generateLink( + esqlQuery: Query, + discoverLocator: LocatorPublic, + dataViews: DataViewsContract, + dataViewToUpdate: DataView, + dateStart: string, + dateEnd: string, + spacePrefix: string, + filterToExcludeHitsFromPreviousRun: Filter | null +) { + const redirectUrlParams: DiscoverAppLocatorParams = { + filters: filterToExcludeHitsFromPreviousRun ? [filterToExcludeHitsFromPreviousRun] : [], + timeRange: { from: dateStart, to: dateEnd }, + isAlertResults: true, + query: { + language: 'esql', + query: esqlQuery, + }, + }; + + // use `lzCompress` flag for making the link readable during debugging/testing + // const redirectUrl = discoverLocator!.getRedirectUrl(redirectUrlParams, { lzCompress: false }); + const redirectUrl = discoverLocator!.getRedirectUrl(redirectUrlParams); + const [start, end] = redirectUrl.split('/app'); + + return start + spacePrefix + '/app' + end; +} diff --git a/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/transform_results.ts b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/transform_results.ts index 6b457575b40292..47292ab82e1959 100644 --- a/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/transform_results.ts +++ b/x-pack/plugins/stack_alerts/server/rule_types/geo_containment/lib/transform_results.ts @@ -17,7 +17,7 @@ export function transformResults( const resultsMap = new Map(); const boundarySplitBuckets = results?.aggregations?.shapes?.buckets ?? {}; for (const boundaryId in boundarySplitBuckets) { - if (!boundarySplitBuckets.hasOwnProperty(boundaryId)) { + if (!Object.hasOwn(boundarySplitBuckets, boundaryId)) { continue; } diff --git a/x-pack/plugins/stack_connectors/common/slack_api/schema.ts b/x-pack/plugins/stack_connectors/common/slack_api/schema.ts index 37ca6de1cf2312..029b2fb0e81f04 100644 --- a/x-pack/plugins/stack_connectors/common/slack_api/schema.ts +++ b/x-pack/plugins/stack_connectors/common/slack_api/schema.ts @@ -42,7 +42,7 @@ export function validateBlockkit(text: string) { try { const parsedText = JSON.parse(text); - if (!parsedText.hasOwnProperty('blocks')) { + if (!Object.hasOwn(parsedText, 'blocks')) { return 'block kit body must contain field "blocks"'; } } catch (err) { diff --git a/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.tsx index 2163c822ee4a6a..7ae1efbe13f381 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/jira/jira_params.tsx @@ -107,10 +107,10 @@ const JiraParamsFields: React.FunctionComponent fields != null ? { - hasLabels: Object.prototype.hasOwnProperty.call(fields, 'labels'), - hasDescription: Object.prototype.hasOwnProperty.call(fields, 'description'), - hasPriority: Object.prototype.hasOwnProperty.call(fields, 'priority'), - hasParent: Object.prototype.hasOwnProperty.call(fields, 'parent'), + hasLabels: Object.hasOwn(fields, 'labels'), + hasDescription: Object.hasOwn(fields, 'description'), + hasPriority: Object.hasOwn(fields, 'priority'), + hasParent: Object.hasOwn(fields, 'parent'), } : { hasLabels: false, hasDescription: false, hasPriority: false, hasParent: false }, [fields] diff --git a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx index 5924a1feffc62c..c44fd56612d20e 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/slack_api/slack_api.tsx @@ -76,7 +76,7 @@ export const getConnectorType = (): ConnectorTypeModel< if (actionParams.subAction === 'postBlockkit' && actionParams.subActionParams.text) { try { const blockkitJson = JSON.parse(actionParams.subActionParams.text); - if (!blockkitJson.hasOwnProperty('blocks')) { + if (!Object.hasOwn(blockkitJson, 'blocks')) { errors.text.push(BLOCKS_REQUIRED); } } catch { diff --git a/x-pack/plugins/transform/common/utils/es_utils.ts b/x-pack/plugins/transform/common/utils/es_utils.ts index abe24ac017e2ff..41513176076c65 100644 --- a/x-pack/plugins/transform/common/utils/es_utils.ts +++ b/x-pack/plugins/transform/common/utils/es_utils.ts @@ -35,8 +35,7 @@ export function isValidIndexName(indexName: string) { /^[^-_\+]+$/.test(indexName.charAt(0)) && // Cannot be . or .. indexName !== '.' && - indexName !== '..' && - // Cannot be longer than 255 bytes (note it is bytes, + indexName !== '..' && // Cannot be longer than 255 bytes (note it is bytes, // so multi-byte characters will count towards the 255 limit faster) isValidIndexNameLength(indexName) ); diff --git a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx index c2549b0edad56d..3a933dcc9e935a 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_delete_transform.tsx @@ -110,7 +110,7 @@ export const useDeleteTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { const status = results[transformId]; const destinationIndex = status.destinationIndex; diff --git a/x-pack/plugins/transform/public/app/hooks/use_reauthorize_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_reauthorize_transform.tsx index 0465a178c09a3b..65d98bbea01413 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_reauthorize_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_reauthorize_transform.tsx @@ -51,7 +51,7 @@ export const useReauthorizeTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { const result = results[transformId]; if (!result.success) { toastNotifications.addError( diff --git a/x-pack/plugins/transform/public/app/hooks/use_reset_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_reset_transform.tsx index fafc26581fa09e..212cb2e9b629f4 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_reset_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_reset_transform.tsx @@ -47,7 +47,7 @@ export const useResetTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { const status = results[transformId]; if (status.transformReset?.error) { diff --git a/x-pack/plugins/transform/public/app/hooks/use_schedule_now_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_schedule_now_transform.tsx index 22201b28068483..8511c2092e4ca6 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_schedule_now_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_schedule_now_transform.tsx @@ -51,7 +51,7 @@ export const useScheduleNowTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { const result = results[transformId]; if (!result.success) { toastNotifications.addError( diff --git a/x-pack/plugins/transform/public/app/hooks/use_start_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_start_transform.tsx index 2175ccffeea536..73790b09f3b1bd 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_start_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_start_transform.tsx @@ -47,7 +47,7 @@ export const useStartTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { const result = results[transformId]; if (!result.success) { toastNotifications.addError( diff --git a/x-pack/plugins/transform/public/app/hooks/use_stop_transform.tsx b/x-pack/plugins/transform/public/app/hooks/use_stop_transform.tsx index 439c654ded1691..29939d9fcef7df 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_stop_transform.tsx +++ b/x-pack/plugins/transform/public/app/hooks/use_stop_transform.tsx @@ -48,7 +48,7 @@ export const useStopTransforms = () => { onSuccess: (results) => { for (const transformId in results) { // hasOwnProperty check to ensure only properties on object itself, and not its prototypes - if (results.hasOwnProperty(transformId)) { + if (Object.hasOwn(results, transformId)) { if (!results[transformId].success) { toastNotifications.addDanger( i18n.translate('xpack.transform.transformList.stopTransformErrorMessage', { diff --git a/x-pack/plugins/transform/public/app/hooks/use_transform_config_data.ts b/x-pack/plugins/transform/public/app/hooks/use_transform_config_data.ts index 4ecba4f66168b2..f18b3778d6af32 100644 --- a/x-pack/plugins/transform/public/app/hooks/use_transform_config_data.ts +++ b/x-pack/plugins/transform/public/app/hooks/use_transform_config_data.ts @@ -270,7 +270,7 @@ export const useTransformConfigData = ( return ({ rowIndex, columnId }: { rowIndex: number; columnId: string }) => { const adjustedRowIndex = rowIndex - pagination.pageIndex * pagination.pageSize; - const cellValue = pageData.hasOwnProperty(adjustedRowIndex) + const cellValue = Object.hasOwn(pageData, adjustedRowIndex) ? pageData[adjustedRowIndex][columnId] ?? null : null; diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_runtime_mappings_settings/advanced_runtime_mappings_settings.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_runtime_mappings_settings/advanced_runtime_mappings_settings.tsx index b150fb0c4e7ca2..b8924c2f44744e 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_runtime_mappings_settings/advanced_runtime_mappings_settings.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/advanced_runtime_mappings_settings/advanced_runtime_mappings_settings.tsx @@ -56,7 +56,7 @@ export const AdvancedRuntimeMappingsSettings: FC = (props) = const previousConfig = runtimeMappings; const isFieldDeleted = (field: string) => - previousConfig?.hasOwnProperty(field) && !nextConfig.hasOwnProperty(field); + Object.hasOwn(previousConfig ?? {}, field) && !Object.hasOwn(nextConfig, field); applyRuntimeMappingsEditorChanges(); @@ -66,8 +66,8 @@ export const AdvancedRuntimeMappingsSettings: FC = (props) = const groupBy = groupByList[groupByKey]; if ( isPivotGroupByConfigWithUiSupport(groupBy) && - previousConfig?.hasOwnProperty(groupBy.field) && - !nextConfig.hasOwnProperty(groupBy.field) + Object.hasOwn(previousConfig ?? {}, groupBy.field) && + !Object.hasOwn(nextConfig, groupBy.field) ) { deleteGroupBy(groupByKey); } diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_agg_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_agg_form.tsx index 068da2a3567d8b..2269f68f398408 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_agg_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_agg_form.tsx @@ -31,7 +31,7 @@ export function getSupportedFilterAggs( if (dataViewField !== undefined) { return [...commonFilterAggs, ...filterAggsFieldSupport[dataViewField.type]]; } - if (isPopulatedObject(runtimeMappings) && runtimeMappings.hasOwnProperty(fieldName)) { + if (isPopulatedObject(runtimeMappings) && Object.hasOwn(runtimeMappings, fieldName)) { const runtimeField = runtimeMappings[fieldName]; return [ ...commonFilterAggs, diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_conditions.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_conditions.tsx index 5828210d32598a..c9e95118698a59 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_conditions.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rule_form/rule_conditions.tsx @@ -54,7 +54,7 @@ export const RuleConditions = !BUILT_IN_ACTION_GROUPS.has(id)), - (actionGroup) => actionGroup.hasOwnProperty('conditions') + (actionGroup) => Object.hasOwn(actionGroup, 'conditions') ); return ( diff --git a/x-pack/plugins/upgrade_assistant/public/plugin.ts b/x-pack/plugins/upgrade_assistant/public/plugin.ts index 1fb1656079fc9a..694e29cd7cee36 100644 --- a/x-pack/plugins/upgrade_assistant/public/plugin.ts +++ b/x-pack/plugins/upgrade_assistant/public/plugin.ts @@ -68,7 +68,7 @@ export class UpgradeAssistantUIPlugin // Infra plugin doesnt export anything as a public interface. So the only // way we have at this stage for checking if the plugin is available or not // is by checking if the startServices has the `infra` key. - infra: plugins.hasOwnProperty('infra') ? {} : undefined, + infra: Object.hasOwn(plugins, 'infra') ? {} : undefined, }, services: { core: coreStart, diff --git a/x-pack/plugins/watcher/public/legacy/time_buckets.js b/x-pack/plugins/watcher/public/legacy/time_buckets.js index a0804e07c4662d..469927269af57b 100644 --- a/x-pack/plugins/watcher/public/legacy/time_buckets.js +++ b/x-pack/plugins/watcher/public/legacy/time_buckets.js @@ -345,7 +345,7 @@ TimeBuckets.__cached__ = function (self) { function cachedGetter(prop) { return { value: function cachedGetter(...rest) { - if (cache.hasOwnProperty(prop)) { + if (Object.hasOwn(cache, prop)) { return cache[prop]; } @@ -385,7 +385,7 @@ TimeBuckets.__cached__ = function (self) { _.forOwn(TimeBuckets.prototype, function (fn, prop) { if (prop[0] === '_') return; - if (breakers.hasOwnProperty(prop)) { + if (Object.hasOwn(breakers, prop)) { desc[prop] = cacheBreaker(prop); } else { desc[prop] = cachedGetter(prop); diff --git a/x-pack/plugins/watcher/server/models/settings/settings.js b/x-pack/plugins/watcher/server/models/settings/settings.js index 8f41736e6a53dd..d6fbec1068e7c8 100644 --- a/x-pack/plugins/watcher/server/models/settings/settings.js +++ b/x-pack/plugins/watcher/server/models/settings/settings.js @@ -51,7 +51,7 @@ function getNotifications(json) { return {}; } return Object.values(json).reduce((accum, value) => { - if (value.hasOwnProperty('xpack') && value.xpack.hasOwnProperty('notification')) { + if (Object.hasOwn(value, 'xpack') && Object.hasOwn(value.xpack, 'notification')) { accum = merge(accum, value.xpack.notification); } return accum; @@ -75,7 +75,7 @@ function getActionTypesSettings(upstreamJson) { // For actions types requiring setup, mark them as enabled // if upstream response contains them, indicating that they // are setup - if (upstreamActionTypes.hasOwnProperty(actionType)) { + if (Object.hasOwn(upstreamActionTypes, actionType)) { // If it exists in the upstream response, it's enabled actionTypeData.enabled = true; diff --git a/x-pack/test/accessibility/apps/group2/ml_anomaly_detection.ts b/x-pack/test/accessibility/apps/group2/ml_anomaly_detection.ts index 33c7db9eb0b206..0667d2d3cddd4b 100644 --- a/x-pack/test/accessibility/apps/group2/ml_anomaly_detection.ts +++ b/x-pack/test/accessibility/apps/group2/ml_anomaly_detection.ts @@ -372,22 +372,22 @@ export default function ({ getService }: FtrProviderContext) { await a11y.testAppSnapshot(); await ml.jobWizardAdvanced.selectDetectorFunction(detector.function); - if (detector.hasOwnProperty('field')) { + if (Object.hasOwn(detector, 'field')) { await ml.jobWizardAdvanced.selectDetectorField(detector.field!); } - if (detector.hasOwnProperty('byField')) { + if (Object.hasOwn(detector, 'byField')) { await ml.jobWizardAdvanced.selectDetectorByField(detector.byField!); } - if (detector.hasOwnProperty('overField')) { + if (Object.hasOwn(detector, 'overField')) { await ml.jobWizardAdvanced.selectDetectorOverField(detector.overField!); } - if (detector.hasOwnProperty('partitionField')) { + if (Object.hasOwn(detector, 'partitionField')) { await ml.jobWizardAdvanced.selectDetectorPartitionField(detector.partitionField!); } - if (detector.hasOwnProperty('excludeFrequent')) { + if (Object.hasOwn(detector, 'excludeFrequent')) { await ml.jobWizardAdvanced.selectDetectorExcludeFrequent(detector.excludeFrequent!); } - if (detector.hasOwnProperty('description')) { + if (Object.hasOwn(detector, 'description')) { await ml.jobWizardAdvanced.setDetectorDescription(detector.description!); } diff --git a/x-pack/test/api_integration/apis/management/index_management/settings.ts b/x-pack/test/api_integration/apis/management/index_management/settings.ts index e6986dfca86227..24819d177ccf09 100644 --- a/x-pack/test/api_integration/apis/management/index_management/settings.ts +++ b/x-pack/test/api_integration/apis/management/index_management/settings.ts @@ -84,7 +84,7 @@ export default function ({ getService }: FtrProviderContext) { // Make sure none of the settings have been removed from ES API expectedSettings.forEach((setting) => { try { - expect(body.defaults.index.hasOwnProperty(setting)).to.be(true); + expect(Object.hasOwn(body.defaults.index, setting)).to.be(true); } catch { throw new Error(`Expected setting "${setting}" not found.`); } diff --git a/x-pack/test/api_integration/apis/management/index_management/stats.ts b/x-pack/test/api_integration/apis/management/index_management/stats.ts index 28ef3083e3a4c9..4ce10574c6361a 100644 --- a/x-pack/test/api_integration/apis/management/index_management/stats.ts +++ b/x-pack/test/api_integration/apis/management/index_management/stats.ts @@ -48,7 +48,7 @@ export default function ({ getService }: FtrProviderContext) { // Make sure none of the stats have been removed from ES API expectedStats.forEach((stat) => { try { - expect(body.stats.total.hasOwnProperty(stat)).to.be(true); + expect(Object.hasOwn(body.stats.total, stat)).to.be(true); } catch { throw new Error(`Expected stat "${stat}" not found.`); } diff --git a/x-pack/test/api_integration/apis/ml/job_validation/validate.ts b/x-pack/test/api_integration/apis/ml/job_validation/validate.ts index 02088af0b12e1b..b1481ffe183d5e 100644 --- a/x-pack/test/api_integration/apis/ml/job_validation/validate.ts +++ b/x-pack/test/api_integration/apis/ml/job_validation/validate.ts @@ -175,7 +175,7 @@ export default ({ getService }: FtrProviderContext) => { // and may vary between test environments, e.g. cloud vs non-cloud, // so it should not be part of the validation body.forEach((element: any) => { - if (element.hasOwnProperty('maxModelMemoryLimit')) { + if (Object.hasOwn(element, 'maxModelMemoryLimit')) { delete element.maxModelMemoryLimit; } }); diff --git a/x-pack/test/api_integration/apis/ml/modules/recognize_module.ts b/x-pack/test/api_integration/apis/ml/modules/recognize_module.ts index 0c03b65dcced02..31dd5f33546359 100644 --- a/x-pack/test/api_integration/apis/ml/modules/recognize_module.ts +++ b/x-pack/test/api_integration/apis/ml/modules/recognize_module.ts @@ -221,7 +221,7 @@ export default ({ getService }: FtrProviderContext) => { for (const testData of testDataList) { describe('lists matching modules', function () { before(async () => { - if (testData.hasOwnProperty('sourceDataArchive')) { + if (Object.hasOwn(testData, 'sourceDataArchive')) { await esArchiver.loadIfNeeded(testData.sourceDataArchive!); } }); diff --git a/x-pack/test/api_integration/apis/ml/modules/setup_module.ts b/x-pack/test/api_integration/apis/ml/modules/setup_module.ts index 27d6d048e3f84b..def9774a55ddcf 100644 --- a/x-pack/test/api_integration/apis/ml/modules/setup_module.ts +++ b/x-pack/test/api_integration/apis/ml/modules/setup_module.ts @@ -860,10 +860,10 @@ export default ({ getService }: FtrProviderContext) => { for (const testData of testDataListNegative) { describe('rejects request', function () { before(async () => { - if (testData.hasOwnProperty('sourceDataArchive')) { + if (Object.hasOwn(testData, 'sourceDataArchive')) { await esArchiver.loadIfNeeded(testData.sourceDataArchive!); } - if (testData.hasOwnProperty('indexPattern')) { + if (Object.hasOwn(testData, 'indexPattern')) { await ml.testResources.createDataViewIfNeeded( testData.indexPattern!.name as string, testData.indexPattern!.timeField as string @@ -873,7 +873,7 @@ export default ({ getService }: FtrProviderContext) => { after(async () => { await ml.api.cleanMlIndices(); - if (testData.hasOwnProperty('indexPattern')) { + if (Object.hasOwn(testData, 'indexPattern')) { await ml.testResources.deleteDataViewByTitle(testData.indexPattern!.name); } }); diff --git a/x-pack/test/fleet_api_integration/apis/agents/delete.ts b/x-pack/test/fleet_api_integration/apis/agents/delete.ts index 43be03e3182a73..be07a16cee458f 100644 --- a/x-pack/test/fleet_api_integration/apis/agents/delete.ts +++ b/x-pack/test/fleet_api_integration/apis/agents/delete.ts @@ -41,7 +41,7 @@ export default function ({ getService }: FtrProviderContext) { describe('fleet_delete_agent', () => { before(async () => { for (const roleName in users) { - if (users.hasOwnProperty(roleName)) { + if (Object.hasOwn(users, roleName)) { const user = users[roleName]; if (user.permissions) { 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 2a89477e77b7f5..5ae753585c0da6 100644 --- a/x-pack/test/fleet_api_integration/apis/test_users.ts +++ b/x-pack/test/fleet_api_integration/apis/test_users.ts @@ -233,7 +233,7 @@ export const testUsers: { export const setupTestUsers = async (security: SecurityService) => { for (const roleName in testUsers) { - if (testUsers.hasOwnProperty(roleName)) { + if (Object.hasOwn(testUsers, roleName)) { const user = testUsers[roleName]; if (user.permissions) { 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 8b8bec8a3b99c1..d2440a5dd706b1 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 @@ -124,8 +124,8 @@ export default function ({ getPageObjects, getService }) { expect(mapboxStyle.sources[LAYER_ID].data.features.length).to.equal(12); mapboxStyle.sources[LAYER_ID].data.features.forEach(({ properties }) => { - expect(properties.hasOwnProperty(MAX_OF_BYTES_PROP_NAME)).to.be(true); - expect(properties.hasOwnProperty(DOC_COUNT_PROP_NAME)).to.be(true); + expect(Object.hasOwn(properties, MAX_OF_BYTES_PROP_NAME)).to.be(true); + expect(Object.hasOwn(properties, DOC_COUNT_PROP_NAME)).to.be(true); }); }); diff --git a/x-pack/test/functional/apps/maps/group4/joins.js b/x-pack/test/functional/apps/maps/group4/joins.js index 74e68cb12c11a3..b4846533b6a05f 100644 --- a/x-pack/test/functional/apps/maps/group4/joins.js +++ b/x-pack/test/functional/apps/maps/group4/joins.js @@ -81,9 +81,9 @@ export default function ({ getPageObjects, getService }) { mapboxStyle.sources.n1t6f.data.features.forEach(({ properties }) => { if (properties.name === 'tango') { //left join, which means we won't rescale joins that do not match - expect(properties.hasOwnProperty(JOIN_PROPERTY_NAME)).to.be(false); + expect(Object.hasOwn(properties, JOIN_PROPERTY_NAME)).to.be(false); } else { - expect(properties.hasOwnProperty(JOIN_PROPERTY_NAME)).to.be(true); + expect(Object.hasOwn(properties, JOIN_PROPERTY_NAME)).to.be(true); } expect(properties[JOIN_PROPERTY_NAME]).to.be(EXPECTED_JOIN_VALUES[properties.name]); }); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/advanced_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/advanced_job.ts index 9ebc7d8ddc8279..ea5d70fcbe0695 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/advanced_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/advanced_job.ts @@ -243,21 +243,21 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation inputs the query delay'); await ml.jobWizardAdvanced.assertQueryDelayInputExists(); await ml.jobWizardAdvanced.assertQueryDelayValue(defaultValues.queryDelay); - if (testData.datafeedConfig.hasOwnProperty('queryDelay')) { + if (Object.hasOwn(testData.datafeedConfig, 'queryDelay')) { await ml.jobWizardAdvanced.setQueryDelay(testData.datafeedConfig.queryDelay!); } await ml.testExecution.logTestStep('job creation inputs the frequency'); await ml.jobWizardAdvanced.assertFrequencyInputExists(); await ml.jobWizardAdvanced.assertFrequencyValue(defaultValues.frequency); - if (testData.datafeedConfig.hasOwnProperty('frequency')) { + if (Object.hasOwn(testData.datafeedConfig, 'frequency')) { await ml.jobWizardAdvanced.setFrequency(testData.datafeedConfig.frequency!); } await ml.testExecution.logTestStep('job creation inputs the scroll size'); await ml.jobWizardAdvanced.assertScrollSizeInputExists(); await ml.jobWizardAdvanced.assertScrollSizeValue(defaultValues.scrollSize); - if (testData.datafeedConfig.hasOwnProperty('scrollSize')) { + if (Object.hasOwn(testData.datafeedConfig, 'scrollSize')) { await ml.jobWizardAdvanced.setScrollSize(testData.datafeedConfig.scrollSize!); } @@ -270,7 +270,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation selects the categorization field'); await ml.jobWizardAdvanced.assertCategorizationFieldInputExists(); - if (testData.pickFieldsConfig.hasOwnProperty('categorizationField')) { + if (Object.hasOwn(testData.pickFieldsConfig, 'categorizationField')) { await ml.jobWizardAdvanced.selectCategorizationField( testData.pickFieldsConfig.categorizationField! ); @@ -280,7 +280,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation selects the summary count field'); await ml.jobWizardAdvanced.assertSummaryCountFieldInputExists(); - if (testData.pickFieldsConfig.hasOwnProperty('summaryCountField')) { + if (Object.hasOwn(testData.pickFieldsConfig, 'summaryCountField')) { await ml.jobWizardAdvanced.selectSummaryCountField( testData.pickFieldsConfig.summaryCountField! ); @@ -307,22 +307,22 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorDescriptionValue(''); await ml.jobWizardAdvanced.selectDetectorFunction(detector.function); - if (detector.hasOwnProperty('field')) { + if (Object.hasOwn(detector, 'field')) { await ml.jobWizardAdvanced.selectDetectorField(detector.field!); } - if (detector.hasOwnProperty('byField')) { + if (Object.hasOwn(detector, 'byField')) { await ml.jobWizardAdvanced.selectDetectorByField(detector.byField!); } - if (detector.hasOwnProperty('overField')) { + if (Object.hasOwn(detector, 'overField')) { await ml.jobWizardAdvanced.selectDetectorOverField(detector.overField!); } - if (detector.hasOwnProperty('partitionField')) { + if (Object.hasOwn(detector, 'partitionField')) { await ml.jobWizardAdvanced.selectDetectorPartitionField(detector.partitionField!); } - if (detector.hasOwnProperty('excludeFrequent')) { + if (Object.hasOwn(detector, 'excludeFrequent')) { await ml.jobWizardAdvanced.selectDetectorExcludeFrequent(detector.excludeFrequent!); } - if (detector.hasOwnProperty('description')) { + if (Object.hasOwn(detector, 'description')) { await ml.jobWizardAdvanced.setDetectorDescription(detector.description!); } @@ -334,7 +334,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorEntryExists( index, detector.identifier, - detector.hasOwnProperty('description') ? detector.description! : undefined + Object.hasOwn(detector, 'description') ? detector.description! : undefined ); } @@ -459,20 +459,20 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job cloning pre-fills the query delay'); await ml.jobWizardAdvanced.assertQueryDelayInputExists(); - if (testData.datafeedConfig.hasOwnProperty('queryDelay')) { + if (Object.hasOwn(testData.datafeedConfig, 'queryDelay')) { await ml.jobWizardAdvanced.assertQueryDelayValue(testData.datafeedConfig.queryDelay!); } await ml.testExecution.logTestStep('job cloning pre-fills the frequency'); await ml.jobWizardAdvanced.assertFrequencyInputExists(); - if (testData.datafeedConfig.hasOwnProperty('frequency')) { + if (Object.hasOwn(testData.datafeedConfig, 'frequency')) { await ml.jobWizardAdvanced.assertFrequencyValue(testData.datafeedConfig.frequency!); } await ml.testExecution.logTestStep('job cloning pre-fills the scroll size'); await ml.jobWizardAdvanced.assertScrollSizeInputExists(); await ml.jobWizardAdvanced.assertScrollSizeValue( - testData.datafeedConfig.hasOwnProperty('scrollSize') + Object.hasOwn(testData.datafeedConfig, 'scrollSize') ? testData.datafeedConfig.scrollSize! : defaultValues.scrollSize ); @@ -487,7 +487,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job cloning pre-fills the categorization field'); await ml.jobWizardAdvanced.assertCategorizationFieldInputExists(); await ml.jobWizardAdvanced.assertCategorizationFieldSelection( - testData.pickFieldsConfig.hasOwnProperty('categorizationField') + Object.hasOwn(testData.pickFieldsConfig, 'categorizationField') ? [testData.pickFieldsConfig.categorizationField!] : [] ); @@ -495,7 +495,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job cloning pre-fills the summary count field'); await ml.jobWizardAdvanced.assertSummaryCountFieldInputExists(); await ml.jobWizardAdvanced.assertSummaryCountFieldSelection( - testData.pickFieldsConfig.hasOwnProperty('summaryCountField') + Object.hasOwn(testData.pickFieldsConfig, 'summaryCountField') ? [testData.pickFieldsConfig.summaryCountField!] : [] ); @@ -505,7 +505,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorEntryExists( index, detector.identifier, - detector.hasOwnProperty('description') ? detector.description! : undefined + Object.hasOwn(detector, 'description') ? detector.description! : undefined ); await ml.jobWizardAdvanced.clickEditDetector(index); @@ -519,23 +519,23 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorFunctionSelection([detector.function]); await ml.jobWizardAdvanced.assertDetectorFieldSelection( - detector.hasOwnProperty('field') ? [detector.field!] : [] + Object.hasOwn(detector, 'field') ? [detector.field!] : [] ); await ml.jobWizardAdvanced.assertDetectorByFieldSelection( - detector.hasOwnProperty('byField') ? [detector.byField!] : [] + Object.hasOwn(detector, 'byField') ? [detector.byField!] : [] ); await ml.jobWizardAdvanced.assertDetectorOverFieldSelection( - detector.hasOwnProperty('overField') ? [detector.overField!] : [] + Object.hasOwn(detector, 'overField') ? [detector.overField!] : [] ); await ml.jobWizardAdvanced.assertDetectorPartitionFieldSelection( - detector.hasOwnProperty('partitionField') ? [detector.partitionField!] : [] + Object.hasOwn(detector, 'partitionField') ? [detector.partitionField!] : [] ); await ml.jobWizardAdvanced.assertDetectorExcludeFrequentSelection( - detector.hasOwnProperty('excludeFrequent') ? [detector.excludeFrequent!] : [] + Object.hasOwn(detector, 'excludeFrequent') ? [detector.excludeFrequent!] : [] ); // Currently, a description different form the identifier is generated for detectors with partition field await ml.jobWizardAdvanced.assertDetectorDescriptionValue( - detector.hasOwnProperty('description') + Object.hasOwn(detector, 'description') ? detector.description! : detector.identifier.replace('partition_field_name', 'partitionfield') ); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/convert_jobs_to_advanced_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/convert_jobs_to_advanced_job.ts index 082ec7762bb987..08f3d91c15ecd5 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/convert_jobs_to_advanced_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/convert_jobs_to_advanced_job.ts @@ -58,7 +58,7 @@ export default function ({ getService }: FtrProviderContext) { 'advanced job creation retains or inputs the summary count field' ); await ml.jobWizardAdvanced.assertSummaryCountFieldInputExists(); - if (testData.pickFieldsConfig.hasOwnProperty('summaryCountField')) { + if (Object.hasOwn(testData.pickFieldsConfig, 'summaryCountField')) { await ml.jobWizardAdvanced.selectSummaryCountField( testData.pickFieldsConfig.summaryCountField! ); @@ -92,22 +92,22 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorDescriptionValue(''); await ml.jobWizardAdvanced.selectDetectorFunction(detector.function); - if (detector.hasOwnProperty('field')) { + if (Object.hasOwn(detector, 'field')) { await ml.jobWizardAdvanced.selectDetectorField(detector.field!); } - if (detector.hasOwnProperty('byField')) { + if (Object.hasOwn(detector, 'byField')) { await ml.jobWizardAdvanced.selectDetectorByField(detector.byField!); } - if (detector.hasOwnProperty('overField')) { + if (Object.hasOwn(detector, 'overField')) { await ml.jobWizardAdvanced.selectDetectorOverField(detector.overField!); } - if (detector.hasOwnProperty('partitionField')) { + if (Object.hasOwn(detector, 'partitionField')) { await ml.jobWizardAdvanced.selectDetectorPartitionField(detector.partitionField!); } - if (detector.hasOwnProperty('excludeFrequent')) { + if (Object.hasOwn(detector, 'excludeFrequent')) { await ml.jobWizardAdvanced.selectDetectorExcludeFrequent(detector.excludeFrequent!); } - if (detector.hasOwnProperty('description')) { + if (Object.hasOwn(detector, 'description')) { await ml.jobWizardAdvanced.setDetectorDescription(detector.description!); } @@ -119,7 +119,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorEntryExists( index + previousDetectors.length, detector.identifier, - detector.hasOwnProperty('description') ? detector.description! : undefined + Object.hasOwn(detector, 'description') ? detector.description! : undefined ); } diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/date_nanos_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/date_nanos_job.ts index 864d89b2b08f3b..e5ffd4c193949b 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/date_nanos_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/date_nanos_job.ts @@ -134,21 +134,21 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation inputs the query delay'); await ml.jobWizardAdvanced.assertQueryDelayInputExists(); await ml.jobWizardAdvanced.assertQueryDelayValue(defaultValues.queryDelay); - if (testData.datafeedConfig.hasOwnProperty('queryDelay')) { + if (Object.hasOwn(testData.datafeedConfig, 'queryDelay')) { await ml.jobWizardAdvanced.setQueryDelay(testData.datafeedConfig.queryDelay!); } await ml.testExecution.logTestStep('job creation inputs the frequency'); await ml.jobWizardAdvanced.assertFrequencyInputExists(); await ml.jobWizardAdvanced.assertFrequencyValue(defaultValues.frequency); - if (testData.datafeedConfig.hasOwnProperty('frequency')) { + if (Object.hasOwn(testData.datafeedConfig, 'frequency')) { await ml.jobWizardAdvanced.setFrequency(testData.datafeedConfig.frequency!); } await ml.testExecution.logTestStep('job creation inputs the scroll size'); await ml.jobWizardAdvanced.assertScrollSizeInputExists(); await ml.jobWizardAdvanced.assertScrollSizeValue(defaultValues.scrollSize); - if (testData.datafeedConfig.hasOwnProperty('scrollSize')) { + if (Object.hasOwn(testData.datafeedConfig, 'scrollSize')) { await ml.jobWizardAdvanced.setScrollSize(testData.datafeedConfig.scrollSize!); } @@ -161,7 +161,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.testExecution.logTestStep('job creation selects the summary count field'); await ml.jobWizardAdvanced.assertSummaryCountFieldInputExists(); - if (testData.pickFieldsConfig.hasOwnProperty('summaryCountField')) { + if (Object.hasOwn(testData.pickFieldsConfig, 'summaryCountField')) { await ml.jobWizardAdvanced.selectSummaryCountField( testData.pickFieldsConfig.summaryCountField! ); @@ -188,22 +188,22 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorDescriptionValue(''); await ml.jobWizardAdvanced.selectDetectorFunction(detector.function); - if (detector.hasOwnProperty('field')) { + if (Object.hasOwn(detector, 'field')) { await ml.jobWizardAdvanced.selectDetectorField(detector.field!); } - if (detector.hasOwnProperty('byField')) { + if (Object.hasOwn(detector, 'byField')) { await ml.jobWizardAdvanced.selectDetectorByField(detector.byField!); } - if (detector.hasOwnProperty('overField')) { + if (Object.hasOwn(detector, 'overField')) { await ml.jobWizardAdvanced.selectDetectorOverField(detector.overField!); } - if (detector.hasOwnProperty('partitionField')) { + if (Object.hasOwn(detector, 'partitionField')) { await ml.jobWizardAdvanced.selectDetectorPartitionField(detector.partitionField!); } - if (detector.hasOwnProperty('excludeFrequent')) { + if (Object.hasOwn(detector, 'excludeFrequent')) { await ml.jobWizardAdvanced.selectDetectorExcludeFrequent(detector.excludeFrequent!); } - if (detector.hasOwnProperty('description')) { + if (Object.hasOwn(detector, 'description')) { await ml.jobWizardAdvanced.setDetectorDescription(detector.description!); } @@ -215,7 +215,7 @@ export default function ({ getService }: FtrProviderContext) { await ml.jobWizardAdvanced.assertDetectorEntryExists( index, detector.identifier, - detector.hasOwnProperty('description') ? detector.description! : undefined + Object.hasOwn(detector, 'description') ? detector.description! : undefined ); } diff --git a/x-pack/test/functional/page_objects/infra_logs_page.ts b/x-pack/test/functional/page_objects/infra_logs_page.ts index 8a39f01e4ae27d..778acfc5fe4806 100644 --- a/x-pack/test/functional/page_objects/infra_logs_page.ts +++ b/x-pack/test/functional/page_objects/infra_logs_page.ts @@ -38,7 +38,7 @@ export function InfraLogsPageProvider({ getPageObjects, getService }: FtrProvide const parsedParams: Record = {}; for (const key in params) { - if (params.hasOwnProperty(key)) { + if (Object.hasOwn(params, key)) { const value = params[key]; parsedParams[key] = encode(value); } diff --git a/x-pack/test/functional/page_objects/uptime_page.ts b/x-pack/test/functional/page_objects/uptime_page.ts index 531e0e59802556..07c7e25edd975f 100644 --- a/x-pack/test/functional/page_objects/uptime_page.ts +++ b/x-pack/test/functional/page_objects/uptime_page.ts @@ -92,7 +92,7 @@ export class UptimePageObject extends FtrService { public async selectFilterItems(filters: Record) { for (const key in filters) { - if (filters.hasOwnProperty(key)) { + if (Object.hasOwn(filters, key)) { const values = filters[key]; for (let i = 0; i < values.length; i++) { await this.commonService.selectFilterItem(key, values[i]); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts index f27502dcd2badc..8e45d23d35433f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/investigations/timelines/esql/discover_timeline_state_integration.cy.ts @@ -58,12 +58,12 @@ const esqlQuery = 'from auditbeat-* | where ecs.version == "8.0.0"'; const handleIntercepts = () => { cy.intercept('PATCH', '/api/timeline', (req) => { - if (req.body.hasOwnProperty('timeline') && req.body.timeline.savedSearchId === null) { + if (Object.hasOwn(req.body, 'timeline') && req.body.timeline.savedSearchId === null) { req.alias = TIMELINE_PATCH_REQ; } }); cy.intercept('PATCH', '/api/timeline', (req) => { - if (req.body.hasOwnProperty('timeline') && req.body.timeline.savedSearchId !== null) { + if (Object.hasOwn(req.body, 'timeline') && req.body.timeline.savedSearchId !== null) { req.alias = TIMELINE_REQ_WITH_SAVED_SEARCH; } }); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/index_management/settings.ts b/x-pack/test_serverless/api_integration/test_suites/common/index_management/settings.ts index b54393da6f6f70..a2c10a39a3859f 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/index_management/settings.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/index_management/settings.ts @@ -49,7 +49,7 @@ export default function ({ getService }: FtrProviderContext) { // Make sure none of the settings have been removed from ES API expectedSettings.forEach((setting) => { try { - expect(body.defaults.index.hasOwnProperty(setting)).to.eql(true); + expect(Object.hasOwn(body.defaults.index, setting)).to.eql(true); } catch { throw new Error(`Expected setting "${setting}" not found.`); } From 571fe047c1011be1b94a1b18906aa7a5142f4eac Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 13 Aug 2024 09:38:24 -0600 Subject: [PATCH 10/92] react control group: implement reload (#190366) PR adds reload implementation for react control group. --- .../react_control_example.tsx | 7 +++++++ .../control_group/get_control_group_factory.tsx | 2 ++ .../public/react_controls/control_group/types.ts | 3 ++- .../options_list_control/fetch_and_validate.tsx | 9 +++++++++ .../options_list_fetch_cache.ts | 4 ++++ .../get_range_slider_control_factory.tsx | 1 + .../data_controls/range_slider/min_max.ts | 15 +++++++++++++-- 7 files changed, 38 insertions(+), 3 deletions(-) diff --git a/examples/controls_example/public/app/react_control_example/react_control_example.tsx b/examples/controls_example/public/app/react_control_example/react_control_example.tsx index 9436adc208ebdf..690c33d0aad977 100644 --- a/examples/controls_example/public/app/react_control_example/react_control_example.tsx +++ b/examples/controls_example/public/app/react_control_example/react_control_example.tsx @@ -99,6 +99,9 @@ export const ReactControlExample = ({ const saveNotification$ = useMemo(() => { return new Subject(); }, []); + const reload$ = useMemo(() => { + return new Subject(); + }, []); const [dataLoading, timeRange, viewMode] = useBatchedPublishingSubjects( dataLoading$, timeRange$, @@ -138,6 +141,7 @@ export const ReactControlExample = ({ }, lastUsedDataViewId: new BehaviorSubject(WEB_LOGS_DATA_VIEW_ID), saveNotification$, + reload$, }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); @@ -381,6 +385,9 @@ export const ReactControlExample = ({ to: end, }); }} + onRefresh={() => { + reload$.next(); + }} /> & PublishesControlGroupDisplaySettings & PublishesTimeslice & - Partial & HasSaveNotification> & { + Partial & HasSaveNotification & PublishesReload> & { asyncResetUnsavedChanges: () => Promise; autoApplySelections$: PublishingSubject; controlFetch$: (controlUuid: string) => Observable; diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx index 7b6db45a1ba2a3..f3633b13d3d1a8 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx +++ b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/fetch_and_validate.tsx @@ -11,12 +11,15 @@ import { combineLatest, debounceTime, Observable, + of, + startWith, switchMap, tap, withLatestFrom, } from 'rxjs'; import { PublishingSubject } from '@kbn/presentation-publishing'; +import { apiPublishesReload } from '@kbn/presentation-publishing/interfaces/fetch/publishes_reload'; import { OptionsListSuccessResponse } from '../../../../../common/options_list/types'; import { isValidSearch } from '../../../../../common/options_list/is_valid_search'; import { OptionsListSelection } from '../../../../../common/options_list/options_list_selections'; @@ -57,6 +60,12 @@ export function fetchAndValidate$({ stateManager.searchTechnique, // cannot use requestSize directly, because we need to be able to reset the size to the default without refetching api.loadMoreSubject.pipe(debounceTime(100)), // debounce load more so "loading" state briefly shows + apiPublishesReload(api.parentApi) + ? api.parentApi.reload$.pipe( + tap(() => requestCache.clearCache()), + startWith(undefined) + ) + : of(undefined), ]).pipe( tap(() => { // abort any in progress requests diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts index 7b30504e3ab1ce..6a4bc779a61a27 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts +++ b/src/plugins/controls/public/react_controls/controls/data_controls/options_list_control/options_list_fetch_cache.ts @@ -119,4 +119,8 @@ export class OptionsListFetchCache { return result; } } + + public clearCache = () => { + this.cache.reset(); + }; } diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/get_range_slider_control_factory.tsx b/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/get_range_slider_control_factory.tsx index cc953e3109a07d..a2819460d05c95 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/get_range_slider_control_factory.tsx +++ b/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/get_range_slider_control_factory.tsx @@ -144,6 +144,7 @@ export const getRangesliderControlFactory = ( } loadingMinMax$.next(isLoading); }, + controlGroupApi, }).subscribe( ({ error, diff --git a/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/min_max.ts b/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/min_max.ts index 54ee8bf68031d3..e68a83eaa4f132 100644 --- a/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/min_max.ts +++ b/src/plugins/controls/public/react_controls/controls/data_controls/range_slider/min_max.ts @@ -11,24 +11,35 @@ import { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { DataView, DataViewField } from '@kbn/data-views-plugin/public'; import { AggregateQuery, Filter, Query, TimeRange } from '@kbn/es-query'; import { PublishesDataViews, PublishingSubject } from '@kbn/presentation-publishing'; -import { combineLatest, lastValueFrom, Observable, switchMap, tap } from 'rxjs'; +import { combineLatest, lastValueFrom, Observable, of, startWith, switchMap, tap } from 'rxjs'; +import { apiPublishesReload } from '@kbn/presentation-publishing/interfaces/fetch/publishes_reload'; import { ControlFetchContext } from '../../../control_group/control_fetch'; +import { ControlGroupApi } from '../../../control_group/types'; export function minMax$({ controlFetch$, + controlGroupApi, data, dataViews$, fieldName$, setIsLoading, }: { controlFetch$: Observable; + controlGroupApi: ControlGroupApi; data: DataPublicPluginStart; dataViews$: PublishesDataViews['dataViews']; fieldName$: PublishingSubject; setIsLoading: (isLoading: boolean) => void; }) { let prevRequestAbortController: AbortController | undefined; - return combineLatest([controlFetch$, dataViews$, fieldName$]).pipe( + return combineLatest([ + controlFetch$, + dataViews$, + fieldName$, + apiPublishesReload(controlGroupApi) + ? controlGroupApi.reload$.pipe(startWith(undefined)) + : of(undefined), + ]).pipe( tap(() => { if (prevRequestAbortController) { prevRequestAbortController.abort(); From 8ee04937fef4334b831f6ae0336404e315a17989 Mon Sep 17 00:00:00 2001 From: Andrew Macri Date: Tue, 13 Aug 2024 11:46:20 -0400 Subject: [PATCH 11/92] [Security Solution] [Attack discovery] Attack Discovery RBAC / Display an upgrade CTA for the serverless essentials product tier (#188788) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [Security Solution] [Attack discovery] Attack Discovery RBAC / Display an upgrade CTA for the serverless essentials product tier ### Summary This PR adds Role Based Access Control (RBAC) to Attack discovery. Security users may enable or disable the new `Attack Discovery` RBAC feature shown in the figure below: ![rbac](https://github.com/user-attachments/assets/2ca3de6e-3e87-401f-8a06-0eb06d36d081) _Above: The new `Attack discovery` RBAC feature_ It is possible to for example, configure a custom role that enables Attack discovery, but disables the assistant, as illustrated by the table below: | Role | License | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |-------------------------------------------|------------|--------------------|-------------|--------------------|---------------------------| | `has_attack_discovery_all_assistant_none` | Basic | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_none` | Trial | ✅ | ❌ | ❌ | ❌ | | `has_attack_discovery_all_assistant_none` | Platinum | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_none` | Enterprise | ✅ | ❌ | ❌ | ❌ | _Above: An example role that enables Attack discovery, but disables the assistant_ See the `Desk Testing` section of this PR for details. This PR also fixes an issue where Attack discovery does not display an upgrade call to action (CTA) for the serverless _essentials_ product tier, per the before and after screenshots below: #### Before ![serverless_essentials_before](https://github.com/user-attachments/assets/90e8f433-896d-40a3-b095-8f0cca0f7073) _Above: Before the fix, an upgrade CTA is NOT displayed for the serverless essentials product tier_ #### After ![serverless_essentials_after](https://github.com/user-attachments/assets/4cdd146e-afac-4f3e-925b-4786e1908312) _Above: After the fix, an upgrade CTA is displayed for the serverless essentials product tier_ The fix above is implemented by adopting the upselling framework. ### New Feature ID This PR adds a new Feature ID for attack discovery: ```typescript export const ATTACK_DISCOVERY_FEATURE_ID = 'securitySolutionAttackDiscovery' as const; ``` in `x-pack/packages/security-solution/features/src/constants.ts` ### Upselling framework usage This PR updates the Attack discovery page to use the upselling framework via the following summarized steps: 1. Removed the branching logic from `x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.tsx`, and moved the component to an upselling `section` component in `x-pack/packages/security-solution/upselling/sections/attack_discovery/index.tsx`, where the component was renamed to `AttackDiscoveryUpsellingSection`. This `section` component handles (just) the styling of the upselling message and actions (by itself, without the page wrapper), and receives the following props: ```typescript interface Props { actions?: React.ReactNode; availabilityMessage: string; upgradeMessage: string; } ``` The self managed and serverless-specific actions and `i18n` messages are passed down via the components described in the later steps below. 2. Removed all previous references to the `Upgrade` component (and references to `useProductTypes`) from the Attack discovery page in `x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx`, because the framework manages the upgrade case instead of the page itself. 3. Created an upselling `page` component `AttackDiscoveryUpsellingPage` in `x-pack/packages/security-solution/upselling/pages/attack_discovery/index.tsx`. This component handles (just) the styling of the _page_ that wraps the Attack discovery `section`. It passes the same props to the previously described `AttackDiscoveryUpsellingSection` component. 4. Created a self-managed-specific `AttackDiscoveryUpsellingPageESS` component in `x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.tsx` This component passes self-managed-specific upgrade action buttons / links and `i18n` strings to the previously described `AttackDiscoveryUpsellingPage` 5. Also for self managed, added a new `AttackDiscoveryUpsellingPageLazy` component to the existing file: `x-pack/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx` This component lazy loads the previously described `AttackDiscoveryUpsellingPageESS` component. 6. Added registration for the previously described `AttackDiscoveryUpsellingPageLazy` component to the existing `UpsellingPages` section in `x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.tsx` with a `minimumLicenseRequired` of `enterprise`: ``` minimumLicenseRequired: 'enterprise', ``` 7. Created a serverless-specific `AttackDiscoveryUpsellingPageServerless` component in `x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.tsx` This component passes serverless-specific `i18n` messages to the platform agnostic `AttackDiscoveryUpsellingPage` component. 8. Also for serverless, added a new `AttackDiscoveryUpsellingPageLazy` component to the existing file: `x-pack/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx` 9. Added registration for the previously described `AttackDiscoveryUpsellingPageLazy` component to the existing `upsellingPages` section in `x-pack/plugins/security_solution_serverless/public/upselling/upsellings.tsx` with the `assistant` PLI: ``` pli: ProductFeatureKey.assistant, ``` 10. Added the `${ASSISTANT_FEATURE_ID}.ai-assistant` capability as an OR condition (via nested array, per the [framework](https://github.com/elastic/kibana/blob/main/x-pack/plugins/security_solution/public/common/lib/capabilities/has_capabilities.ts#L11-L22)) to the Attack discovery link in `x-pack/plugins/security_solution/public/attack_discovery/links.ts`. This addition enables the security route wrapper to check for upselling pages in serverless: ``` capabilities: [[`${SERVER_APP_ID}.show`, `${ASSISTANT_FEATURE_ID}.ai-assistant`]], ``` 11. Added `licenseType: 'enterprise'` to the Attack discovery link in `x-pack/plugins/security_solution/public/attack_discovery/links.ts` to require an `enterprise` license for self managed ### Upgrade CTA gallery The screenshots in this section document the CTA (or Welcome message when the feature is licensed) displayed for various license levels after the fix: #### Users with the `None` privilege If users with the `None` privilege manually enter an Attack discovery URL, e.g. `http://localhost:5601/app/security/attack_discovery`, the framework will display the following error prompt: ![privelages_required](https://github.com/user-attachments/assets/d282609e-5400-4ba9-8130-de5e10f8973d) #### Self managed BASIC ![self_managed_basic_after](https://github.com/user-attachments/assets/048b2a3b-9e2d-4b95-a697-c739ea2dc5bb) #### Self managed PLATINUM ![self_managed_platinum_after](https://github.com/user-attachments/assets/d7c49551-a8cf-4afb-b3bf-c3243e892219) #### Self managed TRIAL ![self_managed_trial_after](https://github.com/user-attachments/assets/d5cc03a9-97aa-4c78-a5f5-92e5af3a85ac) #### Self managed ENTERPRISE ![self_managed_enterprise_after](https://github.com/user-attachments/assets/a849b534-7e07-4481-9641-c48dee126466) #### Serverless ESSENTIALS ![serverless_essentials_after](https://github.com/user-attachments/assets/4cdd146e-afac-4f3e-925b-4786e1908312) #### Serverless COMPLETE ![serverless_complete_after](https://github.com/user-attachments/assets/8cab60c3-dea6-4d7a-b86a-b2cd11c9b4dd) ## Desk Testing ### Severless: Desk testing (just) the upgrade CTA Reproduction steps: 1) Comment-out any preconfigured connectors in `config/kibana.dev.yml` 2) Edit the configuration of `config/serverless.security.yml` to enable the `essentials` product tier: ```yaml xpack.securitySolutionServerless.productTypes: [ { product_line: 'security', product_tier: 'essentials' } ] ``` 3) Start Elasticsearch ```sh yarn es serverless --projectType security ``` 4) Start a development instance of Kibana ``` yarn start --serverless=security --no-base-path ``` 5) Navigate to Security > Attack discovery **Expected result** - An upgrade CTA is displayed, as illustrated by the _after_ screenshot below: ![serverless_essentials_after](https://github.com/user-attachments/assets/4cdd146e-afac-4f3e-925b-4786e1908312) - The video tour is NOT displayed for serverless, as noted in the [original PR](https://github.com/elastic/kibana/pull/182605#issuecomment-2100607857) **Actual result** - An upgrade CTA is NOT displayed, as illustrated by the _before_ screenshot below: ![serverless_essentials_before](https://github.com/user-attachments/assets/90e8f433-896d-40a3-b095-8f0cca0f7073) ### Desk testing Self Managed To desk test self manged, we will: 1) Create (three) roles for testing 2) Create (three) users assigned to the roles 3) Test each role at `Basic`, `Trial`, `Platinum`, and `Enterprise` levels to verify: - `Attack discovery` link visibility in the Security solution navigation - Visibility of the upsell empty prompt for license levels where Attack discovery is unavailable - The upsell empty prompt includes the `Subscription plans` and `Manage license` actions - When Attack discoveries are generated, the `View in Ai Assistant` button and popover menu action are enabled / disabled, based on availability of the `AI Assistant` feature #### Creating (three) roles for testing In this section, we will start a new (development) self managed deployment, and create the following three roles via Kibana Dev Tools: - `has_attack_discovery_all_assistant_all` - `has_attack_discovery_all_assistant_none` - `has_attack_discovery_none_assistant_all` To start the deployment and create the roles: 1) Add a pre-configured GenAI connector to `config/kibana.dev.yml` 2) Start a new (development) instance of Elasticsearch: ```sh yarn es snapshot -E path.data=/Users/$USERNAME/data-2024-07-31a ``` 3) Start a local (development) instance of Kibana: ``` yarn start --no-base-path ```` 4) Login to Kibana as the `elastic` user 5) Generate some alerts 6) Navigate to Dev Tools 7) Execute the following three API calls to create the roles:

PUT /_security/role/has_attack_discovery_all_assistant_all

``` ts PUT /_security/role/has_attack_discovery_all_assistant_all { "cluster": [ "all" ], "indices": [ { "names": [ "*" ], "privileges": [ "all" ], "field_security": { "grant": [ "*" ], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_securitySolutionAssistant.minimal_all", "feature_securitySolutionAttackDiscovery.minimal_all", "feature_siem.all", "feature_securitySolutionCases.all", "feature_actions.all" ], "resources": [ "*" ] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ```

PUT /_security/role/has_attack_discovery_all_assistant_none

``` ts PUT /_security/role/has_attack_discovery_all_assistant_none { "cluster": [ "all" ], "indices": [ { "names": [ "*" ], "privileges": [ "all" ], "field_security": { "grant": [ "*" ], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_securitySolutionAttackDiscovery.minimal_all", "feature_siem.all", "feature_securitySolutionCases.all", "feature_actions.all" ], "resources": [ "*" ] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ```

PUT /_security/role/has_attack_discovery_none_assistant_all

``` ts PUT /_security/role/has_attack_discovery_none_assistant_all { "cluster": [ "all" ], "indices": [ { "names": [ "*" ], "privileges": [ "all" ], "field_security": { "grant": [ "*" ], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_securitySolutionAssistant.minimal_all", "feature_siem.all", "feature_securitySolutionCases.all", "feature_actions.all" ], "resources": [ "*" ] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ```

#### Creating (three) users assigned to the roles In this section, we will create the following three users via Kibana Dev Tools using the API calls below (expand for details): - `attack_discovery_all_assistant_all` - `attack_discovery_all_assistant_none` - `attack_discovery_none_assistant_all` 1) Navigate to Dev Tools 2) Execute the following three API calls to create the users:
POST /_security/user/attack_discovery_all_assistant_all

``` ts POST /_security/user/attack_discovery_all_assistant_all { "username": "attack_discovery_all_assistant_all", "password": "changeme", "roles": [ "has_attack_discovery_all_assistant_all" ], "full_name": "Attack Discovery All Assistant All", "email": "user@example.com", "metadata": {}, "enabled": true } ```

POST /_security/user/attack_discovery_all_assistant_none

``` ts POST /_security/user/attack_discovery_all_assistant_none { "username": "attack_discovery_all_assistant_none", "password": "changeme", "roles": [ "has_attack_discovery_all_assistant_none" ], "full_name": "Attack Discovery All Assistant None", "email": "user@example.com", "metadata": {}, "enabled": true } ```

POST /_security/user/attack_discovery_none_assistant_all

``` ts POST /_security/user/attack_discovery_none_assistant_all { "username": "attack_discovery_none_assistant_all", "password": "changeme", "roles": [ "has_attack_discovery_none_assistant_all" ], "full_name": "Attack Discovery None Assistant All", "email": "user@example.com", "metadata": {}, "enabled": true } ```

#### Testing each role at `Basic`, `Trial`, `Platinum`, and `Enterprise` levels In this section, we will test each of the self managed `Basic`, `Trial`, `Platinum`, and `Enterprise` license levels with the three roles we created for testing. ##### Testing the `has_attack_discovery_all_assistant_all` role 1) Login as the `attack_discovery_all_assistant_all` user 2) Navigate to the Security solution 3) For each of the `Basic`, `Trial`, `Platinum`, and `Enterprise` levels, verify your observations match the expected behavior in the table below: | Role | License | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |------------------------------------------|------------|--------------------|-------------|--------------------|---------------------------| | `has_attack_discovery_all_assistant_all` | Basic | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_all` | Trial | ✅ | ❌ | ❌ | ✅ | | `has_attack_discovery_all_assistant_all` | Platinum | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_all` | Enterprise | ✅ | ❌ | ❌ | ✅ | ##### Testing the `has_attack_discovery_all_assistant_none` role 1) Login as the `attack_discovery_all_assistant_none` user 2) Navigate to the Security solution 3) For each of the `Basic`, `Trial`, `Platinum`, and `Enterprise` levels, verify your observations match the expected behavior in the table below: | Role | License | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |-------------------------------------------|------------|--------------------|-------------|--------------------|---------------------------| | `has_attack_discovery_all_assistant_none` | Basic | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_none` | Trial | ✅ | ❌ | ❌ | ❌ | | `has_attack_discovery_all_assistant_none` | Platinum | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_all_assistant_none` | Enterprise | ✅ | ❌ | ❌ | ❌ | ##### Testing the `has_attack_discovery_none_assistant_all` role 1) Login as the `attack_discovery_none_assistant_all` user 2) Navigate to the Security solution 3) For each of the `Basic`, `Trial`, `Platinum`, and `Enterprise` levels, verify your observations match the expected behavior in the table below: | Role | License | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |-------------------------------------------|------------|--------------------|-------------|--------------------|---------------------------| | `has_attack_discovery_none_assistant_all` | Basic | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_none_assistant_all` | Trial | ❌ | ❌ | ❌ | ❌ | | `has_attack_discovery_none_assistant_all` | Platinum | ✅ | ✅ | ✅ | ❌ | | `has_attack_discovery_none_assistant_all` | Enterprise | ❌ | ❌ | ❌ | ❌ | --------------------------------------------- ### Serverless Testing To desk test serverless, we will test the `essentials` and `complete` product tiers to verify: - `Attack discovery` link visibility in the Security project navigation - Visibility of the upsell empty prompt for license levels where Attack discovery is unavailable - The upsell empty prompt does NOT include the `Subscription plans` and `Manage license` actions - When Attack discoveries are generated, the `View in Ai Assistant` button and popover menu action are enabled #### Essentials tier testing 1) Add a pre-configured GenAI connector to `config/kibana.dev.yml` 2) Edit the configuration of `config/serverless.security.yml` to enable the `essentials` product tier: ```yaml xpack.securitySolutionServerless.productTypes: [ { product_line: 'security', product_tier: 'essentials' }, { product_line: 'endpoint', product_tier: 'essentials' }, ] ``` 2) Start a new (development) instance of Elasticsearch: ```sh yarn es serverless --clean --projectType security ``` 3) Start a local (development) instance of Kibana: ``` yarn start --serverless=security --no-base-path ```` 4) select the `admin` role 5) Generate some alerts 6) Verify your observations match the expected behavior in the table below: | Role | Tier | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |-------------------------------|------------|--------------------|-------------|--------------------|---------------------------| | `viewer` | essentials | ✅ | ✅ | ❌ | ❌ | | `editor` | essentials | ✅ | ✅ | ❌ | ❌ | | `t1_analyst` | essentials | ✅ | ✅ | ❌ | ❌ | | `t2_analyst` | essentials | ✅ | ✅ | ❌ | ❌ | | `t3_analyst` | essentials | ✅ | ✅ | ❌ | ❌ | | `threat_intelligence_analyst` | essentials | ✅ | ✅ | ❌ | ❌ | | `rule_author` | essentials | ✅ | ✅ | ❌ | ❌ | | `soc_manager` | essentials | ✅ | ✅ | ❌ | ❌ | | `detections_admin` | essentials | ✅ | ✅ | ❌ | ❌ | | `platform_engineer` | essentials | ✅ | ✅ | ❌ | ❌ | | `endpoint_operations_analyst` | essentials | ✅ | ✅ | ❌ | ❌ | | `endpoint_policy_manager` | essentials | ✅ | ✅ | ❌ | ❌ | | `admin` | essentials | ✅ | ✅ | ❌ | ❌ | | `system_indices_superuser` | essentials | ✅ | ✅ | ❌ | ❌ | ### Complete tier testing 1) Stop the running Kibana server (from the previous Essentials tier testing) 2) Edit the configuration of `config/serverless.security.yml` to enable the `complete` product tier: ```yaml xpack.securitySolutionServerless.productTypes: [ { product_line: 'security', product_tier: 'complete' }, { product_line: 'endpoint', product_tier: 'complete' }, ] ``` 3) Restart a local (development) instance of Kibana: ``` yarn start --serverless=security --no-base-path ```` 4) Verify your observations match the expected behavior in the table below: | Role | Tier | Navigation visible | Show upsell | Upsell has actions | View in assistant enabled | |-------------------------------|----------|--------------------|-------------|--------------------|---------------------------| | `viewer` | complete | ✅ | ❌ | ❌ | ✅ | | `editor` | complete | ✅ | ❌ | ❌ | ✅ | | `t1_analyst` | complete | ✅ | ❌ | ❌ | ✅ | | `t2_analyst` | complete | ✅ | ❌ | ❌ | ✅ | | `t3_analyst` | complete | ✅ | ❌ | ❌ | ✅ | | `threat_intelligence_analyst` | complete | ✅ | ❌ | ❌ | ✅ | | `rule_author` | complete | ✅ | ❌ | ❌ | ✅ | | `soc_manager` | complete | ✅ | ❌ | ❌ | ✅ | | `detections_admin` | complete | ✅ | ❌ | ❌ | ✅ | | `platform_engineer` | complete | ✅ | ❌ | ❌ | ✅ | | `endpoint_operations_analyst` | complete | ✅ | ❌ | ❌ | ✅ | | `endpoint_policy_manager` | complete | ✅ | ❌ | ❌ | ✅ | | `admin` | complete | ✅ | ❌ | ❌ | ✅ | | `system_indices_superuser` | complete | ✅ | ❌ | ❌ | ✅ | --- .../project_roles/security/roles.yml | 12 ++++ .../serverless_resources/security_roles.json | 7 +++ packages/kbn-optimizer/limits.yml | 2 +- .../action_type_selector_modal.tsx | 2 +- .../security-solution/features/config.ts | 1 + .../features/product_features.ts | 1 + .../features/src/attack_discovery/index.ts | 15 +++++ .../src/attack_discovery/kibana_features.ts | 48 ++++++++++++++ .../product_feature_config.ts | 33 ++++++++++ .../features/src/constants.ts | 1 + .../features/src/product_features_keys.ts | 11 +++- .../security-solution/features/src/types.ts | 6 ++ .../pages/attack_discovery/index.test.tsx | 56 +++++++++++++++++ .../pages/attack_discovery/index.tsx | 48 ++++++++++++++ .../page_title/index.test.tsx | 30 +++++++++ .../attack_discovery/page_title/index.tsx | 52 +++++++++++++++ .../page_title/translations.ts | 30 +++++++++ .../assistant_avatar/assistant_avatar.tsx | 47 ++++++++++++++ .../sections/attack_discovery/index.test.tsx | 61 ++++++++++++++++++ .../sections/attack_discovery}/index.tsx | 43 +++++++------ .../sections/attack_discovery/translations.ts | 15 +++++ .../security_solution/common/constants.ts | 1 + .../common/test/ess_roles.json | 3 + .../public/attack_discovery/links.test.ts | 22 +++++++ .../public/attack_discovery/links.ts | 10 ++- .../pages/empty_prompt/index.test.tsx | 24 ------- .../pages/empty_prompt/index.tsx | 6 +- .../pages/header/index.test.tsx | 26 -------- .../attack_discovery/pages/header/index.tsx | 4 +- .../attack_discovery/pages/index.test.tsx | 50 --------------- .../public/attack_discovery/pages/index.tsx | 25 ++------ .../pages/page_title/index.tsx | 21 ++++--- .../pages/upgrade/index.test.tsx | 63 ------------------- .../pages/upgrade/translations.ts | 36 ----------- .../public/attack_discovery/routes.tsx | 9 +-- .../use_attack_discovery/index.test.tsx | 39 ++++++++++-- .../use_attack_discovery/index.tsx | 9 ++- .../es_serverless_resources/roles.yml | 12 ++++ .../lib/product_features_service/mocks.ts | 24 +++++++ .../product_features_service.test.ts | 16 ++++- .../product_features_service.ts | 18 +++++- .../lib/product_features_service/types.ts | 1 + .../public/upselling/lazy_upselling.tsx | 6 ++ .../pages/attack_discovery/index.test.tsx | 56 +++++++++++++++++ .../pages/attack_discovery/index.tsx | 42 +++++++++++++ .../pages/attack_discovery/translations.ts | 22 +++++++ .../upgrade_actions/index.test.tsx | 57 +++++++++++++++++ .../upgrade_actions/index.tsx | 52 +++++++++++++++ .../upgrade_actions/translations.ts | 22 +++++++ .../upselling/register_upsellings.test.tsx | 20 ++++++ .../public/upselling/register_upsellings.tsx | 6 ++ ...ttack_discovery_product_features_config.ts | 41 ++++++++++++ .../server/product_features/index.ts | 2 + .../common/pli/pli_config.ts | 1 + .../public/upselling/lazy_upselling.tsx | 8 +++ .../pages/attack_discovery/index.test.tsx | 45 +++++++++++++ .../pages/attack_discovery/index.tsx | 31 +++++++++ .../pages/attack_discovery/translations.ts | 22 +++++++ .../public/upselling/upsellings.test.tsx | 21 +++++++ .../public/upselling/upsellings.tsx | 6 ++ .../server/plugin.ts | 1 + ...ttack_discovery_product_features_config.ts | 40 ++++++++++++ .../server/product_features/index.ts | 2 + .../translations/translations/fr-FR.json | 4 -- .../translations/translations/ja-JP.json | 4 -- .../translations/translations/zh-CN.json | 4 -- .../apis/features/features/features.ts | 1 + .../apis/security/privileges.ts | 1 + .../apis/security/privileges_basic.ts | 2 + .../cypress/tasks/privileges.ts | 4 ++ .../spaces_only/telemetry/telemetry.ts | 1 + .../security_and_spaces/tests/nav_links.ts | 3 +- .../project_controller_security_roles.yml | 12 ++++ 73 files changed, 1191 insertions(+), 288 deletions(-) create mode 100644 x-pack/packages/security-solution/features/src/attack_discovery/index.ts create mode 100644 x-pack/packages/security-solution/features/src/attack_discovery/kibana_features.ts create mode 100644 x-pack/packages/security-solution/features/src/attack_discovery/product_feature_config.ts create mode 100644 x-pack/packages/security-solution/upselling/pages/attack_discovery/index.test.tsx create mode 100644 x-pack/packages/security-solution/upselling/pages/attack_discovery/index.tsx create mode 100644 x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.test.tsx create mode 100644 x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.tsx create mode 100644 x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/translations.ts create mode 100644 x-pack/packages/security-solution/upselling/sections/attack_discovery/assistant_avatar/assistant_avatar.tsx create mode 100644 x-pack/packages/security-solution/upselling/sections/attack_discovery/index.test.tsx rename x-pack/{plugins/security_solution/public/attack_discovery/pages/upgrade => packages/security-solution/upselling/sections/attack_discovery}/index.tsx (63%) create mode 100644 x-pack/packages/security-solution/upselling/sections/attack_discovery/translations.ts create mode 100644 x-pack/plugins/security_solution/public/attack_discovery/links.test.ts delete mode 100644 x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/translations.ts create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.test.tsx create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.tsx create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/translations.ts create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.test.tsx create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.tsx create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/translations.ts create mode 100644 x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.test.tsx create mode 100644 x-pack/plugins/security_solution_ess/server/product_features/attack_discovery_product_features_config.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.test.tsx create mode 100644 x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.tsx create mode 100644 x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/translations.ts create mode 100644 x-pack/plugins/security_solution_serverless/public/upselling/upsellings.test.tsx create mode 100644 x-pack/plugins/security_solution_serverless/server/product_features/attack_discovery_product_features_config.ts diff --git a/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml b/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml index b05bb0de2f2c8d..3c008407d5c466 100644 --- a/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml +++ b/packages/kbn-es/src/serverless_resources/project_roles/security/roles.yml @@ -47,6 +47,7 @@ viewer: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -124,6 +125,7 @@ editor: - feature_siem.file_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -171,6 +173,7 @@ t1_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -224,6 +227,7 @@ t2_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -292,6 +296,7 @@ t3_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -352,6 +357,7 @@ threat_intelligence_analyst: - feature_siem.blocklist_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.all @@ -418,6 +424,7 @@ rule_author: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -488,6 +495,7 @@ soc_manager: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -546,6 +554,7 @@ detections_admin: - feature_siem.crud_alerts - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_dev_tools.all @@ -603,6 +612,7 @@ platform_engineer: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_fleet.all @@ -674,6 +684,7 @@ endpoint_operations_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -747,6 +758,7 @@ endpoint_policy_manager: - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all diff --git a/packages/kbn-es/src/serverless_resources/security_roles.json b/packages/kbn-es/src/serverless_resources/security_roles.json index 8ba9dc4c6bc739..0554853b82df93 100644 --- a/packages/kbn-es/src/serverless_resources/security_roles.json +++ b/packages/kbn-es/src/serverless_resources/security_roles.json @@ -34,6 +34,7 @@ "ml": ["read"], "siem": ["read", "read_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["read"], "actions": ["read"], "builtInAlerts": ["read"] @@ -80,6 +81,7 @@ "ml": ["read"], "siem": ["read", "read_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["read"], "actions": ["read"], "builtInAlerts": ["read"] @@ -145,6 +147,7 @@ ], "securitySolutionCases": ["all"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "actions": ["read"], "builtInAlerts": ["all"], "osquery": ["all"], @@ -201,6 +204,7 @@ "ml": ["read"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "actions": ["read"], "builtInAlerts": ["all"] @@ -253,6 +257,7 @@ "ml": ["read"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "actions": ["all"], "builtInAlerts": ["all"] @@ -300,6 +305,7 @@ "ml": ["all"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "actions": ["read"], "builtInAlerts": ["all"], @@ -354,6 +360,7 @@ "ml": ["all"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "actions": ["all"], "builtInAlerts": ["all"] diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 84055d662a65b0..0356fb4fd65413 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -144,7 +144,7 @@ pageLoadAssetSize: searchprofiler: 67080 security: 81771 securitySolution: 98429 - securitySolutionEss: 16573 + securitySolutionEss: 31781 securitySolutionServerless: 62488 serverless: 16573 serverlessObservability: 68747 diff --git a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/action_type_selector_modal.tsx b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/action_type_selector_modal.tsx index 83437bb7dc69b4..9e019d10140a49 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/action_type_selector_modal.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/connectorland/connector_selector_inline/action_type_selector_modal.tsx @@ -41,7 +41,7 @@ export const ActionTypeSelectorModal = React.memo( ({ actionTypes, actionTypeRegistry, onClose, onSelect, actionTypeSelectorInline }: Props) => { const content = useMemo( () => ( - + {actionTypes?.map((actionType: ActionType) => { const fullAction = actionTypeRegistry.get(actionType.id); return ( diff --git a/x-pack/packages/security-solution/features/config.ts b/x-pack/packages/security-solution/features/config.ts index 8f36393ffd5309..9fa14ab0ba7c26 100644 --- a/x-pack/packages/security-solution/features/config.ts +++ b/x-pack/packages/security-solution/features/config.ts @@ -8,5 +8,6 @@ export { securityDefaultProductFeaturesConfig } from './src/security/product_feature_config'; export { getCasesDefaultProductFeaturesConfig } from './src/cases/product_feature_config'; export { assistantDefaultProductFeaturesConfig } from './src/assistant/product_feature_config'; +export { attackDiscoveryDefaultProductFeaturesConfig } from './src/attack_discovery/product_feature_config'; export { createEnabledProductFeaturesConfigMap } from './src/helpers'; diff --git a/x-pack/packages/security-solution/features/product_features.ts b/x-pack/packages/security-solution/features/product_features.ts index b9209441cff858..b2c524ff6de1d6 100644 --- a/x-pack/packages/security-solution/features/product_features.ts +++ b/x-pack/packages/security-solution/features/product_features.ts @@ -8,3 +8,4 @@ export { getSecurityFeature } from './src/security'; export { getCasesFeature } from './src/cases'; export { getAssistantFeature } from './src/assistant'; +export { getAttackDiscoveryFeature } from './src/attack_discovery'; diff --git a/x-pack/packages/security-solution/features/src/attack_discovery/index.ts b/x-pack/packages/security-solution/features/src/attack_discovery/index.ts new file mode 100644 index 00000000000000..c72485c8f229e0 --- /dev/null +++ b/x-pack/packages/security-solution/features/src/attack_discovery/index.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getAttackDiscoveryBaseKibanaFeature } from './kibana_features'; +import type { ProductFeatureParams } from '../types'; + +export const getAttackDiscoveryFeature = (): ProductFeatureParams => ({ + baseKibanaFeature: getAttackDiscoveryBaseKibanaFeature(), + baseKibanaSubFeatureIds: [], + subFeaturesMap: new Map(), +}); diff --git a/x-pack/packages/security-solution/features/src/attack_discovery/kibana_features.ts b/x-pack/packages/security-solution/features/src/attack_discovery/kibana_features.ts new file mode 100644 index 00000000000000..130ee907b8e836 --- /dev/null +++ b/x-pack/packages/security-solution/features/src/attack_discovery/kibana_features.ts @@ -0,0 +1,48 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DEFAULT_APP_CATEGORIES } from '@kbn/core-application-common'; +import { i18n } from '@kbn/i18n'; + +import { APP_ID, ATTACK_DISCOVERY_FEATURE_ID } from '../constants'; +import { type BaseKibanaFeatureConfig } from '../types'; + +export const getAttackDiscoveryBaseKibanaFeature = (): BaseKibanaFeatureConfig => ({ + id: ATTACK_DISCOVERY_FEATURE_ID, + name: i18n.translate( + 'securitySolutionPackages.features.featureRegistry.linkSecuritySolutionAttackDiscoveryTitle', + { + defaultMessage: 'Attack discovery', + } + ), + order: 1100, + category: DEFAULT_APP_CATEGORIES.security, + app: [ATTACK_DISCOVERY_FEATURE_ID, 'kibana'], + catalogue: [APP_ID], + minimumLicense: 'enterprise', + privileges: { + all: { + api: ['elasticAssistant'], + app: [ATTACK_DISCOVERY_FEATURE_ID, 'kibana'], + catalogue: [APP_ID], + savedObject: { + all: [], + read: [], + }, + ui: [], + }, + read: { + // No read-only mode currently supported + disabled: true, + savedObject: { + all: [], + read: [], + }, + ui: [], + }, + }, +}); diff --git a/x-pack/packages/security-solution/features/src/attack_discovery/product_feature_config.ts b/x-pack/packages/security-solution/features/src/attack_discovery/product_feature_config.ts new file mode 100644 index 00000000000000..94af601307849e --- /dev/null +++ b/x-pack/packages/security-solution/features/src/attack_discovery/product_feature_config.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 { ProductFeatureAttackDiscoveryKey } from '../product_features_keys'; +import type { ProductFeatureKibanaConfig } from '../types'; + +/** + * App features privileges configuration for the Attack discovery feature. + * These are the configs that are shared between both offering types (ess and serverless). + * They can be extended on each offering plugin to register privileges using different way on each offering type. + * + * Privileges can be added in different ways: + * - `privileges`: the privileges that will be added directly into the main Security feature. + * - `subFeatureIds`: the ids of the sub-features that will be added into the Security subFeatures entry. + * - `subFeaturesPrivileges`: the privileges that will be added into the existing Security subFeature with the privilege `id` specified. + */ +export const attackDiscoveryDefaultProductFeaturesConfig: Record< + ProductFeatureAttackDiscoveryKey, + ProductFeatureKibanaConfig +> = { + [ProductFeatureAttackDiscoveryKey.attackDiscovery]: { + privileges: { + all: { + ui: ['attack-discovery'], + }, + }, + subFeatureIds: [], + }, +}; diff --git a/x-pack/packages/security-solution/features/src/constants.ts b/x-pack/packages/security-solution/features/src/constants.ts index c92376fd362095..5027a7c8d393be 100644 --- a/x-pack/packages/security-solution/features/src/constants.ts +++ b/x-pack/packages/security-solution/features/src/constants.ts @@ -11,6 +11,7 @@ export const SERVER_APP_ID = 'siem' as const; export const CASES_FEATURE_ID = 'securitySolutionCases' as const; export const ASSISTANT_FEATURE_ID = 'securitySolutionAssistant' as const; +export const ATTACK_DISCOVERY_FEATURE_ID = 'securitySolutionAttackDiscovery' as const; // Same as the plugin id defined by Cloud Security Posture export const CLOUD_POSTURE_APP_ID = 'csp' as const; diff --git a/x-pack/packages/security-solution/features/src/product_features_keys.ts b/x-pack/packages/security-solution/features/src/product_features_keys.ts index 9f1a268b6f6740..2bb8cdc0f1e9fe 100644 --- a/x-pack/packages/security-solution/features/src/product_features_keys.ts +++ b/x-pack/packages/security-solution/features/src/product_features_keys.ts @@ -93,17 +93,26 @@ export enum ProductFeatureAssistantKey { assistant = 'assistant', } +export enum ProductFeatureAttackDiscoveryKey { + /** + * Enables Attack discovery + */ + attackDiscovery = 'attack_discovery', +} + // Merges the two enums. export const ProductFeatureKey = { ...ProductFeatureSecurityKey, ...ProductFeatureCasesKey, ...ProductFeatureAssistantKey, + ...ProductFeatureAttackDiscoveryKey, }; // We need to merge the value and the type and export both to replicate how enum works. export type ProductFeatureKeyType = | ProductFeatureSecurityKey | ProductFeatureCasesKey - | ProductFeatureAssistantKey; + | ProductFeatureAssistantKey + | ProductFeatureAttackDiscoveryKey; export const ALL_PRODUCT_FEATURE_KEYS = Object.freeze(Object.values(ProductFeatureKey)); diff --git a/x-pack/packages/security-solution/features/src/types.ts b/x-pack/packages/security-solution/features/src/types.ts index 29778ed8cad7b2..17e4869fa66f1d 100644 --- a/x-pack/packages/security-solution/features/src/types.ts +++ b/x-pack/packages/security-solution/features/src/types.ts @@ -13,6 +13,7 @@ import type { import type { RecursivePartial } from '@kbn/utility-types'; import type { ProductFeatureAssistantKey, + ProductFeatureAttackDiscoveryKey, ProductFeatureCasesKey, ProductFeatureKeyType, ProductFeatureSecurityKey, @@ -51,6 +52,11 @@ export type ProductFeaturesAssistantConfig = Map< ProductFeatureKibanaConfig >; +export type ProductFeaturesAttackDiscoveryConfig = Map< + ProductFeatureAttackDiscoveryKey, + ProductFeatureKibanaConfig +>; + export type AppSubFeaturesMap = Map; export interface ProductFeatureParams { diff --git a/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.test.tsx b/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.test.tsx new file mode 100644 index 00000000000000..3301f27c740794 --- /dev/null +++ b/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.test.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { AttackDiscoveryUpsellingPage } from '.'; + +const availabilityMessage = 'This feature is available...'; +const upgradeMessage = 'Please upgrade...'; + +const mockActions =
; + +jest.mock('@kbn/security-solution-navigation', () => { + const original = jest.requireActual('@kbn/security-solution-navigation'); + return { + ...original, + useNavigation: () => ({ + navigateTo: jest.fn(), + }), + }; +}); + +describe('AttackDiscoveryUpsellingPage', () => { + beforeEach(() => { + render( + + ); + }); + + it('renders the availability message', () => { + const attackDiscoveryIsAvailable = screen.getByTestId('availabilityMessage'); + + expect(attackDiscoveryIsAvailable).toHaveTextContent(availabilityMessage); + }); + + it('renders the upgrade message', () => { + const pleaseUpgrade = screen.getByTestId('upgradeMessage'); + + expect(pleaseUpgrade).toHaveTextContent(upgradeMessage); + }); + + it('renders the actions', () => { + const actions = screen.getByTestId('mockActions'); + + expect(actions).toBeInTheDocument(); + }); +}); diff --git a/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.tsx b/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.tsx new file mode 100644 index 00000000000000..7d3353e6431e7b --- /dev/null +++ b/x-pack/packages/security-solution/upselling/pages/attack_discovery/index.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 { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import { EuiPageHeader, EuiSpacer } from '@elastic/eui'; +import React, { useMemo } from 'react'; + +import { PageTitle } from './page_title'; +import { AttackDiscoveryUpsellingSection } from '../../sections/attack_discovery'; + +interface Props { + actions?: React.ReactNode; + availabilityMessage: string; + upgradeMessage: string; +} + +/** + * This component handles the styling of the _page_ that hosts the `AttackDiscoveryUpsellingSection` + */ +const AttackDiscoveryUpsellingPageComponent: React.FC = ({ + actions, + availabilityMessage, + upgradeMessage, +}) => { + const pageTitle = useMemo(() => , []); + + return ( + + + + + + + + ); +}; + +AttackDiscoveryUpsellingPageComponent.displayName = 'AttackDiscoveryUpsellingPage'; + +export const AttackDiscoveryUpsellingPage = React.memo(AttackDiscoveryUpsellingPageComponent); diff --git a/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.test.tsx b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.test.tsx new file mode 100644 index 00000000000000..630000cecd5be0 --- /dev/null +++ b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.test.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { PageTitle } from '.'; +import { ATTACK_DISCOVERY_PAGE_TITLE } from './translations'; + +describe('PageTitle', () => { + beforeEach(() => { + render(); + }); + + it('renders the expected title', () => { + const attackDiscoveryPageTitle = screen.getByTestId('attackDiscoveryPageTitle'); + + expect(attackDiscoveryPageTitle).toHaveTextContent(ATTACK_DISCOVERY_PAGE_TITLE); + }); + + it('renders the beta badge icon', () => { + const betaBadge = screen.getByTestId('betaBadge'); + + expect(betaBadge).toBeInTheDocument(); + }); +}); diff --git a/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.tsx b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.tsx new file mode 100644 index 00000000000000..564488a0264ee7 --- /dev/null +++ b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/index.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiTitle, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; +import React from 'react'; + +import * as i18n from './translations'; + +const PageTitleComponent: React.FC = () => { + const { euiTheme } = useEuiTheme(); + + return ( + + + +

{i18n.ATTACK_DISCOVERY_PAGE_TITLE}

+
+
+ + + + +
+ ); +}; + +PageTitleComponent.displayName = 'PageTitle'; + +export const PageTitle = React.memo(PageTitleComponent); diff --git a/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/translations.ts b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/translations.ts new file mode 100644 index 00000000000000..7b3f3400e04438 --- /dev/null +++ b/x-pack/packages/security-solution/upselling/pages/attack_discovery/page_title/translations.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 { i18n } from '@kbn/i18n'; + +export const ATTACK_DISCOVERY_PAGE_TITLE = i18n.translate( + 'securitySolutionPackages.upselling.pages.attackDiscovery.pageTitle.pageTitle', + { + defaultMessage: 'Attack discovery', + } +); + +export const BETA = i18n.translate( + 'securitySolutionPackages.upselling.pages.attackDiscovery.pageTitle.betaBadge', + { + defaultMessage: 'Technical preview', + } +); + +export const BETA_TOOLTIP = i18n.translate( + 'securitySolutionPackages.upselling.pages.attackDiscovery.pageTitle.betaTooltip', + { + defaultMessage: + 'This functionality is in technical preview and is subject to change. Please use Attack Discovery with caution in production environments.', + } +); diff --git a/x-pack/packages/security-solution/upselling/sections/attack_discovery/assistant_avatar/assistant_avatar.tsx b/x-pack/packages/security-solution/upselling/sections/attack_discovery/assistant_avatar/assistant_avatar.tsx new file mode 100644 index 00000000000000..626c3a4126334a --- /dev/null +++ b/x-pack/packages/security-solution/upselling/sections/attack_discovery/assistant_avatar/assistant_avatar.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +interface Props { + className?: string; + size?: keyof typeof sizeMap; +} + +export const sizeMap = { + xl: 64, + l: 48, + m: 32, + s: 24, + xs: 16, + xxs: 12, +}; + +/** + * Default Elastic AI Assistant logo + * + * TODO: This may be removed when the logo is added to EUI + */ +export const AssistantAvatar = ({ className, size = 's' }: Props) => ( + + + + + + +); diff --git a/x-pack/packages/security-solution/upselling/sections/attack_discovery/index.test.tsx b/x-pack/packages/security-solution/upselling/sections/attack_discovery/index.test.tsx new file mode 100644 index 00000000000000..85795ae1195e11 --- /dev/null +++ b/x-pack/packages/security-solution/upselling/sections/attack_discovery/index.test.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { AttackDiscoveryUpsellingSection } from '.'; +import { FIND_POTENTIAL_ATTACKS_WITH_AI } from './translations'; + +const availabilityMessage = 'Serverless or self-managed-specific availability message'; +const upgradeMessage = 'Serverless or self-managed-specific upgrade message'; + +const mockActions = ( +
{'typically call to action buttons or links'}
+); + +describe('AttackDiscoveryUpsellingSection', () => { + beforeEach(() => { + render( + + ); + }); + + it('renders the assistant avatar', () => { + const assistantAvatar = screen.getByTestId('assistantAvatar'); + + expect(assistantAvatar).toBeInTheDocument(); + }); + + it('renders the expected upgrade title', () => { + const upgradeTitle = screen.getByTestId('upgradeTitle'); + + expect(upgradeTitle).toHaveTextContent(FIND_POTENTIAL_ATTACKS_WITH_AI); + }); + + it('renders the expected availability message', () => { + const attackDiscoveryIsAvailable = screen.getByTestId('availabilityMessage'); + + expect(attackDiscoveryIsAvailable).toHaveTextContent(availabilityMessage); + }); + + it('renders the expected upgrade message', () => { + const pleaseUpgrade = screen.getByTestId('upgradeMessage'); + + expect(pleaseUpgrade).toHaveTextContent(upgradeMessage); + }); + + it('renders the actions', () => { + const actions = screen.getByTestId('mockActions'); + + expect(actions).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.tsx b/x-pack/packages/security-solution/upselling/sections/attack_discovery/index.tsx similarity index 63% rename from x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.tsx rename to x-pack/packages/security-solution/upselling/sections/attack_discovery/index.tsx index bf2cd241408a11..0c6a12c88d7fd4 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.tsx +++ b/x-pack/packages/security-solution/upselling/sections/attack_discovery/index.tsx @@ -5,15 +5,27 @@ * 2.0. */ -import { AssistantAvatar, UpgradeButtons, useAssistantContext } from '@kbn/elastic-assistant'; import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText } from '@elastic/eui'; import React, { useMemo } from 'react'; +import { AssistantAvatar } from './assistant_avatar/assistant_avatar'; import * as i18n from './translations'; -const UpgradeComponent: React.FC = () => { - const { http } = useAssistantContext(); +interface Props { + actions?: React.ReactNode; + availabilityMessage: string; + upgradeMessage: string; +} +/** + * This `section` component handles (just) the styling of the upselling message + * (by itself, without the page wrapper) + */ +const AttackDiscoveryUpsellingSectionComponent: React.FC = ({ + actions, + availabilityMessage, + upgradeMessage, +}) => { const title = useMemo( () => ( @@ -38,33 +50,24 @@ const UpgradeComponent: React.FC = () => { () => ( - - {i18n.ATTACK_DISCOVERY_IS_AVAILABLE} + + {availabilityMessage} - - {i18n.PLEASE_UPGRADE} + + {upgradeMessage} ), - [] - ); - - const actions = useMemo( - () => ( - - - - - - ), - [http.basePath] + [availabilityMessage, upgradeMessage] ); return ; }; -export const Upgrade = React.memo(UpgradeComponent); +AttackDiscoveryUpsellingSectionComponent.displayName = 'AttackDiscoveryUpsellingSection'; + +export const AttackDiscoveryUpsellingSection = React.memo(AttackDiscoveryUpsellingSectionComponent); diff --git a/x-pack/packages/security-solution/upselling/sections/attack_discovery/translations.ts b/x-pack/packages/security-solution/upselling/sections/attack_discovery/translations.ts new file mode 100644 index 00000000000000..776aa19ebf207e --- /dev/null +++ b/x-pack/packages/security-solution/upselling/sections/attack_discovery/translations.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const FIND_POTENTIAL_ATTACKS_WITH_AI = i18n.translate( + 'securitySolutionPackages.upselling.sections.attackDiscovery.findPotentialAttacksWithAiTitle', + { + defaultMessage: 'Find potential attacks with AI', + } +); diff --git a/x-pack/plugins/security_solution/common/constants.ts b/x-pack/plugins/security_solution/common/constants.ts index 7357f484740797..5da9b87a4e267e 100644 --- a/x-pack/plugins/security_solution/common/constants.ts +++ b/x-pack/plugins/security_solution/common/constants.ts @@ -20,6 +20,7 @@ export { SecurityPageName } from '@kbn/security-solution-navigation'; export const APP_ID = 'securitySolution' as const; export const APP_UI_ID = 'securitySolutionUI' as const; export const ASSISTANT_FEATURE_ID = 'securitySolutionAssistant' as const; +export const ATTACK_DISCOVERY_FEATURE_ID = 'securitySolutionAttackDiscovery' as const; export const CASES_FEATURE_ID = 'securitySolutionCases' as const; export const SERVER_APP_ID = 'siem' as const; export const APP_NAME = 'Security' as const; diff --git a/x-pack/plugins/security_solution/common/test/ess_roles.json b/x-pack/plugins/security_solution/common/test/ess_roles.json index 9bf9e1b64aee32..94bd3d57a6d7b8 100644 --- a/x-pack/plugins/security_solution/common/test/ess_roles.json +++ b/x-pack/plugins/security_solution/common/test/ess_roles.json @@ -29,6 +29,7 @@ "ml": ["read"], "siem": ["read", "read_alerts"], "securitySolutionAssistant": ["none"], + "securitySolutionAttackDiscovery": ["none"], "securitySolutionCases": ["read"], "actions": ["read"], "builtInAlerts": ["read"] @@ -77,6 +78,7 @@ "ml": ["read"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "actions": ["read"], "builtInAlerts": ["all"] @@ -125,6 +127,7 @@ "ml": ["read"], "siem": ["all", "read_alerts", "crud_alerts"], "securitySolutionAssistant": ["all"], + "securitySolutionAttackDiscovery": ["all"], "securitySolutionCases": ["all"], "builtInAlerts": ["all"] }, diff --git a/x-pack/plugins/security_solution/public/attack_discovery/links.test.ts b/x-pack/plugins/security_solution/public/attack_discovery/links.test.ts new file mode 100644 index 00000000000000..01ccdf773c0819 --- /dev/null +++ b/x-pack/plugins/security_solution/public/attack_discovery/links.test.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 { ATTACK_DISCOVERY_FEATURE_ID } from '../../common/constants'; +import { SERVER_APP_ID } from '../../common'; +import { links } from './links'; + +describe('links', () => { + it('for serverless, it specifies capabilities as an AND condition, via a nested array', () => { + expect(links.capabilities).toEqual([ + [`${SERVER_APP_ID}.show`, `${ATTACK_DISCOVERY_FEATURE_ID}.attack-discovery`], + ]); + }); + + it('for self managed, it requires an enterprise license', () => { + expect(links.licenseType).toEqual('enterprise'); + }); +}); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/links.ts b/x-pack/plugins/security_solution/public/attack_discovery/links.ts index dd3e45dfefc8a1..531c0a1c486100 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/links.ts +++ b/x-pack/plugins/security_solution/public/attack_discovery/links.ts @@ -8,11 +8,16 @@ import { i18n } from '@kbn/i18n'; import { ATTACK_DISCOVERY } from '../app/translations'; -import { ATTACK_DISCOVERY_PATH, SecurityPageName, SERVER_APP_ID } from '../../common/constants'; +import { + ATTACK_DISCOVERY_FEATURE_ID, + ATTACK_DISCOVERY_PATH, + SecurityPageName, + SERVER_APP_ID, +} from '../../common/constants'; import type { LinkItem } from '../common/links/types'; export const links: LinkItem = { - capabilities: [`${SERVER_APP_ID}.show`], + capabilities: [[`${SERVER_APP_ID}.show`, `${ATTACK_DISCOVERY_FEATURE_ID}.attack-discovery`]], // This is an AND condition via the nested array globalNavPosition: 4, globalSearchKeywords: [ i18n.translate('xpack.securitySolution.appLinks.attackDiscovery', { @@ -20,6 +25,7 @@ export const links: LinkItem = { }), ], id: SecurityPageName.attackDiscovery, + licenseType: 'enterprise', path: ATTACK_DISCOVERY_PATH, title: ATTACK_DISCOVERY, }; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.test.tsx index 70acc1dbb2ca80..56b2205b28726f 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.test.tsx @@ -68,30 +68,6 @@ describe('EmptyPrompt', () => { }); }); - describe('when the user does NOT have the assistant privilege', () => { - it('disables the generate button when the user does NOT have the assistant privilege', () => { - (useAssistantAvailability as jest.Mock).mockReturnValue({ - hasAssistantPrivilege: false, // <-- the user does NOT have the assistant privilege - isAssistantEnabled: true, - }); - - render( - - - - ); - - const generateButton = screen.getByTestId('generate'); - - expect(generateButton).toBeDisabled(); - }); - }); - describe('when loading is true', () => { const isLoading = true; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.tsx index 3a616c299ecc51..75c8533efcc920 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/empty_prompt/index.tsx @@ -21,7 +21,6 @@ import { import { css } from '@emotion/react'; import React, { useMemo } from 'react'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; import { AnimatedCounter } from './animated_counter'; import * as i18n from './translations'; @@ -39,7 +38,6 @@ const EmptyPromptComponent: React.FC = ({ onGenerate, }) => { const { euiTheme } = useEuiTheme(); - const { hasAssistantPrivilege } = useAssistantAvailability(); const title = useMemo( () => ( = ({ ); const actions = useMemo(() => { - const disabled = !hasAssistantPrivilege || isLoading || isDisabled; + const disabled = isLoading || isDisabled; return ( = ({ ); - }, [hasAssistantPrivilege, isDisabled, isLoading, onGenerate]); + }, [isDisabled, isLoading, onGenerate]); return ( { expect(onGenerate).toHaveBeenCalled(); }); - it('disables the generate button when the user does NOT have the assistant privilege', () => { - (useAssistantAvailability as jest.Mock).mockReturnValue({ - hasAssistantPrivilege: false, - isAssistantEnabled: true, - }); - - render( - -
- - ); - - const generate = screen.getByTestId('generate'); - - expect(generate).toBeDisabled(); - }); - it('displays the cancel button when loading', () => { const isLoading = true; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.tsx index fa4a9caa3dcb1f..583bcc25d0eb6d 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/header/index.tsx @@ -14,7 +14,6 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import type { AttackDiscoveryStats } from '@kbn/elastic-assistant-common'; import { StatusBell } from './status_bell'; -import { useAssistantAvailability } from '../../../assistant/use_assistant_availability'; import * as i18n from './translations'; interface Props { @@ -38,9 +37,8 @@ const HeaderComponent: React.FC = ({ onCancel, stats, }) => { - const { hasAssistantPrivilege } = useAssistantAvailability(); const { euiTheme } = useEuiTheme(); - const disabled = !hasAssistantPrivilege || connectorId == null; + const disabled = connectorId == null; const [didCancel, setDidCancel] = useState(false); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.test.tsx index f27f8d448bbd3f..97f98b81dc1534 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.test.tsx @@ -9,7 +9,6 @@ import { mockCasesContext } from '@kbn/cases-plugin/public/mocks/mock_cases_cont import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub'; -import type { AssistantAvailability } from '@kbn/elastic-assistant'; import { UpsellingService } from '@kbn/security-solution-upselling/service'; import { Router } from '@kbn/shared-ux-router'; import { render, screen } from '@testing-library/react'; @@ -17,7 +16,6 @@ import React from 'react'; import { useLocalStorage } from 'react-use'; import { TestProviders } from '../../common/mock'; -import { MockAssistantProvider } from '../../common/mock/mock_assistant_provider'; import { ATTACK_DISCOVERY_PATH } from '../../../common/constants'; import { mockHistory } from '../../common/utils/route/mocks'; import { AttackDiscoveryPage } from '.'; @@ -551,52 +549,4 @@ describe('AttackDiscovery', () => { expect(screen.queryByTestId('upgrade')).toBeNull(); }); }); - - describe('when the user does not have an Enterprise license', () => { - const assistantUnavailable: AssistantAvailability = { - hasAssistantPrivilege: false, - hasConnectorsAllPrivilege: true, - hasConnectorsReadPrivilege: true, - hasUpdateAIAssistantAnonymization: false, - isAssistantEnabled: false, // <-- non-Enterprise license - }; - - beforeEach(() => { - render( - - - - - - - - - - ); - }); - - it('does NOT render the animated logo', () => { - expect(screen.queryByTestId('animatedLogo')).toBeNull(); - }); - - it('does NOT render the header', () => { - expect(screen.queryByTestId('header')).toBeNull(); - }); - - it('does NOT render the summary', () => { - expect(screen.queryByTestId('summary')).toBeNull(); - }); - - it('does NOT render attack discoveries', () => { - expect(screen.queryAllByTestId('attackDiscovery')).toHaveLength(0); - }); - - it('does NOT render the loading callout', () => { - expect(screen.queryByTestId('loadingCallout')).toBeNull(); - }); - - it('renders the upgrade call to action', () => { - expect(screen.getByTestId('upgrade')).toBeInTheDocument(); - }); - }); }); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx index 9a5c311b5494f1..f3981696b3e806 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/index.tsx @@ -18,7 +18,6 @@ import { uniq } from 'lodash/fp'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useLocalStorage } from 'react-use'; -import { SecurityRoutePageWrapper } from '../../common/components/security_route_page_wrapper'; import { SecurityPageName } from '../../../common/constants'; import { HeaderPage } from '../../common/components/header_page'; import { useSpaceId } from '../../common/hooks/use_space_id'; @@ -35,17 +34,12 @@ import { EmptyStates } from './empty_states'; import { LoadingCallout } from './loading_callout'; import { PageTitle } from './page_title'; import { Summary } from './summary'; -import { Upgrade } from './upgrade'; import { useAttackDiscovery } from '../use_attack_discovery'; const AttackDiscoveryPageComponent: React.FC = () => { const spaceId = useSpaceId() ?? 'default'; - const { - assistantAvailability: { isAssistantEnabled }, - http, - knowledgeBase, - } = useAssistantContext(); + const { http, knowledgeBase } = useAssistantContext(); const { data: aiConnectors } = useLoadConnectors({ http, }); @@ -144,18 +138,10 @@ const AttackDiscoveryPageComponent: React.FC = () => { }, [aiConnectors]); const animatedLogo = useMemo(() => , []); + const connectorsAreConfigured = aiConnectors != null && aiConnectors.length > 0; const attackDiscoveriesCount = selectedConnectorAttackDiscoveries.length; - if (!isAssistantEnabled) { - return ( - <> - - - - ); - } - return (
{ `} data-test-subj="fullHeightContainer" > - +
{ )} - +
); }; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx index f5bab1cbdf87aa..65e07aa726d119 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx @@ -15,7 +15,13 @@ const PageTitleComponent: React.FC = () => { const { euiTheme } = useEuiTheme(); return ( - +

{i18n.ATTACK_DISCOVERY_PAGE_TITLE}

@@ -23,14 +29,10 @@ const PageTitleComponent: React.FC = () => {
{ size="m" color="hollow" css={css` - margin-bottom: ${euiTheme.size.s}; + .euiBetaBadge__icon { + position: relative; + top: 5px; + } `} /> diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.test.tsx deleted file mode 100644 index e72f53e9062d7a..00000000000000 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/index.test.tsx +++ /dev/null @@ -1,63 +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 { render, screen } from '@testing-library/react'; -import React from 'react'; - -import { Upgrade } from '.'; -import { TestProviders } from '../../../common/mock'; -import { - ATTACK_DISCOVERY_IS_AVAILABLE, - FIND_POTENTIAL_ATTACKS_WITH_AI, - PLEASE_UPGRADE, -} from './translations'; - -describe('Upgrade', () => { - beforeEach(() => { - render( - - - - ); - }); - - it('renders the assistant avatar', () => { - const assistantAvatar = screen.getByTestId('assistantAvatar'); - - expect(assistantAvatar).toBeInTheDocument(); - }); - - it('renders the expected upgrade title', () => { - const upgradeTitle = screen.getByTestId('upgradeTitle'); - - expect(upgradeTitle).toHaveTextContent(FIND_POTENTIAL_ATTACKS_WITH_AI); - }); - - it('renders the attack discovery availability text', () => { - const attackDiscoveryIsAvailable = screen.getByTestId('attackDiscoveryIsAvailable'); - - expect(attackDiscoveryIsAvailable).toHaveTextContent(ATTACK_DISCOVERY_IS_AVAILABLE); - }); - - it('renders the please upgrade text', () => { - const pleaseUpgrade = screen.getByTestId('pleaseUpgrade'); - - expect(pleaseUpgrade).toHaveTextContent(PLEASE_UPGRADE); - }); - - it('renders the upgrade subscription plans (docs) link', () => { - const upgradeDocs = screen.getByRole('link', { name: 'Subscription plans' }); - - expect(upgradeDocs).toBeInTheDocument(); - }); - - it('renders the upgrade Manage license call to action', () => { - const upgradeCta = screen.getByRole('link', { name: 'Manage license' }); - - expect(upgradeCta).toBeInTheDocument(); - }); -}); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/translations.ts b/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/translations.ts deleted file mode 100644 index eece0fb5a68700..00000000000000 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/upgrade/translations.ts +++ /dev/null @@ -1,36 +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 { i18n } from '@kbn/i18n'; - -export const FIND_POTENTIAL_ATTACKS_WITH_AI = i18n.translate( - 'xpack.securitySolution.attackDiscovery.upgrade.findPotentialAttacksWithAiTitle', - { - defaultMessage: 'Find potential attacks with AI', - } -); - -export const ATTACK_DISCOVERY_IS_AVAILABLE = i18n.translate( - 'xpack.securitySolution.attackDiscovery.upgrade.attackDiscoveryIsAvailable', - { - defaultMessage: 'Your license does not support Attack discovery.', - } -); - -export const PLEASE_UPGRADE = i18n.translate( - 'xpack.securitySolution.attackDiscovery.upgrade.pleaseUpgradeMessage', - { - defaultMessage: 'Please upgrade your license to use this feature.', - } -); - -export const UPGRADE = i18n.translate( - 'xpack.securitySolution.attackDiscovery.upgrade.upgradeButton', - { - defaultMessage: 'Upgrade', - } -); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/routes.tsx b/x-pack/plugins/security_solution/public/attack_discovery/routes.tsx index 10c9a70e4217f0..f91fda6cd6304f 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/routes.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/routes.tsx @@ -6,7 +6,6 @@ */ import React from 'react'; -import { TrackApplicationView } from '@kbn/usage-collection-plugin/public'; import { AttackDiscoveryPage } from './pages'; import type { SecuritySubPluginRoutes } from '../app/types'; @@ -17,11 +16,9 @@ import { SecurityRoutePageWrapper } from '../common/components/security_route_pa export const AttackDiscoveryRoutes = () => ( - - - - - + + + ); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx index d21630bb4c8357..6329ce5ca699ac 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.test.tsx @@ -5,15 +5,24 @@ * 2.0. */ -import React from 'react'; +import { useLoadConnectors } from '@kbn/elastic-assistant'; +import { useFetchAnonymizationFields } from '@kbn/elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields'; import { renderHook, act } from '@testing-library/react-hooks'; +import React from 'react'; + import { useKibana } from '../../common/lib/kibana'; -import { useFetchAnonymizationFields } from '@kbn/elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields'; import { usePollApi } from '../hooks/use_poll_api'; import { useAttackDiscovery } from '.'; import { ERROR_GENERATING_ATTACK_DISCOVERIES } from '../pages/translations'; import { useKibana as mockUseKibana } from '../../common/lib/kibana/__mocks__'; +jest.mock('../../assistant/use_assistant_availability', () => ({ + useAssistantAvailability: jest.fn(() => ({ + hasAssistantPrivilege: true, + isAssistantEnabled: true, + })), +})); + jest.mock( '@kbn/elastic-assistant/impl/assistant/api/anonymization_fields/use_fetch_anonymization_fields' ); @@ -40,10 +49,10 @@ jest.mock('@kbn/elastic-assistant', () => ({ latestAlerts: 20, }, }), - useLoadConnectors: () => ({ + useLoadConnectors: jest.fn(() => ({ isFetched: true, data: mockConnectors, - }), + })), })); const mockAttackDiscoveryPost = { timestamp: '2024-06-13T17:50:59.409Z', @@ -224,4 +233,26 @@ describe('useAttackDiscovery', () => { expect(result.current.isLoading).toBe(false); expect(result.current.lastUpdated).toEqual(null); }); + + describe('when zero connectors are configured', () => { + beforeEach(() => { + (useLoadConnectors as jest.Mock).mockReturnValue({ + isFetched: true, + data: [], // <-- zero connectors configured + }); + + renderHook(() => useAttackDiscovery({ connectorId: 'test-id', setLoadingConnectorId })); + }); + + afterEach(() => { + (useLoadConnectors as jest.Mock).mockReturnValue({ + isFetched: true, + data: mockConnectors, + }); + }); + + it('does NOT call pollApi when zero connectors are configured', () => { + expect(mockPollApi.pollApi).not.toHaveBeenCalled(); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx index 87f0f4d9a50890..deb1c556bdb431 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/use_attack_discovery/index.tsx @@ -109,7 +109,12 @@ export const useAttackDiscovery = ({ ]); useEffect(() => { - if (connectorId != null && connectorId !== '') { + if ( + connectorId != null && + connectorId !== '' && + aiConnectors != null && + aiConnectors.length > 0 + ) { pollApi(); setLoadingConnectorId?.(connectorId); setAlertsContextCount(null); @@ -120,7 +125,7 @@ export const useAttackDiscovery = ({ setGenerationIntervals([]); setPollStatus(null); } - }, [pollApi, connectorId, setLoadingConnectorId, setPollStatus]); + }, [aiConnectors, connectorId, pollApi, setLoadingConnectorId, setPollStatus]); useEffect(() => { if (pollStatus === 'running') { diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml index 12214295817a5f..3fd3bd2e3233e7 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/roles_users/serverless/es_serverless_resources/roles.yml @@ -65,6 +65,7 @@ viewer: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -143,6 +144,7 @@ editor: - feature_siem.file_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -191,6 +193,7 @@ t1_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -245,6 +248,7 @@ t2_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -314,6 +318,7 @@ t3_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -370,6 +375,7 @@ threat_intelligence_analyst: - feature_siem.blocklist_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.all @@ -437,6 +443,7 @@ rule_author: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -508,6 +515,7 @@ soc_manager: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -567,6 +575,7 @@ detections_admin: - feature_siem.crud_alerts - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_dev_tools.all @@ -625,6 +634,7 @@ platform_engineer: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_fleet.all @@ -697,6 +707,7 @@ endpoint_operations_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -763,6 +774,7 @@ endpoint_policy_manager: - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/mocks.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/mocks.ts index dfc86518e124f1..c2275ebbcee5fe 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/mocks.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/mocks.ts @@ -31,6 +31,11 @@ jest.mock('@kbn/security-solution-features/product_features', () => ({ baseKibanaSubFeatureIds: [], subFeaturesMap: new Map(), })), + getAttackDiscoveryFeature: jest.fn(() => ({ + baseKibanaFeature: {}, + baseKibanaSubFeatureIds: [], + subFeaturesMap: new Map(), + })), })); export const createProductFeaturesServiceMock = ( @@ -103,6 +108,25 @@ export const createProductFeaturesServiceMock = ( ]) ) ), + attackDiscovery: jest.fn().mockReturnValue( + new Map( + enabledFeatureKeys.map((key) => [ + key, + { + privileges: { + all: { + ui: ['entity-analytics'], + api: [`test-entity-analytics`], + }, + read: { + ui: ['entity-analytics'], + api: [`test-entity-analytics`], + }, + }, + }, + ]) + ) + ), }); } diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts index b59dafb2f0eb7d..27205a30be785f 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.test.ts @@ -40,6 +40,7 @@ const productFeature = { }; const mockGetFeature = jest.fn().mockReturnValue(productFeature); jest.mock('@kbn/security-solution-features/product_features', () => ({ + getAttackDiscoveryFeature: () => mockGetFeature(), getAssistantFeature: () => mockGetFeature(), getCasesFeature: () => mockGetFeature(), getSecurityFeature: () => mockGetFeature(), @@ -54,8 +55,8 @@ describe('ProductFeaturesService', () => { const experimentalFeatures = {} as ExperimentalFeatures; new ProductFeaturesService(loggerMock.create(), experimentalFeatures); - expect(mockGetFeature).toHaveBeenCalledTimes(3); - expect(MockedProductFeatures).toHaveBeenCalledTimes(3); + expect(mockGetFeature).toHaveBeenCalledTimes(4); + expect(MockedProductFeatures).toHaveBeenCalledTimes(4); }); it('should init all ProductFeatures when initialized', () => { @@ -86,8 +87,10 @@ describe('ProductFeaturesService', () => { const mockSecurityConfig = new Map() as ProductFeaturesConfig; const mockCasesConfig = new Map() as ProductFeaturesConfig; const mockAssistantConfig = new Map() as ProductFeaturesConfig; + const mockAttackDiscoveryConfig = new Map() as ProductFeaturesConfig; const configurator: ProductFeaturesConfigurator = { + attackDiscovery: jest.fn(() => mockAttackDiscoveryConfig), security: jest.fn(() => mockSecurityConfig), cases: jest.fn(() => mockCasesConfig), securityAssistant: jest.fn(() => mockAssistantConfig), @@ -97,6 +100,7 @@ describe('ProductFeaturesService', () => { expect(configurator.security).toHaveBeenCalled(); expect(configurator.cases).toHaveBeenCalled(); expect(configurator.securityAssistant).toHaveBeenCalled(); + expect(configurator.attackDiscovery).toHaveBeenCalled(); expect(MockedProductFeatures.mock.instances[0].setConfig).toHaveBeenCalledWith( mockSecurityConfig @@ -105,6 +109,9 @@ describe('ProductFeaturesService', () => { expect(MockedProductFeatures.mock.instances[2].setConfig).toHaveBeenCalledWith( mockAssistantConfig ); + expect(MockedProductFeatures.mock.instances[3].setConfig).toHaveBeenCalledWith( + mockAttackDiscoveryConfig + ); }); it('should return isEnabled for enabled features', () => { @@ -127,8 +134,12 @@ describe('ProductFeaturesService', () => { const mockAssistantConfig = new Map([ [ProductFeatureKey.assistant, {}], ]) as ProductFeaturesConfig; + const mockAttackDiscoveryConfig = new Map([ + [ProductFeatureKey.attackDiscovery, {}], + ]) as ProductFeaturesConfig; const configurator: ProductFeaturesConfigurator = { + attackDiscovery: jest.fn(() => mockAttackDiscoveryConfig), security: jest.fn(() => mockSecurityConfig), cases: jest.fn(() => mockCasesConfig), securityAssistant: jest.fn(() => mockAssistantConfig), @@ -139,6 +150,7 @@ describe('ProductFeaturesService', () => { expect(productFeaturesService.isEnabled(ProductFeatureKey.endpointExceptions)).toEqual(true); expect(productFeaturesService.isEnabled(ProductFeatureKey.casesConnectors)).toEqual(true); expect(productFeaturesService.isEnabled(ProductFeatureKey.assistant)).toEqual(true); + expect(productFeaturesService.isEnabled(ProductFeatureKey.attackDiscovery)).toEqual(true); expect(productFeaturesService.isEnabled(ProductFeatureKey.externalRuleActions)).toEqual(false); }); diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.ts index 8714c2e4ab6ab5..e30c067a0d4a43 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/product_features_service.ts @@ -17,6 +17,7 @@ import type { FeaturesPluginSetup } from '@kbn/features-plugin/server'; import type { ProductFeatureKeyType } from '@kbn/security-solution-features'; import { getAssistantFeature, + getAttackDiscoveryFeature, getCasesFeature, getSecurityFeature, } from '@kbn/security-solution-features/product_features'; @@ -31,6 +32,7 @@ export class ProductFeaturesService { private securityProductFeatures: ProductFeatures; private casesProductFeatures: ProductFeatures; private securityAssistantProductFeatures: ProductFeatures; + private attackDiscoveryProductFeatures: ProductFeatures; private productFeatures?: Set; constructor( @@ -67,12 +69,21 @@ export class ProductFeaturesService { assistantFeature.baseKibanaFeature, assistantFeature.baseKibanaSubFeatureIds ); + + const attackDiscoveryFeature = getAttackDiscoveryFeature(); + this.attackDiscoveryProductFeatures = new ProductFeatures( + this.logger, + attackDiscoveryFeature.subFeaturesMap, + attackDiscoveryFeature.baseKibanaFeature, + attackDiscoveryFeature.baseKibanaSubFeatureIds + ); } public init(featuresSetup: FeaturesPluginSetup) { this.securityProductFeatures.init(featuresSetup); this.casesProductFeatures.init(featuresSetup); this.securityAssistantProductFeatures.init(featuresSetup); + this.attackDiscoveryProductFeatures.init(featuresSetup); } public setProductFeaturesConfigurator(configurator: ProductFeaturesConfigurator) { @@ -85,11 +96,15 @@ export class ProductFeaturesService { const securityAssistantProductFeaturesConfig = configurator.securityAssistant(); this.securityAssistantProductFeatures.setConfig(securityAssistantProductFeaturesConfig); + const attackDiscoveryProductFeaturesConfig = configurator.attackDiscovery(); + this.attackDiscoveryProductFeatures.setConfig(attackDiscoveryProductFeaturesConfig); + this.productFeatures = new Set( Object.freeze([ ...securityProductFeaturesConfig.keys(), ...casesProductFeaturesConfig.keys(), ...securityAssistantProductFeaturesConfig.keys(), + ...attackDiscoveryProductFeaturesConfig.keys(), ]) as readonly ProductFeatureKeyType[] ); } @@ -107,7 +122,8 @@ export class ProductFeaturesService { return ( this.securityProductFeatures.isActionRegistered(action) || this.casesProductFeatures.isActionRegistered(action) || - this.securityAssistantProductFeatures.isActionRegistered(action) + this.securityAssistantProductFeatures.isActionRegistered(action) || + this.attackDiscoveryProductFeatures.isActionRegistered(action) ); } diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/types.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/types.ts index 27bf020fad4aee..9c7b20cfba9607 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/types.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/types.ts @@ -13,6 +13,7 @@ import type { } from '@kbn/security-solution-features/keys'; export interface ProductFeaturesConfigurator { + attackDiscovery: () => ProductFeaturesConfig; security: () => ProductFeaturesConfig; cases: () => ProductFeaturesConfig; securityAssistant: () => ProductFeaturesConfig; diff --git a/x-pack/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx b/x-pack/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx index 70f39b2ae70e6e..56775b6c4433e8 100644 --- a/x-pack/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx +++ b/x-pack/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx @@ -24,3 +24,9 @@ export const EntityAnalyticsUpsellingPageLazy = lazy(() => default: EntityAnalyticsUpsellingPageESS, })) ); + +export const AttackDiscoveryUpsellingPageLazy = lazy(() => + import('./pages/attack_discovery').then(({ AttackDiscoveryUpsellingPageESS }) => ({ + default: AttackDiscoveryUpsellingPageESS, + })) +); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.test.tsx b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.test.tsx new file mode 100644 index 00000000000000..ee84089e5624a6 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.test.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import * as i18n from './translations'; + +jest.mock('../../../common/services', () => ({ + useKibana: jest.fn(() => ({ + services: { + application: { + getUrlForApp: jest + .fn() + .mockReturnValue('http://localhost:5601/app/management/stack/license_management'), + }, + http: { + basePath: { + get: () => 'some-base-path', + }, + }, + }, + })), +})); + +import { AttackDiscoveryUpsellingPageESS } from '.'; + +describe('AttackDiscoveryUpsellingPageESS', () => { + beforeEach(() => { + jest.clearAllMocks(); + + render(); + }); + + it('renders the expected ESS-specific availability message', () => { + const attackDiscoveryIsAvailable = screen.getByTestId('availabilityMessage'); + + expect(attackDiscoveryIsAvailable).toHaveTextContent(i18n.AVAILABILITY_MESSAGE); + }); + + it('renders the expected ESS-specific upgrade message', () => { + const pleaseUpgrade = screen.getByTestId('upgradeMessage'); + + expect(pleaseUpgrade).toHaveTextContent(i18n.UPGRADE_MESSAGE); + }); + + it('renders the ESS-specific actions', () => { + const actions = screen.getByTestId('essActions'); + + expect(actions).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.tsx b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.tsx new file mode 100644 index 00000000000000..12486b0a7be8c5 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/index.tsx @@ -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 { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { AttackDiscoveryUpsellingPage } from '@kbn/security-solution-upselling/pages/attack_discovery'; +import React, { useMemo } from 'react'; + +import { UpgradeActions } from './upgrade_actions'; +import * as i18n from './translations'; + +/** + * This component passes self-managed-specific upgrade actions and `i18n` to + * the platform agnostic `AttackDiscoveryUpsellingPage` component. + */ +const AttackDiscoveryUpsellingPageESSComponent: React.FC = () => { + const actions = useMemo( + () => ( + + + + + + ), + [] + ); + + return ( + + ); +}; + +AttackDiscoveryUpsellingPageESSComponent.displayName = 'AttackDiscoveryUpsellingPageESS'; + +export const AttackDiscoveryUpsellingPageESS = React.memo(AttackDiscoveryUpsellingPageESSComponent); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/translations.ts b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/translations.ts new file mode 100644 index 00000000000000..de393ffcf26a13 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/translations.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 { i18n } from '@kbn/i18n'; + +export const AVAILABILITY_MESSAGE = i18n.translate( + 'xpack.securitySolutionEss.upselling.pages.attackDiscovery.availabilityMessage', + { + defaultMessage: 'Your license does not support Attack discovery.', + } +); + +export const UPGRADE_MESSAGE = i18n.translate( + 'xpack.securitySolutionEss.upselling.pages.attackDiscovery.upgradeMessage', + { + defaultMessage: 'Please upgrade your license to use this feature.', + } +); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.test.tsx b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.test.tsx new file mode 100644 index 00000000000000..27f19e36f8543b --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.test.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import * as i18n from './translations'; +import { UpgradeActions } from '.'; + +jest.mock('../../../../common/services', () => ({ + useKibana: jest.fn().mockReturnValue({ + services: { + application: { + getUrlForApp: jest + .fn() + .mockReturnValue('http://localhost:5601/app/management/stack/license_management'), + }, + }, + }), +})); + +describe('UpgradeActions', () => { + beforeEach(() => { + render(); + }); + + describe('upgrade docs button', () => { + it('renders the expected button text', () => { + expect(screen.getByTestId('upgradeDocs')).toHaveTextContent(i18n.UPGRADE_DOCS); + }); + + it('opens the link in a new tab', () => { + expect(screen.getByTestId('upgradeDocs')).toHaveAttribute('target', '_blank'); + }); + }); + + describe('upgrade call to action button', () => { + it('renders the expected button text', () => { + expect(screen.getByTestId('upgradeCta')).toHaveTextContent(i18n.UPGRADE_CTA); + }); + + it('opens the license management page in a new tab', () => { + expect(screen.getByTestId('upgradeCta')).toHaveAttribute('target', '_blank'); + }); + + it('links to the license management page', () => { + expect(screen.getByTestId('upgradeCta')).toHaveAttribute( + 'href', + 'http://localhost:5601/app/management/stack/license_management' + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.tsx b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.tsx new file mode 100644 index 00000000000000..b0849e8d9526c7 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/index.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import React from 'react'; + +import { useKibana } from '../../../../common/services'; +import * as i18n from './translations'; + +const UpgradeActionsComponent = () => { + const { services } = useKibana(); + + return ( + + + + {i18n.UPGRADE_DOCS} + + + + + + {i18n.UPGRADE_CTA} + + + + ); +}; + +export const UpgradeActions = React.memo(UpgradeActionsComponent); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/translations.ts b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/translations.ts new file mode 100644 index 00000000000000..185d89e188c844 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery/upgrade_actions/translations.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 { i18n } from '@kbn/i18n'; + +export const UPGRADE_CTA = i18n.translate( + 'xpack.securitySolutionEss.upselling.pages.attackDiscovery.upgrade.upgradeTitle', + { + defaultMessage: 'Manage license', + } +); + +export const UPGRADE_DOCS = i18n.translate( + 'xpack.securitySolutionEss.upselling.pages.attackDiscovery.upgrade.upgradeButtonLabel', + { + defaultMessage: 'Subscription plans', + } +); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.test.tsx b/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.test.tsx new file mode 100644 index 00000000000000..e7fdcf39e4e726 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.test.tsx @@ -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 { SecurityPageName } from '@kbn/security-solution-plugin/common'; + +import { upsellingPages } from './register_upsellings'; + +describe('upsellingPages', () => { + it('registers the Attack discovery page with the expected minimum license for self managed', () => { + const attackDiscoveryPage = upsellingPages.find( + ({ pageName }) => pageName === SecurityPageName.attackDiscovery + ); + + expect(attackDiscoveryPage?.minimumLicenseRequired).toEqual('enterprise'); + }); +}); diff --git a/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.tsx b/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.tsx index 2f86c68821ef3e..b7fbdab3b59821 100644 --- a/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.tsx +++ b/x-pack/plugins/security_solution_ess/public/upselling/register_upsellings.tsx @@ -25,6 +25,7 @@ import type React from 'react'; import type { Services } from '../common/services'; import { withServicesProvider } from '../common/services'; import { + AttackDiscoveryUpsellingPageLazy, EntityAnalyticsUpsellingPageLazy, EntityAnalyticsUpsellingSectionLazy, } from './lazy_upselling'; @@ -92,6 +93,11 @@ export const upsellingPages: UpsellingPages = [ minimumLicenseRequired: 'platinum', component: EntityAnalyticsUpsellingPageLazy, }, + { + pageName: SecurityPageName.attackDiscovery, + minimumLicenseRequired: 'enterprise', + component: AttackDiscoveryUpsellingPageLazy, + }, ]; // Upsellings for sections, linked by arbitrary ids diff --git a/x-pack/plugins/security_solution_ess/server/product_features/attack_discovery_product_features_config.ts b/x-pack/plugins/security_solution_ess/server/product_features/attack_discovery_product_features_config.ts new file mode 100644 index 00000000000000..9e575e805e2034 --- /dev/null +++ b/x-pack/plugins/security_solution_ess/server/product_features/attack_discovery_product_features_config.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; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + ProductFeatureKeys, + ProductFeatureKibanaConfig, + ProductFeaturesAttackDiscoveryConfig, +} from '@kbn/security-solution-features'; +import { + attackDiscoveryDefaultProductFeaturesConfig, + createEnabledProductFeaturesConfigMap, +} from '@kbn/security-solution-features/config'; +import type { ProductFeatureAttackDiscoveryKey } from '@kbn/security-solution-features/keys'; + +/** + * Maps the ProductFeatures keys to Kibana privileges that will be merged + * into the base privileges config for the Security app. + * + * Privileges can be added in different ways: + * - `privileges`: the privileges that will be added directly into the main Attack discovery feature. + * - `subFeatureIds`: the ids of the sub-features that will be added into the Attack discovery subFeatures entry. + * - `subFeaturesPrivileges`: the privileges that will be added into the existing Attack discovery subFeature with the privilege `id` specified. + */ +const attackDiscoveryProductFeaturesConfig: Record< + ProductFeatureAttackDiscoveryKey, + ProductFeatureKibanaConfig +> = { + ...attackDiscoveryDefaultProductFeaturesConfig, + // ess-specific app features configs here +}; + +export const getAttackDiscoveryProductFeaturesConfigurator = + (enabledProductFeatureKeys: ProductFeatureKeys) => (): ProductFeaturesAttackDiscoveryConfig => + createEnabledProductFeaturesConfigMap( + attackDiscoveryProductFeaturesConfig, + enabledProductFeatureKeys + ); diff --git a/x-pack/plugins/security_solution_ess/server/product_features/index.ts b/x-pack/plugins/security_solution_ess/server/product_features/index.ts index dc84442075fc08..ed85c32f122843 100644 --- a/x-pack/plugins/security_solution_ess/server/product_features/index.ts +++ b/x-pack/plugins/security_solution_ess/server/product_features/index.ts @@ -10,11 +10,13 @@ import type { ProductFeaturesConfigurator } from '@kbn/security-solution-plugin/ import { getCasesProductFeaturesConfigurator } from './cases_product_features_config'; import { getSecurityProductFeaturesConfigurator } from './security_product_features_config'; import { getSecurityAssistantProductFeaturesConfigurator } from './assistant_product_features_config'; +import { getAttackDiscoveryProductFeaturesConfigurator } from './attack_discovery_product_features_config'; export const getProductProductFeaturesConfigurator = ( enabledProductFeatureKeys: ProductFeatureKeys ): ProductFeaturesConfigurator => { return { + attackDiscovery: getAttackDiscoveryProductFeaturesConfigurator(enabledProductFeatureKeys), security: getSecurityProductFeaturesConfigurator(enabledProductFeatureKeys), cases: getCasesProductFeaturesConfigurator(enabledProductFeatureKeys), securityAssistant: getSecurityAssistantProductFeaturesConfigurator(enabledProductFeatureKeys), diff --git a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts index 9a6eb9ab743ca4..42cdf7589fb357 100644 --- a/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts +++ b/x-pack/plugins/security_solution_serverless/common/pli/pli_config.ts @@ -22,6 +22,7 @@ export const PLI_PRODUCT_FEATURES: PliProductFeatures = { complete: [ ProductFeatureKey.advancedInsights, ProductFeatureKey.assistant, + ProductFeatureKey.attackDiscovery, ProductFeatureKey.investigationGuide, ProductFeatureKey.investigationGuideInteractions, ProductFeatureKey.threatIntelligence, diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx index b7e46406089287..526654a6f45090 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx +++ b/x-pack/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx @@ -40,3 +40,11 @@ export const EntityAnalyticsUpsellingSectionLazy = withSuspenseUpsell( ) ) ); + +export const AttackDiscoveryUpsellingPageLazy = withSuspenseUpsell( + lazy(() => + import('./pages/attack_discovery').then(({ AttackDiscoveryUpsellingPageServerless }) => ({ + default: AttackDiscoveryUpsellingPageServerless, + })) + ) +); diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.test.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.test.tsx new file mode 100644 index 00000000000000..249e5e369f9c0a --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.test.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import * as i18n from './translations'; + +jest.mock('../../../common/services', () => ({ + useKibana: jest.fn(() => ({ + services: { + http: { + basePath: { + get: () => 'some-base-path', + }, + }, + }, + })), +})); + +import { AttackDiscoveryUpsellingPageServerless } from '.'; + +describe('AttackDiscoveryUpsellingPageServerless', () => { + beforeEach(() => { + jest.clearAllMocks(); + + render(); + }); + + it('renders the expected serverless-specific availability message', () => { + const attackDiscoveryIsAvailable = screen.getByTestId('availabilityMessage'); + + expect(attackDiscoveryIsAvailable).toHaveTextContent(i18n.AVAILABILITY_MESSAGE); + }); + + it('renders the expected serverless-specific upgrade message', () => { + const pleaseUpgrade = screen.getByTestId('upgradeMessage'); + + expect(pleaseUpgrade).toHaveTextContent(i18n.UPGRADE_MESSAGE); + }); +}); diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.tsx new file mode 100644 index 00000000000000..cedbbae3ff3352 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/index.tsx @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AttackDiscoveryUpsellingPage } from '@kbn/security-solution-upselling/pages/attack_discovery'; +import React from 'react'; + +import * as i18n from './translations'; + +/** + * This component passes serverless-specific `i18n` to the platform agnostic + * `AttackDiscoveryUpsellingPage` component. + */ +const AttackDiscoveryUpsellingPageServerlessComponent: React.FC = () => { + return ( + + ); +}; + +AttackDiscoveryUpsellingPageServerlessComponent.displayName = + 'AttackDiscoveryUpsellingPageServerless'; + +export const AttackDiscoveryUpsellingPageServerless = React.memo( + AttackDiscoveryUpsellingPageServerlessComponent +); diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/translations.ts b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/translations.ts new file mode 100644 index 00000000000000..4e246986d1e0a7 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/pages/attack_discovery/translations.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 { i18n } from '@kbn/i18n'; + +export const AVAILABILITY_MESSAGE = i18n.translate( + 'xpack.securitySolutionServerless.upselling.pages.attackDiscovery.availabilityMessage', + { + defaultMessage: 'Your product tier does not support Attack discovery.', + } +); + +export const UPGRADE_MESSAGE = i18n.translate( + 'xpack.securitySolutionServerless.upselling.pages.attackDiscovery.upgradeMessage', + { + defaultMessage: 'Please upgrade your product tier to use this feature.', + } +); diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.test.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.test.tsx new file mode 100644 index 00000000000000..4ec14e81ca175d --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.test.tsx @@ -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 { SecurityPageName } from '@kbn/security-solution-plugin/common'; +import { ProductFeatureKey } from '@kbn/security-solution-features/keys'; + +import { upsellingPages } from './upsellings'; + +describe('upsellingPages', () => { + it('registers the Attack discovery page with the Attack discovery PLI', () => { + const attackDiscoveryPage = upsellingPages.find( + ({ pageName }) => pageName === SecurityPageName.attackDiscovery + ); + + expect(attackDiscoveryPage?.pli).toEqual(ProductFeatureKey.attackDiscovery); + }); +}); diff --git a/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.tsx b/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.tsx index cb0e1514b1df5d..bbc873ef137e7a 100644 --- a/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.tsx +++ b/x-pack/plugins/security_solution_serverless/public/upselling/upsellings.tsx @@ -25,6 +25,7 @@ import { } from './sections/endpoint_management'; import { getProductTypeByPLI } from './hooks/use_product_type_by_pli'; import { + AttackDiscoveryUpsellingPageLazy, EndpointExceptionsDetailsUpsellingLazy, EntityAnalyticsUpsellingPageLazy, EntityAnalyticsUpsellingSectionLazy, @@ -76,6 +77,11 @@ export const upsellingPages: UpsellingPages = [ ), }, + { + pageName: SecurityPageName.attackDiscovery, + pli: ProductFeatureKey.attackDiscovery, + component: () => , + }, ]; const entityAnalyticsProductType = getProductTypeByPLI(ProductFeatureKey.advancedInsights) ?? ''; diff --git a/x-pack/plugins/security_solution_serverless/server/plugin.ts b/x-pack/plugins/security_solution_serverless/server/plugin.ts index f81a8e013e290f..7161c5b684505f 100644 --- a/x-pack/plugins/security_solution_serverless/server/plugin.ts +++ b/x-pack/plugins/security_solution_serverless/server/plugin.ts @@ -63,6 +63,7 @@ export class SecuritySolutionServerlessPlugin // Register product features const enabledProductFeatures = getProductProductFeatures(this.config.productTypes); + registerProductFeatures(pluginsSetup, enabledProductFeatures, this.config); // Register telemetry events diff --git a/x-pack/plugins/security_solution_serverless/server/product_features/attack_discovery_product_features_config.ts b/x-pack/plugins/security_solution_serverless/server/product_features/attack_discovery_product_features_config.ts new file mode 100644 index 00000000000000..406c396edfb725 --- /dev/null +++ b/x-pack/plugins/security_solution_serverless/server/product_features/attack_discovery_product_features_config.ts @@ -0,0 +1,40 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { + ProductFeatureKeys, + ProductFeatureKibanaConfig, + ProductFeaturesAttackDiscoveryConfig, +} from '@kbn/security-solution-features'; +import { + attackDiscoveryDefaultProductFeaturesConfig, + createEnabledProductFeaturesConfigMap, +} from '@kbn/security-solution-features/config'; +import type { ProductFeatureAttackDiscoveryKey } from '@kbn/security-solution-features/keys'; + +/** + * Maps the ProductFeatures keys to Kibana privileges that will be merged + * into the base privileges config for the app. + * + * Privileges can be added in different ways: + * - `privileges`: the privileges that will be added directly into the main Attack discovery feature. + * - `subFeatureIds`: the ids of the sub-features that will be added into the Attack discovery subFeatures entry. + * - `subFeaturesPrivileges`: the privileges that will be added into the existing Attack discovery subFeature with the privilege `id` specified. + */ +const attackDiscoveryProductFeaturesConfig: Record< + ProductFeatureAttackDiscoveryKey, + ProductFeatureKibanaConfig +> = { + ...attackDiscoveryDefaultProductFeaturesConfig, + // serverless-specific app features configs here +}; + +export const getAttackDiscoveryProductFeaturesConfigurator = + (enabledProductFeatureKeys: ProductFeatureKeys) => (): ProductFeaturesAttackDiscoveryConfig => + createEnabledProductFeaturesConfigMap( + attackDiscoveryProductFeaturesConfig, + enabledProductFeatureKeys + ); diff --git a/x-pack/plugins/security_solution_serverless/server/product_features/index.ts b/x-pack/plugins/security_solution_serverless/server/product_features/index.ts index 6c0b2b9091c664..310ea860787ba8 100644 --- a/x-pack/plugins/security_solution_serverless/server/product_features/index.ts +++ b/x-pack/plugins/security_solution_serverless/server/product_features/index.ts @@ -9,6 +9,7 @@ import type { Logger } from '@kbn/logging'; import { ProductFeatureKey } from '@kbn/security-solution-features/keys'; import type { ProductFeatureKeys } from '@kbn/security-solution-features'; +import { getAttackDiscoveryProductFeaturesConfigurator } from './attack_discovery_product_features_config'; import { getCasesProductFeaturesConfigurator } from './cases_product_features_config'; import { getSecurityProductFeaturesConfigurator } from './security_product_features_config'; import { getSecurityAssistantProductFeaturesConfigurator } from './assistant_product_features_config'; @@ -32,6 +33,7 @@ export const registerProductFeatures = ( // register product features for the main security solution product features service pluginsSetup.securitySolution.setProductFeaturesConfigurator({ + attackDiscovery: getAttackDiscoveryProductFeaturesConfigurator(enabledProductFeatureKeys), security: getSecurityProductFeaturesConfigurator( enabledProductFeatureKeys, config.experimentalFeatures diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index b048ed05a577a3..bf087405664b85 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -35882,10 +35882,6 @@ "xpack.securitySolution.attackDiscovery.tour.video": "Regardez la vidéo de présentation", "xpack.securitySolution.attackDiscovery.tour.videoStep.desc": "Plongez dans les découvertes d'attaques axées sur les données et rationalisez votre flux de travail grâce à notre technologie d'IA intuitive, conçue pour accroître instantanément votre productivité.", "xpack.securitySolution.attackDiscovery.tour.videoStep.title": "Démarrez la découverte des attaques", - "xpack.securitySolution.attackDiscovery.upgrade.attackDiscoveryIsAvailable": "Votre licence ne prend pas en charge la découverte d'attaques.", - "xpack.securitySolution.attackDiscovery.upgrade.findPotentialAttacksWithAiTitle": "Trouvez les attaques potentielles grâce à l'IA", - "xpack.securitySolution.attackDiscovery.upgrade.pleaseUpgradeMessage": "Veuillez mettre votre licence à niveau pour bénéficier de cette fonctionnalité.", - "xpack.securitySolution.attackDiscovery.upgrade.upgradeButton": "Mettre à niveau", "xpack.securitySolution.auditd.abortedAuditStartupDescription": "démarrage de l'audit abandonné", "xpack.securitySolution.auditd.accessErrorDescription": "erreur d'accès", "xpack.securitySolution.auditd.accessPermissionDescription": "autorisation d'accès", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index a1ed084e1a6fba..8255c814498ba9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -35866,10 +35866,6 @@ "xpack.securitySolution.attackDiscovery.tour.video": "概要動画を視聴", "xpack.securitySolution.attackDiscovery.tour.videoStep.desc": "データ主導のAttack Discoveryを導入し、生産性を即時に高めるために設計されたElasticの直感的なAI技術でワークフローを合理化しましょう。", "xpack.securitySolution.attackDiscovery.tour.videoStep.title": "攻撃の検出を開始", - "xpack.securitySolution.attackDiscovery.upgrade.attackDiscoveryIsAvailable": "ご使用のライセンスはAttack Discoveryをサポートしていません。", - "xpack.securitySolution.attackDiscovery.upgrade.findPotentialAttacksWithAiTitle": "AIを利用して潜在的な攻撃を検出", - "xpack.securitySolution.attackDiscovery.upgrade.pleaseUpgradeMessage": "この機能を使用するには、ライセンスをアップグレードしてください。", - "xpack.securitySolution.attackDiscovery.upgrade.upgradeButton": "アップグレード", "xpack.securitySolution.auditd.abortedAuditStartupDescription": "中断された監査のスタートアップ", "xpack.securitySolution.auditd.accessErrorDescription": "アクセスエラー", "xpack.securitySolution.auditd.accessPermissionDescription": "アクセス権限", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 6b824bc3a21c3d..10be509e503b65 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -35907,10 +35907,6 @@ "xpack.securitySolution.attackDiscovery.tour.video": "观看概述视频", "xpack.securitySolution.attackDiscovery.tour.videoStep.desc": "深入了解数据驱动式 Attack Discovery,并利用旨在即时提高生产力的直观式 AI 技术精简您的工作流。", "xpack.securitySolution.attackDiscovery.tour.videoStep.title": "开始发现攻击", - "xpack.securitySolution.attackDiscovery.upgrade.attackDiscoveryIsAvailable": "您的许可证不支持 Attack Discovery。", - "xpack.securitySolution.attackDiscovery.upgrade.findPotentialAttacksWithAiTitle": "利用 AI 发现潜在攻击", - "xpack.securitySolution.attackDiscovery.upgrade.pleaseUpgradeMessage": "请升级许可证以使用此功能。", - "xpack.securitySolution.attackDiscovery.upgrade.upgradeButton": "升级", "xpack.securitySolution.auditd.abortedAuditStartupDescription": "已中止审计启动", "xpack.securitySolution.auditd.accessErrorDescription": "访问错误", "xpack.securitySolution.auditd.accessPermissionDescription": "访问权限", diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts index a494e3e09ee0a5..5236ec72d437ab 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -128,6 +128,7 @@ export default function ({ getService }: FtrProviderContext) { 'siem', 'slo', 'securitySolutionAssistant', + 'securitySolutionAttackDiscovery', 'securitySolutionCases', 'fleet', 'fleetv2', diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index 4cbaeca03373ca..b4528ad1b14755 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -78,6 +78,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'update_anonymization', ], + securitySolutionAttackDiscovery: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: [ 'all', 'read', diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 5fb3c715805f17..683fa48a692167 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -44,6 +44,7 @@ export default function ({ getService }: FtrProviderContext) { ml: ['all', 'read', 'minimal_all', 'minimal_read'], siem: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionAssistant: ['all', 'read', 'minimal_all', 'minimal_read'], + securitySolutionAttackDiscovery: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read'], fleetv2: ['all', 'read', 'minimal_all', 'minimal_read'], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], @@ -161,6 +162,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'update_anonymization', ], + securitySolutionAttackDiscovery: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: [ 'all', 'read', diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/privileges.ts b/x-pack/test/security_solution_cypress/cypress/tasks/privileges.ts index 04dddd6da4384c..bd7c9d9178198f 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/privileges.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/privileges.ts @@ -64,6 +64,7 @@ export const secAll: Role = { feature: { siem: ['all'], securitySolutionAssistant: ['all'], + securitySolutionAttackDiscovery: ['all'], securitySolutionCases: ['all'], actions: ['all'], actionsSimulators: ['all'], @@ -96,6 +97,7 @@ export const secReadCasesAll: Role = { feature: { siem: ['read'], securitySolutionAssistant: ['all'], + securitySolutionAttackDiscovery: ['all'], securitySolutionCases: ['all'], actions: ['all'], actionsSimulators: ['all'], @@ -128,6 +130,7 @@ export const secAllCasesOnlyReadDelete: Role = { feature: { siem: ['all'], securitySolutionAssistant: ['all'], + securitySolutionAttackDiscovery: ['all'], securitySolutionCases: ['cases_read', 'cases_delete'], actions: ['all'], actionsSimulators: ['all'], @@ -160,6 +163,7 @@ export const secAllCasesNoDelete: Role = { feature: { siem: ['all'], securitySolutionAssistant: ['all'], + securitySolutionAttackDiscovery: ['all'], securitySolutionCases: ['minimal_all'], actions: ['all'], actionsSimulators: ['all'], diff --git a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts index 6987186c7d5256..49b0794accb5ba 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts @@ -82,6 +82,7 @@ export default function ({ getService }: FtrProviderContext) { siem: 0, securitySolutionCases: 0, securitySolutionAssistant: 0, + securitySolutionAttackDiscovery: 0, discover: 0, visualize: 0, dashboard: 0, diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts index b2955ade938b17..f51f169b51a35c 100644 --- a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts +++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts @@ -83,7 +83,8 @@ export default function navLinksTests({ getService }: FtrProviderContext) { 'appSearch', 'workplaceSearch', 'guidedOnboardingFeature', - 'securitySolutionAssistant' + 'securitySolutionAssistant', + 'securitySolutionAttackDiscovery' ) ); break; diff --git a/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml b/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml index 9e1e542df8e877..0c60ac2aa0427d 100644 --- a/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml +++ b/x-pack/test_serverless/shared/lib/security/kibana_roles/project_controller_security_roles.yml @@ -46,6 +46,7 @@ viewer: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -124,6 +125,7 @@ editor: - feature_siem.file_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -172,6 +174,7 @@ t1_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.read - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -226,6 +229,7 @@ t2_analyst: - feature_siem.endpoint_list_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.read @@ -295,6 +299,7 @@ t3_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -351,6 +356,7 @@ threat_intelligence_analyst: - feature_siem.blocklist_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.read - feature_osquery.all @@ -418,6 +424,7 @@ rule_author: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.read - feature_builtInAlerts.all - feature_osquery.all @@ -489,6 +496,7 @@ soc_manager: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -548,6 +556,7 @@ detections_admin: - feature_siem.crud_alerts - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_dev_tools.all @@ -606,6 +615,7 @@ platform_engineer: - feature_siem.actions_log_management_read - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_fleet.all @@ -678,6 +688,7 @@ endpoint_operations_analyst: - feature_siem.scan_operations_all - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all @@ -744,6 +755,7 @@ endpoint_policy_manager: - feature_siem.blocklist_all # Elastic Defend Policy Management - feature_securitySolutionCases.all - feature_securitySolutionAssistant.all + - feature_securitySolutionAttackDiscovery.all - feature_actions.all - feature_builtInAlerts.all - feature_osquery.all From 826641505cfdeadcd37e6aa70aeae8d00a70f44d Mon Sep 17 00:00:00 2001 From: Jen Huang Date: Tue, 13 Aug 2024 08:49:57 -0700 Subject: [PATCH 12/92] [UII] Support integration-level outputs (#189125) ## Summary Resolves #143905. This PR adds support for integration-level outputs. This means that different integrations within the same agent policy can now be configured to send data to different locations. This feature is gated behind `enterprise` level subscription. For each input, the agent policy will configure sending data to the following outputs in decreasing order of priority: 1. Output set specifically on the integration policy 2. Output set specifically on the integration's parent agent policy (including the case where an integration policy belongs to multiple agent policies) 3. Global default data output set via Fleet Settings Integration-level outputs will respect the same rules as agent policy-level outputs: - Certain integrations are disallowed from using certain output types, attempting to add them to each other via creation, updating, or "defaulting", will fail - `fleet-server`, `synthetics`, and `apm` can only use same-cluster Elasticsearch output - When an output is deleted, any integrations that were specifically using it will "clear" their output configuration and revert back to either `#2` or `#3` in the above list - When an output is edited, all agent policies across all spaces that use it will be bumped to a new revision, this includes: - Agent policies that have that output specifically set in their settings (existing behavior) - Agent policies that contain integrations which specifically has that output set (new behavior) - When a proxy is edited, the same new revision bump above will apply for any outputs using that proxy The final agent policy YAML that is generated will have: - `outputs` block that includes: - Data and monitoring outputs set at the agent policy level (existing behavior) - Any additional outputs set at the integration level, if they differ from the above - `outputs_permissions` block that includes permissions for each Elasticsearch output depending on which integrations and/or agent monitoring are assigned to it Integration policies table now includes `Output` column. If the output is defaulting to agent policy-level output, or global setting output, a tooltip is shown: image Configuring an integration-level output is done under Advanced options in the policy editor. Setting to the blank value will "clear" the output configuration. The list of available outputs is filtered by what outputs are available for that integration (see above): image An example of failure: ES output cannot be changed to Kafka while there is an integration image ## TODO - [x] Adjust side effects of editing/deleting output when policies use it across different spaces - [x] Add API integration tests - [x] Update OpenAPI spec - [x] Create doc issue ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../current_fields.json | 1 + .../current_mappings.json | 3 + .../check_registered_types.test.ts | 2 +- .../fleet/common/constants/mappings.ts | 3 +- .../plugins/fleet/common/constants/output.ts | 1 + .../fleet/common/constants/package_policy.ts | 2 + .../plugins/fleet/common/openapi/bundled.json | 3 +- .../plugins/fleet/common/openapi/bundled.yaml | 1 - .../schemas/new_package_policy.yaml | 1 - .../schemas/update_package_policy.yaml | 2 - ...plified_package_policy_helper.test.ts.snap | 1 + .../simplified_package_policy_helper.test.ts | 1 + .../simplified_package_policy_helper.ts | 6 + .../common/types/models/package_policy.ts | 2 + .../common/types/rest_spec/package_policy.ts | 1 + .../components/steps/components/hooks.tsx | 22 +++ .../steps/step_define_package_policy.tsx | 56 +++++- .../package_policies_table.tsx | 75 +++++++- .../use_fleet_proxy_form.tsx | 2 +- .../use_fleet_server_host_form.test.tsx | 4 - .../services/agent_and_policies_count.tsx | 65 +++---- .../hooks/use_multiple_agent_policies.ts | 3 +- x-pack/plugins/fleet/server/errors/index.ts | 2 + x-pack/plugins/fleet/server/mocks/index.ts | 1 + .../server/mocks/package_policy.mocks.ts | 1 + .../routes/package_policy/handlers.test.ts | 78 +------- .../server/routes/package_policy/handlers.ts | 19 -- .../routes/package_policy/utils/index.ts | 17 +- .../fleet/server/saved_objects/index.ts | 11 ++ .../saved_objects/migrations/to_v8_5_0.ts | 1 - .../full_agent_policy.test.ts.snap | 168 ++++++++++++++++++ .../agent_policies/full_agent_policy.test.ts | 120 +++++++++++++ .../agent_policies/full_agent_policy.ts | 53 ++++-- .../agent_policies/output_helpers.test.ts | 46 ++++- .../agent_policies/outputs_helpers.ts | 17 +- .../package_policies_to_agent_inputs.test.ts | 5 +- .../package_policies_to_agent_inputs.ts | 8 +- .../agent_policies/related_saved_objects.ts | 15 +- .../server/services/agent_policy.test.ts | 79 +++++--- .../fleet/server/services/agent_policy.ts | 49 ++++- .../fleet/server/services/output.test.ts | 15 +- .../plugins/fleet/server/services/output.ts | 109 ++++++++---- .../services/package_policies/utils.test.ts | 98 +++++++++- .../server/services/package_policies/utils.ts | 80 ++++++++- .../server/services/package_policy.test.ts | 56 ++++++ .../fleet/server/services/package_policy.ts | 89 +++++++++- .../server/services/package_policy_service.ts | 12 ++ .../services/preconfiguration/outputs.test.ts | 7 + .../server/types/models/package_policy.ts | 6 +- .../server/types/models/preconfiguration.ts | 1 + .../fleet/server/types/so_attributes.ts | 2 + .../__snapshots__/agent_policy.snap | 1 + .../apis/outputs/crud.ts | 122 ++++++++++++- 53 files changed, 1266 insertions(+), 279 deletions(-) diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index dd233e14648bd7..211777a5274a5b 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -630,6 +630,7 @@ "is_managed", "name", "namespace", + "output_id", "overrides", "package", "package.name", diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 4ded89844052be..e6e1fef63ee85a 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -2101,6 +2101,9 @@ "namespace": { "type": "keyword" }, + "output_id": { + "type": "keyword" + }, "overrides": { "index": false, "type": "flattened" 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 af58fd9d383bc6..6d978b2d33ca45 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 @@ -119,7 +119,7 @@ describe('checking migration metadata changes on all registered SO types', () => "ingest-agent-policies": "90625b4a5ded9d4867358fcccc14a57c0454fcee", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "daafff49255ab700e07491376fe89f04fc998b91", - "ingest-package-policies": "2c0f7c72d211bb7d3076ce2fc0bd368f9c16d274", + "ingest-package-policies": "53a94064674835fdb35e5186233bcd7052eabd22", "ingest_manager_settings": "91445219e7115ff0c45d1dabd5d614a80b421797", "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", diff --git a/x-pack/plugins/fleet/common/constants/mappings.ts b/x-pack/plugins/fleet/common/constants/mappings.ts index f804dc872e0d18..6499da7f86cc9a 100644 --- a/x-pack/plugins/fleet/common/constants/mappings.ts +++ b/x-pack/plugins/fleet/common/constants/mappings.ts @@ -6,7 +6,7 @@ */ /** - * ATTENTION: Mappings for Fleet are defined in the ElasticSearch repo. + * ATTENTION: Mappings for Fleet are defined in the Elasticsearch repo. * * The following mappings declared here closely mirror them * But they are only used to perform validation on the endpoints using ListWithKuery @@ -54,6 +54,7 @@ export const PACKAGE_POLICIES_MAPPINGS = { is_managed: { type: 'boolean' }, policy_id: { type: 'keyword' }, policy_ids: { type: 'keyword' }, + output_id: { type: 'keyword' }, package: { properties: { name: { type: 'keyword' }, diff --git a/x-pack/plugins/fleet/common/constants/output.ts b/x-pack/plugins/fleet/common/constants/output.ts index 8ddb8ed4d2f064..fb01ba991d3d26 100644 --- a/x-pack/plugins/fleet/common/constants/output.ts +++ b/x-pack/plugins/fleet/common/constants/output.ts @@ -29,6 +29,7 @@ export const DEFAULT_OUTPUT: NewOutput = { export const SERVERLESS_DEFAULT_OUTPUT_ID = 'es-default-output'; export const LICENCE_FOR_PER_POLICY_OUTPUT = 'platinum'; +export const LICENCE_FOR_OUTPUT_PER_INTEGRATION = 'enterprise'; /** * Kafka constants diff --git a/x-pack/plugins/fleet/common/constants/package_policy.ts b/x-pack/plugins/fleet/common/constants/package_policy.ts index 1645d1a86efb72..00b41a8a29de2f 100644 --- a/x-pack/plugins/fleet/common/constants/package_policy.ts +++ b/x-pack/plugins/fleet/common/constants/package_policy.ts @@ -13,3 +13,5 @@ export const inputsFormat = { Simplified: 'simplified', Legacy: 'legacy', } as const; + +export const LICENCE_FOR_MULTIPLE_AGENT_POLICIES = 'enterprise'; diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index cf3ee35fca6df4..727ef4c30f4fdb 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -7484,8 +7484,7 @@ "type": "string" }, "output_id": { - "type": "string", - "deprecated": true + "type": "string" }, "inputs": { "type": "array", diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index ad592b9ea18479..7a19615cfe1da3 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -4804,7 +4804,6 @@ components: type: string output_id: type: string - deprecated: true inputs: type: array items: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml index 29a09174385ec5..956f51a8016f54 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/new_package_policy.yaml @@ -22,7 +22,6 @@ properties: type: string output_id: type: string - deprecated: true inputs: type: array items: diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/update_package_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/update_package_policy.yaml index 795d92ff1d4a7d..f06a2c9ea49f3a 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/update_package_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/update_package_policy.yaml @@ -23,8 +23,6 @@ properties: type: string output_id: type: string - description: Not supported output can be set at the agent policy level only - deprecated: true inputs: type: array items: diff --git a/x-pack/plugins/fleet/common/services/__snapshots__/simplified_package_policy_helper.test.ts.snap b/x-pack/plugins/fleet/common/services/__snapshots__/simplified_package_policy_helper.test.ts.snap index 5d747ebd88ebfe..7c549b030a3378 100644 --- a/x-pack/plugins/fleet/common/services/__snapshots__/simplified_package_policy_helper.test.ts.snap +++ b/x-pack/plugins/fleet/common/services/__snapshots__/simplified_package_policy_helper.test.ts.snap @@ -228,6 +228,7 @@ Object { ], "name": "nginx-1", "namespace": "default", + "output_id": "output123", "package": Object { "name": "nginx", "title": "Nginx", diff --git a/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.test.ts b/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.test.ts index 0cde9d003dbb19..ff9d6eac7490fb 100644 --- a/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.test.ts +++ b/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.test.ts @@ -37,6 +37,7 @@ describe('toPackagePolicy', () => { namespace: 'default', policy_id: 'policy123', policy_ids: ['policy123'], + output_id: 'output123', description: 'Test description', inputs: { 'nginx-logfile': { diff --git a/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.ts b/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.ts index 98dee1021fe213..8d616bf4cae11a 100644 --- a/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.ts +++ b/x-pack/plugins/fleet/common/services/simplified_package_policy_helper.ts @@ -43,6 +43,7 @@ export interface SimplifiedPackagePolicy { id?: string; policy_id?: string; policy_ids: string[]; + output_id?: string; namespace: string; name: string; description?: string; @@ -147,6 +148,7 @@ export function simplifiedPackagePolicytoNewPackagePolicy( const { policy_id: policyId, policy_ids: policyIds, + output_id: outputId, namespace, name, description, @@ -161,6 +163,10 @@ export function simplifiedPackagePolicytoNewPackagePolicy( description ); + if (outputId) { + packagePolicy.output_id = outputId; + } + if (packagePolicy.package && options?.experimental_data_stream_features) { packagePolicy.package.experimental_data_stream_features = options.experimental_data_stream_features; diff --git a/x-pack/plugins/fleet/common/types/models/package_policy.ts b/x-pack/plugins/fleet/common/types/models/package_policy.ts index 1b8a407ff8dd92..eb054ade02114a 100644 --- a/x-pack/plugins/fleet/common/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/package_policy.ts @@ -81,6 +81,8 @@ export interface NewPackagePolicy { /** @deprecated */ policy_id?: string; policy_ids: string[]; + // Nullable to allow user to reset to default outputs + output_id?: string | null; package?: PackagePolicyPackage; inputs: NewPackagePolicyInput[]; vars?: PackagePolicyConfigRecord; diff --git a/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts b/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts index ff190f0a556cd5..8b74a3142fa973 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts @@ -63,6 +63,7 @@ export type PostDeletePackagePoliciesResponse = Array<{ package?: PackagePolicyPackage; policy_id?: string; policy_ids?: string[]; + output_id?: string; // Support generic errors statusCode?: number; body?: { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/hooks.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/hooks.tsx index 55b8ac90c749c3..c63339d682bb71 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/hooks.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/hooks.tsx @@ -8,6 +8,10 @@ import { useMemo } from 'react'; import { useHistory } from 'react-router-dom'; +import { LICENCE_FOR_OUTPUT_PER_INTEGRATION } from '../../../../../../../../../common/constants'; +import { getAllowedOutputTypesForIntegration } from '../../../../../../../../../common/services/output_helpers'; +import { useGetOutputs, useLicense } from '../../../../../../hooks'; + export function useDataStreamId() { const history = useHistory(); @@ -16,3 +20,21 @@ export function useDataStreamId() { return searchParams.get('datastreamId') ?? undefined; }, [history.location.search]); } + +export function useOutputs(packageName: string) { + const licenseService = useLicense(); + const canUseOutputPerIntegration = licenseService.hasAtLeast(LICENCE_FOR_OUTPUT_PER_INTEGRATION); + const { data: outputsData, isLoading } = useGetOutputs(); + const allowedOutputTypes = getAllowedOutputTypesForIntegration(packageName); + const allowedOutputs = useMemo(() => { + if (!outputsData || !canUseOutputPerIntegration) { + return []; + } + return outputsData.items.filter((output) => allowedOutputTypes.includes(output.type)); + }, [allowedOutputTypes, canUseOutputPerIntegration, outputsData]); + return { + isLoading, + canUseOutputPerIntegration, + allowedOutputs, + }; +} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx index c312b48a2d290a..43c3f8092e9218 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/step_define_package_policy.tsx @@ -20,6 +20,7 @@ import { EuiLink, EuiCallOut, EuiSpacer, + EuiSelect, } from '@elastic/eui'; import styled from 'styled-components'; @@ -32,6 +33,7 @@ import { isAdvancedVar } from '../../services'; import type { PackagePolicyValidationResults } from '../../services'; import { PackagePolicyInputVarField } from './components'; +import { useOutputs } from './components/hooks'; // on smaller screens, fields should be displayed in one column const FormGroupResponsiveFields = styled(EuiDescribedFormGroup)` @@ -81,6 +83,14 @@ export const StepDefinePackagePolicy: React.FunctionComponent<{ }); } + // Outputs + const { + isLoading: isOutputsLoading, + canUseOutputPerIntegration, + allowedOutputs, + } = useOutputs(packageInfo.name); + + // Managed policy const isManaged = packagePolicy.is_managed; return validationResults ? ( @@ -245,6 +255,7 @@ export const StepDefinePackagePolicy: React.FunctionComponent<{ {isShowingAdvanced ? ( + {/* Namespace */} + + {/* Output */} + {canUseOutputPerIntegration && ( + + + } + helpText={ + + } + > + ({ + value: output.id, + text: output.name, + })), + ]} + value={packagePolicy.output_id || ''} + onChange={(e) => { + updatePackagePolicy({ + output_id: e.target.value.trim() || null, + }); + }} + /> + + + )} + + {/* Data retention settings info */} = ({ return packagePolicy.policy_ids.length || 0; }, []); + const { data: outputsData, isLoading: isOutputsLoading } = useGetOutputs(); + const { output: defaultOutputData } = useDefaultOutput(); + const outputNamesById = useMemo(() => { + const outputs = outputsData?.items ?? []; + return outputs.reduce>((acc, output) => { + acc[output.id] = output.name; + return acc; + }, {}); + }, [outputsData]); + const columns = useMemo( (): EuiInMemoryTableProps['columns'] => [ { @@ -115,6 +127,7 @@ export const PackagePoliciesTable: React.FunctionComponent = ({ name: i18n.translate('xpack.fleet.policyDetails.packagePoliciesTable.nameColumnTitle', { defaultMessage: 'Integration policy', }), + width: '35%', render: (value: string, packagePolicy: InMemoryPackagePolicy) => ( @@ -278,10 +291,67 @@ export const PackagePoliciesTable: React.FunctionComponent = ({ ); }, }, + { + field: 'output_id', + name: i18n.translate('xpack.fleet.policyDetails.packagePoliciesTable.outputColumnTitle', { + defaultMessage: 'Output', + }), + render: (outputId: InMemoryPackagePolicy['output_id']) => { + if (isOutputsLoading) { + return null; + } + if (outputId) { + return {outputNamesById[outputId] || outputId}; + } + if (agentPolicy.data_output_id) { + return ( + <> + + {outputNamesById[agentPolicy.data_output_id] || agentPolicy.data_output_id} + +   + + + ); + } + if (defaultOutputData) { + return ( + <> + + {outputNamesById[defaultOutputData.id] || defaultOutputData.id} + +   + + + ); + } + }, + }, { name: i18n.translate('xpack.fleet.policyDetails.packagePoliciesTable.actionsColumnTitle', { defaultMessage: 'Actions', }), + width: '70px', actions: [ { render: (packagePolicy: InMemoryPackagePolicy) => { @@ -309,8 +379,11 @@ export const PackagePoliciesTable: React.FunctionComponent = ({ agentPolicy, canUseMultipleAgentPolicies, canReadAgentPolicies, - canWriteIntegrationPolicies, getSharedPoliciesNumber, + canWriteIntegrationPolicies, + isOutputsLoading, + defaultOutputData, + outputNamesById, ] ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/use_fleet_proxy_form.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/use_fleet_proxy_form.tsx index 2a4250bd9707a5..2d8a5b4aa1952a 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/use_fleet_proxy_form.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/edit_fleet_proxy_flyout/use_fleet_proxy_form.tsx @@ -33,7 +33,7 @@ const ConfirmTitle = () => ( const ConfirmDescription: React.FunctionComponent = ({}) => ( ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx index 8df533f0206b77..95a94848f47940 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx @@ -11,10 +11,6 @@ import { createFleetTestRendererMock } from '../../../../../../mock'; import { useFleetServerHostsForm } from './use_fleet_server_host_form'; -jest.mock('../../services/agent_and_policies_count', () => ({ - ...jest.requireActual('../../services/agent_and_policies_count'), - getAgentAndPolicyCount: () => ({ agentCount: 0, agentPolicyCount: 0 }), -})); jest.mock('../../hooks/use_confirm_modal', () => ({ ...jest.requireActual('../../hooks/use_confirm_modal'), useConfirmModal: () => ({ confirm: () => true }), diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx index 7e8cdac388cfe5..8720ede4f04b8f 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx @@ -5,17 +5,24 @@ * 2.0. */ -import { sendGetAgentPolicies, sendGetAgents } from '../../../hooks'; +import { sendGetAgentPolicies, sendGetPackagePolicies, sendGetAgents } from '../../../hooks'; import type { Output } from '../../../types'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; +import { + AGENT_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, + SO_SEARCH_LIMIT, +} from '../../../constants'; export async function getAgentAndPolicyCountForOutput(output: Output) { - let kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${output.id}" or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id:"${output.id}"`; + let agentPolicyKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${output.id}" or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id:"${output.id}"`; + const packagePolicyKuery = `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.output_id:"${output.id}"`; + if (output.is_default) { - kuery += ` or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)`; + agentPolicyKuery += ` or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)`; } + const agentPolicies = await sendGetAgentPolicies({ - kuery, + kuery: agentPolicyKuery, page: 1, perPage: SO_SEARCH_LIMIT, }); @@ -23,7 +30,26 @@ export async function getAgentAndPolicyCountForOutput(output: Output) { if (agentPolicies.error) { throw agentPolicies.error; } - const agentPolicyCount = agentPolicies.data?.items?.length ?? 0; + + const packagePolicies = await sendGetPackagePolicies({ + kuery: packagePolicyKuery, + page: 1, + perPage: SO_SEARCH_LIMIT, + }); + + if (packagePolicies.error) { + throw agentPolicies.error; + } + + const agentPolicyIds = (agentPolicies.data?.items || []).map((policy) => policy.id); + const agentPolicyIdsFromPackagePolicies = (packagePolicies.data?.items || []).reduce( + (acc: string[], packagePolicy) => { + return [...acc, ...(packagePolicy.policy_ids || [])]; + }, + [] + ); + const uniqueAgentPolicyIds = new Set([...agentPolicyIds, ...agentPolicyIdsFromPackagePolicies]); + const agentPolicyCount = uniqueAgentPolicyIds.size; let agentCount = 0; if (agentPolicyCount > 0) { @@ -31,7 +57,7 @@ export async function getAgentAndPolicyCountForOutput(output: Output) { page: 1, perPage: 0, // We only need the count here showInactive: false, - kuery: agentPolicies.data?.items.map((policy) => `policy_id:"${policy.id}"`).join(' or '), + kuery: [...uniqueAgentPolicyIds].map((id) => `policy_id:"${id}"`).join(' or '), }); if (agents.error) { @@ -43,28 +69,3 @@ export async function getAgentAndPolicyCountForOutput(output: Output) { return { agentPolicyCount, agentCount }; } - -export async function getAgentAndPolicyCount() { - const agentPolicies = await sendGetAgentPolicies({ - perPage: 0, - }); - - if (agentPolicies.error) { - throw agentPolicies.error; - } - const agentPolicyCount = agentPolicies.data?.total ?? 0; - - const agents = await sendGetAgents({ - page: 1, - perPage: 0, // We only need the count here - showInactive: false, - }); - - if (agents.error) { - throw agents.error; - } - - const agentCount = agents.data?.total ?? 0; - - return { agentPolicyCount, agentCount }; -} diff --git a/x-pack/plugins/fleet/public/hooks/use_multiple_agent_policies.ts b/x-pack/plugins/fleet/public/hooks/use_multiple_agent_policies.ts index 2adf814e8ffba8..b85b944c6ee00b 100644 --- a/x-pack/plugins/fleet/public/hooks/use_multiple_agent_policies.ts +++ b/x-pack/plugins/fleet/public/hooks/use_multiple_agent_policies.ts @@ -5,12 +5,11 @@ * 2.0. */ +import { LICENCE_FOR_MULTIPLE_AGENT_POLICIES } from '../../common/constants'; import { ExperimentalFeaturesService } from '../services'; import { useLicense } from './use_license'; -export const LICENCE_FOR_MULTIPLE_AGENT_POLICIES = 'enterprise'; - export function useMultipleAgentPolicies() { const licenseService = useLicense(); const { enableReusableIntegrationPolicies } = ExperimentalFeaturesService.get(); diff --git a/x-pack/plugins/fleet/server/errors/index.ts b/x-pack/plugins/fleet/server/errors/index.ts index e2f8b883804841..80d8116baaaa33 100644 --- a/x-pack/plugins/fleet/server/errors/index.ts +++ b/x-pack/plugins/fleet/server/errors/index.ts @@ -65,6 +65,8 @@ export class PackagePolicyNameExistsError extends FleetError {} export class BundledPackageLocationNotFoundError extends FleetError {} export class PackagePolicyRequestError extends FleetError {} +export class PackagePolicyMultipleAgentPoliciesError extends FleetError {} +export class PackagePolicyOutputError extends FleetError {} export class EnrollmentKeyNameExistsError extends FleetError {} export class HostedAgentPolicyRestrictionRelatedError extends FleetError { diff --git a/x-pack/plugins/fleet/server/mocks/index.ts b/x-pack/plugins/fleet/server/mocks/index.ts index 9e517ad928ba3c..9dfb920251e76e 100644 --- a/x-pack/plugins/fleet/server/mocks/index.ts +++ b/x-pack/plugins/fleet/server/mocks/index.ts @@ -182,6 +182,7 @@ export const createPackagePolicyServiceMock = (): jest.Mocked; @@ -202,6 +201,7 @@ describe('When calling package policy', () => { }; beforeEach(() => { + jest.spyOn(licenseService, 'hasAtLeast').mockClear(); // @ts-ignore const postMock = routerMock.versioned.post.mock; // @ts-ignore @@ -221,29 +221,6 @@ describe('When calling package policy', () => { }, }); }); - - it('should throw if no enterprise license and multiple policy_ids is provided', async () => { - const request = getCreateKibanaRequest({ ...newPolicy, policy_ids: ['1', '2'] } as any); - await createPackagePolicyHandler(context, request as any, response); - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 400, - body: { - message: 'Reusable integration policies are only available with an Enterprise license', - }, - }); - }); - - it('should not throw if enterprise license and multiple policy_ids is provided', async () => { - jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); - const request = getCreateKibanaRequest({ ...newPolicy, policy_ids: ['1', '2'] } as any); - await createPackagePolicyHandler(context, request as any, response); - expect(response.customError).not.toHaveBeenCalledWith({ - statusCode: 400, - body: { - message: 'Reusable integration policies are only available with an Enterprise license', - }, - }); - }); }); describe('Update api handler', () => { @@ -308,6 +285,7 @@ describe('When calling package policy', () => { }); beforeEach(() => { + jest.spyOn(licenseService, 'hasAtLeast').mockClear(); packagePolicyServiceMock.update.mockImplementation((soClient, esClient, policyId, newData) => Promise.resolve(newData as PackagePolicy) ); @@ -393,58 +371,6 @@ describe('When calling package policy', () => { }); }); - it('should throw if no enterprise license and multiple policy_ids is provided', async () => { - jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(false); - const request = getUpdateKibanaRequest({ policy_ids: ['1', '2'] } as any); - await routeHandler(context, request, response); - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 400, - body: { - message: 'Reusable integration policies are only available with an Enterprise license', - }, - }); - }); - - it('should not throw if enterprise license and multiple policy_ids is provided', async () => { - jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ enableReusableIntegrationPolicies: true } as any); - const request = getUpdateKibanaRequest({ policy_ids: ['1', '2'] } as any); - await routeHandler(context, request, response); - expect(response.ok).toHaveBeenCalled(); - }); - - it('should throw if enterprise license and feature flag is disabled and multiple policy_ids is provided', async () => { - jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ enableReusableIntegrationPolicies: false } as any); - const request = getUpdateKibanaRequest({ policy_ids: ['1', '2'] } as any); - await routeHandler(context, request, response); - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 400, - body: { - message: 'Reusable integration policies are not supported', - }, - }); - }); - - it('should throw if empty policy_ids are provided', async () => { - jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ enableReusableIntegrationPolicies: true } as any); - const request = getUpdateKibanaRequest({ policy_ids: [] } as any); - await routeHandler(context, request, response); - expect(response.customError).toHaveBeenCalledWith({ - statusCode: 400, - body: { - message: 'At least one agent policy id must be provided', - }, - }); - }); - it('should rename the agentless agent policy to sync with the package policy name if agentless is enabled', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); jest diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts index 24872b2db72f20..31e38125dead5d 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts @@ -63,7 +63,6 @@ import { import type { SimplifiedPackagePolicy } from '../../../common/services/simplified_package_policy_helper'; import { - canUseMultipleAgentPolicies, isSimplifiedCreatePackagePolicyRequest, removeFieldsFromInputSchema, renameAgentlessAgentPolicy, @@ -242,21 +241,12 @@ export const createPackagePolicyHandler: FleetRequestHandler< const authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request, user?.username); let wasPackageAlreadyInstalled = false; - if ('output_id' in newPolicy) { - // TODO Remove deprecated APIs https://github.com/elastic/kibana/issues/121485 - delete newPolicy.output_id; - } const spaceId = fleetContext.spaceId; try { if (!newPolicy.policy_id && (!newPolicy.policy_ids || newPolicy.policy_ids.length === 0)) { throw new PackagePolicyRequestError('Either policy_id or policy_ids must be provided'); } - const { canUseReusablePolicies, errorMessage } = canUseMultipleAgentPolicies(); - if ((newPolicy.policy_ids ?? []).length > 1 && !canUseReusablePolicies) { - throw new PackagePolicyRequestError(errorMessage); - } - let newPackagePolicy: NewPackagePolicy; if (isSimplifiedCreatePackagePolicyRequest(newPolicy)) { if (!pkg) { @@ -369,11 +359,6 @@ export const updatePackagePolicyHandler: FleetRequestHandler< try { const { force, package: pkg, ...body } = request.body; - // TODO Remove deprecated APIs https://github.com/elastic/kibana/issues/121485 - if ('output_id' in body) { - delete body.output_id; - } - let newData: NewPackagePolicy; if ( @@ -420,10 +405,6 @@ export const updatePackagePolicyHandler: FleetRequestHandler< } } newData.inputs = alignInputsAndStreams(newData.inputs); - const { canUseReusablePolicies, errorMessage } = canUseMultipleAgentPolicies(); - if ((newData.policy_ids ?? []).length > 1 && !canUseReusablePolicies) { - throw new PackagePolicyRequestError(errorMessage); - } if (newData.policy_ids && newData.policy_ids.length === 0) { throw new PackagePolicyRequestError('At least one agent policy id must be provided'); diff --git a/x-pack/plugins/fleet/server/routes/package_policy/utils/index.ts b/x-pack/plugins/fleet/server/routes/package_policy/utils/index.ts index f2ffc641c36ab5..032dab4a07acc7 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/utils/index.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/utils/index.ts @@ -21,8 +21,7 @@ import type { PackagePolicyInput, NewPackagePolicyInput, } from '../../../types'; -import { appContextService } from '../../../services'; -import { agentPolicyService, licenseService } from '../../../services'; +import { agentPolicyService } from '../../../services'; import type { SimplifiedPackagePolicy } from '../../../../common/services/simplified_package_policy_helper'; import { PackagePolicyRequestError } from '../../../errors'; import type { NewPackagePolicyInputStream } from '../../../../common'; @@ -56,20 +55,6 @@ export function removeFieldsFromInputSchema( }); } -const LICENCE_FOR_MULTIPLE_AGENT_POLICIES = 'enterprise'; - -export function canUseMultipleAgentPolicies() { - const hasEnterpriseLicence = licenseService.hasAtLeast(LICENCE_FOR_MULTIPLE_AGENT_POLICIES); - const { enableReusableIntegrationPolicies } = appContextService.getExperimentalFeatures(); - - return { - canUseReusablePolicies: hasEnterpriseLicence && enableReusableIntegrationPolicies, - errorMessage: !hasEnterpriseLicence - ? 'Reusable integration policies are only available with an Enterprise license' - : 'Reusable integration policies are not supported', - }; -} - /** * If an agentless agent policy is associated with the package policy, * it will rename the agentless agent policy of a package policy to keep it in sync with the package policy name. diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index 4b76a952a0f3b4..f6fcae4de6505c 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -481,6 +481,7 @@ export const getSavedObjectTypes = ( is_managed: { type: 'boolean' }, policy_id: { type: 'keyword' }, policy_ids: { type: 'keyword' }, + output_id: { type: 'keyword' }, package: { properties: { name: { type: 'keyword' }, @@ -639,6 +640,16 @@ export const getSavedObjectTypes = ( }, ], }, + '14': { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + output_id: { type: 'keyword' }, + }, + }, + ], + }, }, migrations: { '7.10.0': migratePackagePolicyToV7100, diff --git a/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_5_0.ts b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_5_0.ts index cf835ec87c949a..d7e73d67a3c604 100644 --- a/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_5_0.ts +++ b/x-pack/plugins/fleet/server/saved_objects/migrations/to_v8_5_0.ts @@ -14,7 +14,6 @@ export const migratePackagePolicyToV850: SavedObjectMigrationFn { - // @ts-expect-error output_id property does not exists anymore delete packagePolicyDoc.attributes.output_id; return packagePolicyDoc; diff --git a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap index 86f8126c1c45ae..8518e43fdaf0d2 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap +++ b/x-pack/plugins/fleet/server/services/agent_policies/__snapshots__/full_agent_policy.test.ts.snap @@ -1,5 +1,173 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`getFullAgentPolicy should return the right outputs and permissions when package policies use their own outputs 1`] = ` +Object { + "agent": Object { + "download": Object { + "sourceURI": "http://default-registry.co", + }, + "features": Object {}, + "monitoring": Object { + "enabled": false, + "logs": false, + "metrics": false, + }, + "protection": Object { + "enabled": false, + "signing_key": "", + "uninstall_token_hash": "", + }, + }, + "fleet": Object { + "hosts": Array [ + "http://fleetserver:8220", + ], + }, + "id": "integration-output-policy", + "inputs": Array [ + Object { + "data_stream": Object { + "namespace": "policyspace", + }, + "id": "test-logs-package-policy-using-output", + "meta": Object { + "package": Object { + "name": "test_package", + "version": "0.0.0", + }, + }, + "name": "test-policy-1", + "package_policy_id": "package-policy-using-output", + "revision": 1, + "streams": Array [ + Object { + "data_stream": Object { + "dataset": "some-logs", + "type": "logs", + }, + "id": "test-logs", + }, + ], + "type": "test-logs", + "use_output": "test-remote-id", + }, + Object { + "data_stream": Object { + "namespace": "defaultspace", + }, + "id": "test-logs-package-policy-no-output", + "meta": Object { + "package": Object { + "name": "system", + "version": "1.0.0", + }, + }, + "name": "test-policy-2", + "package_policy_id": "package-policy-no-output", + "revision": 1, + "streams": Array [ + Object { + "data_stream": Object { + "dataset": "some-logs", + "type": "logs", + }, + "id": "test-logs", + }, + ], + "type": "test-logs", + "use_output": "data-output-id", + }, + ], + "output_permissions": Object { + "data-output-id": Object { + "_elastic_agent_checks": Object { + "cluster": Array [ + "monitor", + ], + }, + "package-policy-no-output": Object { + "indices": Array [ + Object { + "names": Array [ + "logs-some-logs-defaultspace", + ], + "privileges": Array [ + "auto_configure", + "create_doc", + ], + }, + ], + }, + }, + "default": Object { + "_elastic_agent_checks": Object { + "cluster": Array [ + "monitor", + ], + }, + "_elastic_agent_monitoring": Object { + "indices": Array [ + Object { + "names": Array [], + "privileges": Array [], + }, + ], + }, + }, + "test-remote-id": Object { + "_elastic_agent_checks": Object { + "cluster": Array [ + "monitor", + ], + }, + "package-policy-using-output": Object { + "indices": Array [ + Object { + "names": Array [ + "logs-some-logs-policyspace", + ], + "privileges": Array [ + "auto_configure", + "create_doc", + ], + }, + ], + }, + }, + }, + "outputs": Object { + "data-output-id": Object { + "hosts": Array [ + "http://es-data.co:9201", + ], + "preset": "balanced", + "type": "elasticsearch", + }, + "default": Object { + "hosts": Array [ + "http://127.0.0.1:9201", + ], + "preset": "balanced", + "type": "elasticsearch", + }, + "test-remote-id": Object { + "hosts": Array [ + "http://127.0.0.1:9201", + ], + "preset": "balanced", + "service_token": undefined, + "type": "remote_elasticsearch", + }, + }, + "revision": 1, + "secret_references": Array [], + "signed": Object { + "data": "", + "signature": "", + }, +} +`; + exports[`getFullAgentPolicy should support a different data output 1`] = ` Object { "agent": Object { diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts index 5701a60b56d037..6a084b5dde5865 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.test.ts @@ -401,6 +401,126 @@ describe('getFullAgentPolicy', () => { expect(agentPolicy?.outputs['test-remote-id']).toBeDefined(); }); + it('should return the right outputs and permissions when package policies use their own outputs', async () => { + mockedGetPackageInfo.mockResolvedValue({ + data_streams: [ + { + type: 'logs', + dataset: 'elastic_agent.metricbeat', + }, + { + type: 'metrics', + dataset: 'elastic_agent.metricbeat', + }, + { + type: 'logs', + dataset: 'elastic_agent.filebeat', + }, + { + type: 'metrics', + dataset: 'elastic_agent.filebeat', + }, + ], + } as PackageInfo); + mockAgentPolicy({ + id: 'integration-output-policy', + status: 'active', + package_policies: [ + { + id: 'package-policy-using-output', + name: 'test-policy-1', + namespace: 'policyspace', + enabled: true, + package: { name: 'test_package', version: '0.0.0', title: 'Test Package' }, + output_id: 'test-remote-id', + inputs: [ + { + type: 'test-logs', + enabled: true, + streams: [ + { + id: 'test-logs', + enabled: true, + data_stream: { type: 'logs', dataset: 'some-logs' }, + }, + ], + }, + { + type: 'test-metrics', + enabled: false, + streams: [ + { + id: 'test-logs', + enabled: false, + data_stream: { type: 'metrics', dataset: 'some-metrics' }, + }, + ], + }, + ], + created_at: '', + updated_at: '', + created_by: '', + updated_by: '', + revision: 1, + policy_id: '', + policy_ids: [''], + }, + { + id: 'package-policy-no-output', + name: 'test-policy-2', + namespace: '', + enabled: true, + package: { name: 'system', version: '1.0.0', title: 'System' }, + inputs: [ + { + type: 'test-logs', + enabled: true, + streams: [ + { + id: 'test-logs', + enabled: true, + data_stream: { type: 'logs', dataset: 'some-logs' }, + }, + ], + }, + { + type: 'test-metrics', + enabled: false, + streams: [ + { + id: 'test-logs', + enabled: false, + data_stream: { type: 'metrics', dataset: 'some-metrics' }, + }, + ], + }, + ], + created_at: '', + updated_at: '', + created_by: '', + updated_by: '', + revision: 1, + policy_id: '', + policy_ids: [''], + }, + ], + is_managed: false, + namespace: 'defaultspace', + revision: 1, + name: 'Policy', + updated_at: '2020-01-01', + updated_by: 'qwerty', + is_protected: false, + data_output_id: 'data-output-id', + }); + + const agentPolicy = await getFullAgentPolicy( + savedObjectsClientMock.create(), + 'integration-output-policy' + ); + expect(agentPolicy).toMatchSnapshot(); + }); + it('should return the sourceURI from the agent policy', async () => { mockAgentPolicy({ namespace: 'default', diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts index efc3a732149d64..0cfce9eb264f45 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts @@ -196,16 +196,46 @@ export async function getFullAgentPolicy( fullAgentPolicy.namespaces = [agentPolicy.space_id]; } - const dataPermissions = - (await storedPackagePoliciesToAgentPermissions( + const packagePoliciesByOutputId = Object.keys(fullAgentPolicy.outputs).reduce( + (acc: Record, outputId) => { + acc[outputId] = []; + return acc; + }, + {} + ); + (agentPolicy.package_policies || []).forEach((packagePolicy) => { + const packagePolicyDataOutput = packagePolicy.output_id + ? outputs.find((output) => output.id === packagePolicy.output_id) + : undefined; + if (packagePolicyDataOutput) { + packagePoliciesByOutputId[getOutputIdForAgentPolicy(packagePolicyDataOutput)].push( + packagePolicy + ); + } else { + packagePoliciesByOutputId[getOutputIdForAgentPolicy(dataOutput)].push(packagePolicy); + } + }); + + const dataPermissionsByOutputId = Object.keys(fullAgentPolicy.outputs).reduce( + (acc: Record, outputId) => { + acc[outputId] = {}; + return acc; + }, + {} + ); + for (const [outputId, packagePolicies] of Object.entries(packagePoliciesByOutputId)) { + const dataPermissions = await storedPackagePoliciesToAgentPermissions( packageInfoCache, agentPolicy.namespace, - agentPolicy.package_policies - )) || {}; - - dataPermissions._elastic_agent_checks = { - cluster: DEFAULT_CLUSTER_PERMISSIONS, - }; + packagePolicies + ); + dataPermissionsByOutputId[outputId] = { + _elastic_agent_checks: { + cluster: DEFAULT_CLUSTER_PERMISSIONS, + }, + ...(dataPermissions || {}), + }; + } const monitoringPermissions = await getMonitoringPermissions( soClient, @@ -233,8 +263,11 @@ export async function getFullAgentPolicy( Object.assign(permissions, monitoringPermissions); } - if (outputId === getOutputIdForAgentPolicy(dataOutput)) { - Object.assign(permissions, dataPermissions); + if ( + outputId === getOutputIdForAgentPolicy(dataOutput) || + packagePoliciesByOutputId[outputId].length > 0 + ) { + Object.assign(permissions, dataPermissionsByOutputId[outputId]); } outputPermissions[outputId] = permissions; diff --git a/x-pack/plugins/fleet/server/services/agent_policies/output_helpers.test.ts b/x-pack/plugins/fleet/server/services/agent_policies/output_helpers.test.ts index dfdcf26adaa4ed..0afef0170a99f1 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/output_helpers.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/output_helpers.test.ts @@ -13,7 +13,7 @@ import { appContextService } from '..'; import { outputService } from '../output'; import { validateOutputForPolicy } from '.'; -import { validateOutputForNewPackagePolicy } from './outputs_helpers'; +import { validateAgentPolicyOutputForIntegration } from './outputs_helpers'; jest.mock('../app_context'); jest.mock('../output'); @@ -254,14 +254,14 @@ describe('validateOutputForPolicy', () => { }); }); -describe('validateOutputForNewPackagePolicy', () => { - it('should not allow fleet_server integration to be added to a policy using a logstash output', async () => { +describe('validateAgentPolicyOutputForIntegration', () => { + it('should not allow fleet_server integration to be added or edited to a policy using a logstash output', async () => { mockHasLicence(true); mockedOutputService.get.mockResolvedValue({ type: 'logstash', } as any); await expect( - validateOutputForNewPackagePolicy( + validateAgentPolicyOutputForIntegration( savedObjectsClientMock.create(), { name: 'Agent policy', @@ -273,15 +273,29 @@ describe('validateOutputForNewPackagePolicy', () => { ).rejects.toThrow( 'Integration "fleet_server" cannot be added to agent policy "Agent policy" because it uses output type "logstash".' ); + await expect( + validateAgentPolicyOutputForIntegration( + savedObjectsClientMock.create(), + { + name: 'Agent policy', + data_output_id: 'test1', + monitoring_output_id: 'test1', + } as any, + 'fleet_server', + false + ) + ).rejects.toThrow( + 'Agent policy "Agent policy" uses output type "logstash" which cannot be used for integration "fleet_server".' + ); }); - it('should not allow apm integration to be added to a policy using a kafka output', async () => { + it('should not allow apm integration to be added or edited to a policy using a kafka output', async () => { mockHasLicence(true); mockedOutputService.get.mockResolvedValue({ type: 'kafka', } as any); await expect( - validateOutputForNewPackagePolicy( + validateAgentPolicyOutputForIntegration( savedObjectsClientMock.create(), { name: 'Agent policy', @@ -293,6 +307,20 @@ describe('validateOutputForNewPackagePolicy', () => { ).rejects.toThrow( 'Integration "apm" cannot be added to agent policy "Agent policy" because it uses output type "kafka".' ); + await expect( + validateAgentPolicyOutputForIntegration( + savedObjectsClientMock.create(), + { + name: 'Agent policy', + data_output_id: 'test1', + monitoring_output_id: 'test1', + } as any, + 'apm', + false + ) + ).rejects.toThrow( + 'Agent policy "Agent policy" uses output type "kafka" which cannot be used for integration "apm".' + ); }); it('should not allow synthetics integration to be added to a policy using a default logstash output', async () => { @@ -302,7 +330,7 @@ describe('validateOutputForNewPackagePolicy', () => { } as any); mockedOutputService.getDefaultDataOutputId.mockResolvedValue('default'); await expect( - validateOutputForNewPackagePolicy( + validateAgentPolicyOutputForIntegration( savedObjectsClientMock.create(), { name: 'Agent policy', @@ -320,7 +348,7 @@ describe('validateOutputForNewPackagePolicy', () => { type: 'logstash', } as any); - await validateOutputForNewPackagePolicy( + await validateAgentPolicyOutputForIntegration( savedObjectsClientMock.create(), { name: 'Agent policy', @@ -335,7 +363,7 @@ describe('validateOutputForNewPackagePolicy', () => { type: 'elasticsearch', } as any); - await validateOutputForNewPackagePolicy( + await validateAgentPolicyOutputForIntegration( savedObjectsClientMock.create(), { name: 'Agent policy', diff --git a/x-pack/plugins/fleet/server/services/agent_policies/outputs_helpers.ts b/x-pack/plugins/fleet/server/services/agent_policies/outputs_helpers.ts index 67f5a7772aa52a..66f45427601e6e 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/outputs_helpers.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/outputs_helpers.ts @@ -96,10 +96,11 @@ export async function validateOutputForPolicy( } } -export async function validateOutputForNewPackagePolicy( +export async function validateAgentPolicyOutputForIntegration( soClient: SavedObjectsClientContract, agentPolicy: AgentPolicy, - packageName: string + packageName: string, + isNewPackagePolicy: boolean = true ) { const allowedOutputTypeForPolicy = getAllowedOutputTypesForIntegration(packageName); @@ -109,9 +110,15 @@ export async function validateOutputForNewPackagePolicy( if (isOutputTypeRestricted) { const dataOutput = await getDataOutputForAgentPolicy(soClient, agentPolicy); if (!allowedOutputTypeForPolicy.includes(dataOutput.type)) { - throw new OutputInvalidError( - `Integration "${packageName}" cannot be added to agent policy "${agentPolicy.name}" because it uses output type "${dataOutput.type}".` - ); + if (isNewPackagePolicy) { + throw new OutputInvalidError( + `Integration "${packageName}" cannot be added to agent policy "${agentPolicy.name}" because it uses output type "${dataOutput.type}".` + ); + } else { + throw new OutputInvalidError( + `Agent policy "${agentPolicy.name}" uses output type "${dataOutput.type}" which cannot be used for integration "${packageName}".` + ); + } } } } diff --git a/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.test.ts b/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.test.ts index 40cda7583a3c15..9004d544f399db 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.test.ts @@ -222,6 +222,7 @@ describe('Fleet - storedPackagePoliciesToAgentInputs', () => { version: '0.0.0', }, inputs: [mockInput, mockInput2], + output_id: 'new-output', }, { ...mockPackagePolicy, @@ -243,7 +244,7 @@ describe('Fleet - storedPackagePoliciesToAgentInputs', () => { revision: 1, type: 'test-logs', data_stream: { namespace: 'default' }, - use_output: 'default', + use_output: 'new-output', meta: { package: { name: 'mock_package', @@ -270,7 +271,7 @@ describe('Fleet - storedPackagePoliciesToAgentInputs', () => { revision: 1, type: 'test-metrics', data_stream: { namespace: 'default' }, - use_output: 'default', + use_output: 'new-output', meta: { package: { name: 'mock_package', diff --git a/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.ts b/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.ts index d7f0c70a0786b7..807312fe5e7cb2 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/package_policies_to_agent_inputs.ts @@ -27,7 +27,7 @@ const isPolicyEnabled = (packagePolicy: PackagePolicy) => { export const storedPackagePolicyToAgentInputs = ( packagePolicy: PackagePolicy, packageInfo?: PackageInfo, - outputId: string = DEFAULT_OUTPUT.name, + agentPolicyOutputId: string = DEFAULT_OUTPUT.name, agentPolicyNamespace?: string, addFields?: FullAgentPolicyAddFields ): FullAgentPolicyInput[] => { @@ -62,7 +62,7 @@ export const storedPackagePolicyToAgentInputs = ( data_stream: { namespace: packagePolicy?.namespace || agentPolicyNamespace || 'default', // custom namespace has precedence on agent policy's one }, - use_output: outputId, + use_output: packagePolicy.output_id || agentPolicyOutputId, package_policy_id: packagePolicy.id, ...getFullInputStreams(input), }; @@ -140,7 +140,7 @@ export const getFullInputStreams = ( export const storedPackagePoliciesToAgentInputs = async ( packagePolicies: PackagePolicy[], packageInfoCache: Map, - outputId: string = DEFAULT_OUTPUT.name, + agentPolicyOutputId: string = DEFAULT_OUTPUT.name, agentPolicyNamespace?: string, globalDataTags?: GlobalDataTag[] ): Promise => { @@ -164,7 +164,7 @@ export const storedPackagePoliciesToAgentInputs = async ( ...storedPackagePolicyToAgentInputs( packagePolicy, packageInfo, - outputId, + agentPolicyOutputId, agentPolicyNamespace, addFields ) diff --git a/x-pack/plugins/fleet/server/services/agent_policies/related_saved_objects.ts b/x-pack/plugins/fleet/server/services/agent_policies/related_saved_objects.ts index 0108e9cd97721c..52dd34a757693b 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/related_saved_objects.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/related_saved_objects.ts @@ -35,11 +35,20 @@ export async function fetchRelatedSavedObjects( const monitoringOutputId = agentPolicy.monitoring_output_id || defaultMonitoringOutputId || dataOutputId; + const outputIds = uniq([ + dataOutputId, + monitoringOutputId, + ...(agentPolicy.package_policies || []).reduce((acc: string[], packagePolicy) => { + if (packagePolicy.output_id) { + acc.push(packagePolicy.output_id); + } + return acc; + }, []), + ]); + const [outputs, { host: downloadSourceUri, proxy_id: downloadSourceProxyId }, fleetServerHosts] = await Promise.all([ - outputService.bulkGet(soClient, uniq([dataOutputId, monitoringOutputId]), { - ignoreNotFound: true, - }), + outputService.bulkGet(soClient, outputIds, { ignoreNotFound: true }), getSourceUriForAgentPolicy(soClient, agentPolicy), getFleetServerHostsForAgentPolicy(soClient, agentPolicy).catch((err) => { appContextService diff --git a/x-pack/plugins/fleet/server/services/agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policy.test.ts index a5dbbc6b233b3b..2c2c747681887f 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.test.ts @@ -23,7 +23,7 @@ import type { NewAgentPolicy, PreconfiguredAgentPolicy, } from '../types'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../constants'; +import { AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../constants'; import { AGENT_POLICY_INDEX, SO_SEARCH_LIMIT } from '../../common'; @@ -43,32 +43,63 @@ import type { UninstallTokenServiceInterface } from './security/uninstall_token_ function getSavedObjectMock(agentPolicyAttributes: any) { const mock = savedObjectsClientMock.create(); + const mockPolicy = { + type: AGENT_POLICY_SAVED_OBJECT_TYPE, + references: [], + attributes: agentPolicyAttributes as AgentPolicy, + }; mock.get.mockImplementation(async (type: string, id: string) => { return { - type, id, - references: [], - attributes: agentPolicyAttributes as AgentPolicy, + ...mockPolicy, }; }); - mock.find.mockImplementation(async (options) => { + mock.bulkGet.mockImplementation(async (options) => { return { - saved_objects: [ - { - id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', - attributes: { - fleet_server_hosts: ['http://fleetserver:8220'], - }, - type: 'ingest_manager_settings', - score: 1, - references: [], - }, - ], - total: 1, - page: 1, - per_page: 1, + saved_objects: [], }; }); + mock.find.mockImplementation(async (options) => { + switch (options.type) { + case AGENT_POLICY_SAVED_OBJECT_TYPE: + return { + saved_objects: [ + { + id: 'agent-policy-id', + score: 1, + ...mockPolicy, + }, + ], + total: 1, + page: 1, + per_page: 1, + }; + case PACKAGE_POLICY_SAVED_OBJECT_TYPE: + return { + saved_objects: [], + total: 0, + page: 1, + per_page: 1, + }; + default: + return { + saved_objects: [ + { + id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', + attributes: { + fleet_server_hosts: ['http://fleetserver:8220'], + }, + type: 'ingest_manager_settings', + score: 1, + references: [], + }, + ], + total: 1, + page: 1, + per_page: 1, + }; + } + }); return mock; } @@ -754,12 +785,12 @@ describe('Agent policy', () => { [ expect.objectContaining({ attributes: expect.objectContaining({ - fleet_server_hosts: ['http://fleetserver:8220'], - revision: NaN, - updated_by: 'system', + monitoring_enabled: ['metrics'], }), - id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', - type: 'ingest_manager_settings', + id: 'agent-policy-id', + namespace: undefined, + type: 'ingest-agent-policies', + version: undefined, }), ], expect.objectContaining({ diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index d243ef8b60e168..42bede95986b6c 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -16,7 +16,7 @@ import type { SavedObjectsBulkUpdateObject, SavedObjectsBulkUpdateResponse, SavedObjectsClientContract, - SavedObjectsFindResult, + SavedObject, SavedObjectsUpdateResponse, } from '@kbn/core/server'; import { SavedObjectsUtils } from '@kbn/core/server'; @@ -41,6 +41,7 @@ import { import type { HTTPAuthorizationHeader } from '../../common/http_authorization_header'; import { + PACKAGE_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_SAVED_OBJECT_TYPE, AGENTS_PREFIX, FLEET_AGENT_POLICIES_SCHEMA_VERSION, @@ -56,6 +57,7 @@ import type { NewAgentPolicy, NewPackagePolicy, PackagePolicy, + PackagePolicySOAttributes, PostAgentPolicyCreateCallback, PostAgentPolicyUpdateCallback, PreconfiguredAgentPolicy, @@ -876,7 +878,7 @@ class AgentPolicyService { private async _bumpPolicies( internalSoClientWithoutSpaceExtension: SavedObjectsClientContract, esClient: ElasticsearchClient, - savedObjectsResults: Array>, + savedObjectsResults: Array>, options?: { user?: AuthenticatedUser } ): Promise> { const bumpedPolicies = savedObjectsResults.map( @@ -938,10 +940,12 @@ class AgentPolicyService { outputId: string, options?: { user?: AuthenticatedUser } ): Promise> { + const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); const internalSoClientWithoutSpaceExtension = appContextService.getInternalUserSOClientWithoutSpaceExtension(); - const currentPolicies = + // All agent policies directly using output + const agentPoliciesUsingOutput = await internalSoClientWithoutSpaceExtension.find({ type: SAVED_OBJECT_TYPE, fields: ['revision', 'data_output_id', 'monitoring_output_id', 'namespaces'], @@ -950,10 +954,47 @@ class AgentPolicyService { perPage: SO_SEARCH_LIMIT, namespaces: ['*'], }); + + // All package policies directly using output + const packagePoliciesUsingOutput = + await internalSoClientWithoutSpaceExtension.find({ + type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + fields: ['output_id', 'namespaces', 'policy_ids'], + searchFields: ['output_id'], + search: escapeSearchQueryPhrase(outputId), + perPage: SO_SEARCH_LIMIT, + namespaces: ['*'], + }); + + const agentPolicyIdsDirectlyUsingOutput = agentPoliciesUsingOutput.saved_objects.map( + (agentPolicySO) => agentPolicySO.id + ); + const agentPolicyIdsOfPackagePoliciesUsingOutput = + packagePoliciesUsingOutput.saved_objects.reduce((acc: Set, packagePolicySO) => { + const newIds = packagePolicySO.attributes.policy_ids.filter((policyId) => { + return !agentPolicyIdsDirectlyUsingOutput.includes(policyId); + }); + return new Set([...acc, ...newIds]); + }, new Set()); + + // Agent policies of the identified package policies, excluding ones already retrieved directly + const agentPoliciesOfPackagePoliciesUsingOutput = + await internalSoClientWithoutSpaceExtension.bulkGet( + [...agentPolicyIdsOfPackagePoliciesUsingOutput].map((id) => ({ + type: SAVED_OBJECT_TYPE, + id, + fields: ['revision', 'data_output_id', 'monitoring_output_id', 'namespaces'], + ...(useSpaceAwareness ? { namespaces: ['*'] } : {}), + })) + ); + return this._bumpPolicies( internalSoClientWithoutSpaceExtension, esClient, - currentPolicies.saved_objects, + [ + ...agentPoliciesUsingOutput.saved_objects, + ...agentPoliciesOfPackagePoliciesUsingOutput.saved_objects, + ], options ); } diff --git a/x-pack/plugins/fleet/server/services/output.test.ts b/x-pack/plugins/fleet/server/services/output.test.ts index 3bc9003162f448..0951657fae6dd0 100644 --- a/x-pack/plugins/fleet/server/services/output.test.ts +++ b/x-pack/plugins/fleet/server/services/output.test.ts @@ -19,10 +19,12 @@ import { OUTPUT_SAVED_OBJECT_TYPE } from '../constants'; import { outputService, outputIdToUuid } from './output'; import { appContextService } from './app_context'; import { agentPolicyService } from './agent_policy'; +import { packagePolicyService } from './package_policy'; import { auditLoggingService } from './audit_logging'; jest.mock('./app_context'); jest.mock('./agent_policy'); +jest.mock('./package_policy'); jest.mock('./audit_logging'); const mockedAuditLoggingService = auditLoggingService as jest.Mocked; @@ -43,6 +45,7 @@ mockedAppContextService.getLogger.mockImplementation(() => { mockedAppContextService.getExperimentalFeatures.mockReturnValue({} as any); const mockedAgentPolicyService = agentPolicyService as jest.Mocked; +const mockedPackagePolicyService = packagePolicyService as jest.Mocked; const CLOUD_ID = 'dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw=='; @@ -219,6 +222,7 @@ function getMockedSoClient( }); mockedAppContextService.getInternalUserSOClient.mockReturnValue(soClient); + mockedAppContextService.getInternalUserSOClientWithoutSpaceExtension.mockReturnValue(soClient); return soClient; } @@ -288,17 +292,23 @@ describe('Output Service', () => { } as unknown as ReturnType; beforeEach(() => { + mockedAgentPolicyService.getByIDs.mockResolvedValue([]); mockedAgentPolicyService.list.mockClear(); mockedAgentPolicyService.hasAPMIntegration.mockClear(); mockedAgentPolicyService.hasFleetServerIntegration.mockClear(); mockedAgentPolicyService.hasSyntheticsIntegration.mockClear(); mockedAgentPolicyService.removeOutputFromAll.mockReset(); + mockedPackagePolicyService.removeOutputFromAll.mockReset(); mockedAppContextService.getInternalUserSOClient.mockReset(); mockedAppContextService.getEncryptedSavedObjectsSetup.mockReset(); mockedAuditLoggingService.writeCustomSoAuditLog.mockReset(); mockedAgentPolicyService.update.mockReset(); }); + afterEach(() => { + mockedAgentPolicyService.getByIDs.mockClear(); + }); + describe('create', () => { describe('elasticsearch output', () => { it('works with a predefined id', async () => { @@ -1412,7 +1422,7 @@ describe('Output Service', () => { hosts: ['test:4343'], }) ).rejects.toThrowError( - 'Logstash output cannot be used with Fleet Server integration in fleet server policy. Please create a new ElasticSearch output.' + 'Logstash output cannot be used with Fleet Server integration in fleet server policy. Please create a new Elasticsearch output.' ); }); @@ -1428,7 +1438,7 @@ describe('Output Service', () => { hosts: ['test:4343'], }) ).rejects.toThrowError( - 'Logstash output cannot be used with Synthetics integration in synthetics policy. Please create a new ElasticSearch output.' + 'Logstash output cannot be used with Synthetics integration in synthetics policy. Please create a new Elasticsearch output.' ); }); @@ -1758,6 +1768,7 @@ describe('Output Service', () => { fromPreconfiguration: true, }); expect(mockedAgentPolicyService.removeOutputFromAll).toBeCalled(); + expect(mockedPackagePolicyService.removeOutputFromAll).toBeCalled(); expect(soClient.delete).toBeCalled(); }); diff --git a/x-pack/plugins/fleet/server/services/output.ts b/x-pack/plugins/fleet/server/services/output.ts index f42867f0686bb9..2748ad78e765b9 100644 --- a/x-pack/plugins/fleet/server/services/output.ts +++ b/x-pack/plugins/fleet/server/services/output.ts @@ -38,6 +38,7 @@ import type { } from '../types'; import { AGENT_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, DEFAULT_OUTPUT, DEFAULT_OUTPUT_ID, OUTPUT_SAVED_OBJECT_TYPE, @@ -63,6 +64,7 @@ import { import type { OutputType } from '../types'; import { agentPolicyService } from './agent_policy'; +import { packagePolicyService } from './package_policy'; import { appContextService } from './app_context'; import { escapeSearchQueryPhrase } from './saved_object'; import { auditLoggingService } from './audit_logging'; @@ -124,40 +126,63 @@ function outputSavedObjectToOutput(so: SavedObject): Output }; } -async function getAgentPoliciesPerOutput( - soClient: SavedObjectsClientContract, - outputId?: string, - isDefault?: boolean -) { - let kuery: string; +async function getAgentPoliciesPerOutput(outputId?: string, isDefault?: boolean) { + const internalSoClientWithoutSpaceExtension = + appContextService.getInternalUserSOClientWithoutSpaceExtension(); + let agentPoliciesKuery: string; + const packagePoliciesKuery: string = `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.output_id:"${outputId}"`; if (outputId) { if (isDefault) { - kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}" or not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; + agentPoliciesKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}" or not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; } else { - kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}"`; + agentPoliciesKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}"`; } } else { if (isDefault) { - kuery = `not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; + agentPoliciesKuery = `not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; } else { return; } } - const agentPolicySO = await agentPolicyService.list(soClient, { - kuery, + // Get agent policies directly using output + const directAgentPolicies = await agentPolicyService.list(internalSoClientWithoutSpaceExtension, { + kuery: agentPoliciesKuery, perPage: SO_SEARCH_LIMIT, withPackagePolicies: true, }); - return agentPolicySO?.items; + const directAgentPolicyIds = directAgentPolicies?.items.map((policy) => policy.id); + + // Get package policies using output and derive agent policies from that which + // are not already identfied above. The IDs cannot be used as part of the kuery + // above since the underlying saved object client .find() only filters on attributes + const packagePolicySOs = await packagePolicyService.list(internalSoClientWithoutSpaceExtension, { + kuery: packagePoliciesKuery, + perPage: SO_SEARCH_LIMIT, + }); + const agentPolicyIdsFromPackagePolicies = [ + ...new Set( + packagePolicySOs?.items.reduce((acc: string[], packagePolicy) => { + return [ + ...acc, + ...packagePolicy.policy_ids.filter((id) => !directAgentPolicyIds?.includes(id)), + ]; + }, []) + ), + ]; + const agentPoliciesFromPackagePolicies = await agentPolicyService.getByIDs( + internalSoClientWithoutSpaceExtension, + agentPolicyIdsFromPackagePolicies, + { + withPackagePolicies: true, + } + ); + + return [...directAgentPolicies.items, ...agentPoliciesFromPackagePolicies]; } -async function validateLogstashOutputNotUsedInAPMPolicy( - soClient: SavedObjectsClientContract, - outputId?: string, - isDefault?: boolean -) { - const agentPolicies = await getAgentPoliciesPerOutput(soClient, outputId, isDefault); +async function validateLogstashOutputNotUsedInAPMPolicy(outputId?: string, isDefault?: boolean) { + const agentPolicies = await getAgentPoliciesPerOutput(outputId, isDefault); // Validate no policy with APM use that policy if (agentPolicies) { @@ -169,16 +194,19 @@ async function validateLogstashOutputNotUsedInAPMPolicy( } } -async function findPoliciesWithFleetServerOrSynthetics( - soClient: SavedObjectsClientContract, - outputId?: string, - isDefault?: boolean -) { +async function findPoliciesWithFleetServerOrSynthetics(outputId?: string, isDefault?: boolean) { + const internalSoClientWithoutSpaceExtension = + appContextService.getInternalUserSOClientWithoutSpaceExtension(); + // find agent policies by outputId // otherwise query all the policies const agentPolicies = outputId - ? await getAgentPoliciesPerOutput(soClient, outputId, isDefault) - : (await agentPolicyService.list(soClient, { withPackagePolicies: true }))?.items; + ? await getAgentPoliciesPerOutput(outputId, isDefault) + : ( + await agentPolicyService.list(internalSoClientWithoutSpaceExtension, { + withPackagePolicies: true, + }) + )?.items; const policiesWithFleetServer = agentPolicies?.filter((policy) => agentPolicyService.hasFleetServerIntegration(policy)) || []; @@ -199,13 +227,12 @@ function validateOutputNotUsedInPolicy( dataOutputType )} output cannot be used with ${integrationName} integration in ${ agentPolicy.name - }. Please create a new ElasticSearch output.` + }. Please create a new Elasticsearch output.` ); } } async function validateTypeChanges( - soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, id: string, data: Nullable>, @@ -213,12 +240,14 @@ async function validateTypeChanges( defaultDataOutputId: string | null, fromPreconfiguration: boolean ) { + const internalSoClientWithoutSpaceExtension = + appContextService.getInternalUserSOClientWithoutSpaceExtension(); const mergedIsDefault = data.is_default ?? originalOutput.is_default; const { policiesWithFleetServer, policiesWithSynthetics } = - await findPoliciesWithFleetServerOrSynthetics(soClient, id, mergedIsDefault); + await findPoliciesWithFleetServerOrSynthetics(id, mergedIsDefault); if (data.type === outputType.Logstash || originalOutput.type === outputType.Logstash) { - await validateLogstashOutputNotUsedInAPMPolicy(soClient, id, mergedIsDefault); + await validateLogstashOutputNotUsedInAPMPolicy(id, mergedIsDefault); } // prevent changing an ES output to logstash or kafka if it's used by fleet server or synthetics policies if ( @@ -230,7 +259,7 @@ async function validateTypeChanges( validateOutputNotUsedInPolicy(policiesWithSynthetics, data.type, 'Synthetics'); } await updateAgentPoliciesDataOutputId( - soClient, + internalSoClientWithoutSpaceExtension, esClient, data, mergedIsDefault, @@ -274,7 +303,7 @@ class OutputService { return appContextService.getInternalUserSOClient(fakeRequest); } - private async _getDefaultDataOutputsSO(soClient: SavedObjectsClientContract) { + private async _getDefaultDataOutputsSO() { const outputs = await this.encryptedSoClient.find({ type: OUTPUT_SAVED_OBJECT_TYPE, searchFields: ['is_default'], @@ -403,7 +432,7 @@ class OutputService { } public async getDefaultDataOutputId(soClient: SavedObjectsClientContract) { - const outputs = await this._getDefaultDataOutputsSO(soClient); + const outputs = await this._getDefaultDataOutputsSO(); if (!outputs.saved_objects.length) { return null; @@ -454,7 +483,7 @@ class OutputService { const defaultDataOutputId = await this.getDefaultDataOutputId(soClient); if (output.type === outputType.Logstash || output.type === outputType.Kafka) { - await validateLogstashOutputNotUsedInAPMPolicy(soClient, undefined, data.is_default); + await validateLogstashOutputNotUsedInAPMPolicy(undefined, data.is_default); if (!appContextService.getEncryptedSavedObjectsSetup()?.canEncrypt) { throw new FleetEncryptedSavedObjectEncryptionKeyRequired( `${output.type} output needs encrypted saved object api key to be set` @@ -462,7 +491,7 @@ class OutputService { } } const { policiesWithFleetServer, policiesWithSynthetics } = - await findPoliciesWithFleetServerOrSynthetics(soClient); + await findPoliciesWithFleetServerOrSynthetics(); await updateAgentPoliciesDataOutputId( soClient, esClient, @@ -740,8 +769,17 @@ class OutputService { throw new OutputUnauthorizedError(`Default monitoring output ${id} cannot be deleted.`); } + const internalSoClientWithoutSpaceExtension = + appContextService.getInternalUserSOClientWithoutSpaceExtension(); + + await packagePolicyService.removeOutputFromAll( + internalSoClientWithoutSpaceExtension, + appContextService.getInternalUserESClient(), + id + ); + await agentPolicyService.removeOutputFromAll( - soClient, + internalSoClientWithoutSpaceExtension, appContextService.getInternalUserESClient(), id ); @@ -808,7 +846,6 @@ class OutputService { const mergedType = data.type ?? originalOutput.type; const defaultDataOutputId = await this.getDefaultDataOutputId(soClient); await validateTypeChanges( - soClient, esClient, id, updateData, diff --git a/x-pack/plugins/fleet/server/services/package_policies/utils.test.ts b/x-pack/plugins/fleet/server/services/package_policies/utils.test.ts index 9bf58298b09d35..311bfeb339f20f 100644 --- a/x-pack/plugins/fleet/server/services/package_policies/utils.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policies/utils.test.ts @@ -4,10 +4,15 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { PackagePolicyMocks } from '../../mocks'; -import { mapPackagePolicySavedObjectToPackagePolicy } from './utils'; +import { appContextService } from '../app_context'; +import { licenseService } from '../license'; +import { outputService } from '../output'; + +import { mapPackagePolicySavedObjectToPackagePolicy, preflightCheckPackagePolicy } from './utils'; describe('Package Policy Utils', () => { describe('mapPackagePolicySavedObjectToPackagePolicy()', () => { @@ -38,6 +43,7 @@ describe('Package Policy Utils', () => { }, policy_id: '444-555-666', policy_ids: ['444-555-666'], + output_id: 'output-123', revision: 1, secret_references: [], updated_at: '2024-01-25T15:21:13.389Z', @@ -47,4 +53,94 @@ describe('Package Policy Utils', () => { }); }); }); + + describe('preflightCheckPackagePolicy', () => { + beforeEach(() => { + jest.spyOn(licenseService, 'hasAtLeast').mockClear(); + jest.spyOn(appContextService, 'getExperimentalFeatures').mockClear(); + }); + const soClient = savedObjectsClientMock.create(); + const testPolicy = { + name: 'Test Package Policy', + namespace: 'test', + enabled: true, + policy_ids: ['test'], + inputs: [], + package: { + name: 'test', + title: 'Test', + version: '0.0.1', + }, + }; + + it('should throw if no enterprise license and multiple policy_ids is provided', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(false); + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableReusableIntegrationPolicies: true } as any); + + await expect( + preflightCheckPackagePolicy(soClient, { ...testPolicy, policy_ids: ['1', '2'] }) + ).rejects.toThrowError( + 'Reusable integration policies are only available with an Enterprise license' + ); + }); + + it('should throw if enterprise license and multiple policy_ids is provided but no feature flag', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableReusableIntegrationPolicies: false } as any); + + await expect( + preflightCheckPackagePolicy(soClient, { ...testPolicy, policy_ids: ['1', '2'] }) + ).rejects.toThrowError('Reusable integration policies are not supported'); + }); + + it('should not throw if enterprise license and multiple policy_ids is provided', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableReusableIntegrationPolicies: true } as any); + await expect( + preflightCheckPackagePolicy(soClient, { ...testPolicy, policy_ids: ['1', '2'] }) + ).resolves.not.toThrow(); + }); + + it('should throw if no valid license and output_id is provided', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(false); + + await expect( + preflightCheckPackagePolicy(soClient, { ...testPolicy, output_id: 'some-output' }) + ).rejects.toThrowError('Output per integration is only available with an enterprise license'); + }); + + it('should throw if valid license and an incompatible output_id for the package is given', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + jest + .spyOn(outputService, 'get') + .mockResolvedValueOnce({ id: 'non-es-output', type: 'kafka' } as any); + + await expect( + preflightCheckPackagePolicy(soClient, { + ...testPolicy, + output_id: 'non-es-output', + package: { name: 'apm', version: '1.0.0', title: 'APM' }, + }) + ).rejects.toThrowError('Output type "kafka" is not usable with package "apm"'); + }); + + it('should not throw if valid license and valid output_id is provided', async () => { + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + jest + .spyOn(outputService, 'get') + .mockResolvedValueOnce({ id: 'es-output', type: 'elasticsearch' } as any); + await expect( + preflightCheckPackagePolicy(soClient, { + ...testPolicy, + output_id: 'es-output', + }) + ).resolves.not.toThrow(); + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/package_policies/utils.ts b/x-pack/plugins/fleet/server/services/package_policies/utils.ts index cf2d69c8874b96..61ff380fec559f 100644 --- a/x-pack/plugins/fleet/server/services/package_policies/utils.ts +++ b/x-pack/plugins/fleet/server/services/package_policies/utils.ts @@ -6,8 +6,18 @@ */ import type { SavedObject } from '@kbn/core-saved-objects-common/src/server_types'; +import type { SavedObjectsClientContract } from '@kbn/core/server'; -import type { PackagePolicy, PackagePolicySOAttributes } from '../../types'; +import { + LICENCE_FOR_OUTPUT_PER_INTEGRATION, + LICENCE_FOR_MULTIPLE_AGENT_POLICIES, +} from '../../../common/constants'; +import { getAllowedOutputTypesForIntegration } from '../../../common/services/output_helpers'; +import type { PackagePolicy, NewPackagePolicy, PackagePolicySOAttributes } from '../../types'; +import { PackagePolicyMultipleAgentPoliciesError, PackagePolicyOutputError } from '../../errors'; +import { licenseService } from '../license'; +import { outputService } from '../output'; +import { appContextService } from '../app_context'; export const mapPackagePolicySavedObjectToPackagePolicy = ({ /* eslint-disable @typescript-eslint/naming-convention */ @@ -21,6 +31,7 @@ export const mapPackagePolicySavedObjectToPackagePolicy = ({ is_managed, policy_id, policy_ids, + output_id, // `package` is a reserved keyword package: packageInfo, inputs, @@ -45,6 +56,7 @@ export const mapPackagePolicySavedObjectToPackagePolicy = ({ is_managed, policy_id, policy_ids, + output_id, package: packageInfo, inputs, vars, @@ -59,3 +71,69 @@ export const mapPackagePolicySavedObjectToPackagePolicy = ({ created_by, }; }; + +export async function preflightCheckPackagePolicy( + soClient: SavedObjectsClientContract, + packagePolicy: PackagePolicy | NewPackagePolicy +) { + // If package policy has multiple agent policies, check if they can be used + const { canUseReusablePolicies, errorMessage: canUseMultipleAgentPoliciesErrorMessage } = + canUseMultipleAgentPolicies(); + if ((packagePolicy.policy_ids ?? []).length > 1 && !canUseReusablePolicies) { + throw new PackagePolicyMultipleAgentPoliciesError(canUseMultipleAgentPoliciesErrorMessage); + } + + // If package policy has an output_id, check if it can be used + if (packagePolicy.output_id && packagePolicy.package) { + const { canUseOutputForIntegrationResult, errorMessage: outputForIntegrationErrorMessage } = + await canUseOutputForIntegration( + soClient, + packagePolicy.package.name, + packagePolicy.output_id + ); + if (!canUseOutputForIntegrationResult && outputForIntegrationErrorMessage) { + throw new PackagePolicyOutputError(outputForIntegrationErrorMessage); + } + } +} + +export function canUseMultipleAgentPolicies() { + const hasEnterpriseLicence = licenseService.hasAtLeast(LICENCE_FOR_MULTIPLE_AGENT_POLICIES); + const { enableReusableIntegrationPolicies } = appContextService.getExperimentalFeatures(); + + return { + canUseReusablePolicies: hasEnterpriseLicence && enableReusableIntegrationPolicies, + errorMessage: !hasEnterpriseLicence + ? 'Reusable integration policies are only available with an Enterprise license' + : 'Reusable integration policies are not supported', + }; +} + +export async function canUseOutputForIntegration( + soClient: SavedObjectsClientContract, + packageName: string, + outputId: string +) { + const hasAllowedLicense = licenseService.hasAtLeast(LICENCE_FOR_OUTPUT_PER_INTEGRATION); + if (!hasAllowedLicense) { + return { + canUseOutputForIntegrationResult: false, + errorMessage: `Output per integration is only available with an ${LICENCE_FOR_OUTPUT_PER_INTEGRATION} license`, + }; + } + + const allowedOutputTypes = getAllowedOutputTypesForIntegration(packageName); + const output = await outputService.get(soClient, outputId); + + if (!allowedOutputTypes.includes(output.type)) { + return { + canUseOutputForIntegrationResult: false, + errorMessage: `Output type "${output.type}" is not usable with package "${packageName}"`, + }; + } + + return { + canUseOutputForIntegrationResult: true, + errorMessage: null, + }; +} diff --git a/x-pack/plugins/fleet/server/services/package_policy.test.ts b/x-pack/plugins/fleet/server/services/package_policy.test.ts index a62a5048ec567d..9505edd3556cb3 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.test.ts @@ -2921,6 +2921,7 @@ describe('Package policy service', () => { version: 'WzYyMzcsMV0=', name: 'my-cis_kubernetes_benchmark', namespace: 'default', + output_id: null, description: '', package: { name: 'cis_kubernetes_benchmark', @@ -5096,6 +5097,61 @@ describe('Package policy service', () => { ); }); }); + + describe('removeOutputFromAll', () => { + it('should update policies using deleted output', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + const updateSpy = jest.spyOn(packagePolicyService, 'update'); + soClient.find.mockResolvedValue({ + saved_objects: [ + { + id: 'package-policy-1', + attributes: { + name: 'policy1', + enabled: true, + policy_ids: ['agent-policy-1'], + output_id: 'output-id-123', + inputs: [], + package: { name: 'test-package', version: '1.0.0' }, + }, + }, + ], + } as any); + soClient.get.mockImplementation((type, id, options): any => { + if (id === 'package-policy-1') { + return Promise.resolve({ + id, + attributes: { + name: 'policy1', + enabled: true, + policy_ids: ['agent-policy-1'], + output_id: 'output-id-123', + inputs: [], + package: { name: 'test-package', version: '1.0.0' }, + }, + }); + } + }); + + await packagePolicyService.removeOutputFromAll(soClient, esClient, 'output-id-123'); + + expect(updateSpy).toHaveBeenCalledTimes(1); + expect(updateSpy).toHaveBeenCalledWith( + expect.anything(), + expect.anything(), + 'package-policy-1', + { + name: 'policy1', + enabled: true, + policy_id: 'agent-policy-1', + policy_ids: ['agent-policy-1'], + output_id: null, + inputs: [], + } + ); + }); + }); }); describe('getUpgradeDryRunDiff', () => { diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index d9605880c1572e..65495d51f0f60c 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -115,6 +115,7 @@ import { sendTelemetryEvents } from './upgrade_sender'; import { handleExperimentalDatastreamFeatureOptIn, mapPackagePolicySavedObjectToPackagePolicy, + preflightCheckPackagePolicy, } from './package_policies'; import { updateDatastreamExperimentalFeatures } from './epm/packages/update'; import type { @@ -131,7 +132,7 @@ import { isSecretStorageEnabled, } from './secrets'; import { getPackageAssetsMap } from './epm/packages/get'; -import { validateOutputForNewPackagePolicy } from './agent_policies/outputs_helpers'; +import { validateAgentPolicyOutputForIntegration } from './agent_policies/outputs_helpers'; import type { PackagePolicyClientFetchAllItemIdsOptions } from './package_policy_service'; import { validatePolicyNamespaceForSpace } from './spaces/policy_namespaces'; @@ -212,6 +213,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { logger.debug(`Creating new package policy`); this.keepPolicyIdInSync(packagePolicy); + await preflightCheckPackagePolicy(soClient, packagePolicy); let enrichedPackagePolicy = await packagePolicyService.runExternalCallbacks( 'packagePolicyCreate', @@ -228,8 +230,9 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const agentPolicy = await agentPolicyService.get(soClient, policyId, true); agentPolicies.push(agentPolicy); - if (agentPolicy && enrichedPackagePolicy.package?.name) { - await validateOutputForNewPackagePolicy( + // If package policy did not set an output_id, see if the agent policy's output is compatible + if (!packagePolicy.output_id && agentPolicy && enrichedPackagePolicy.package?.name) { + await validateAgentPolicyOutputForIntegration( soClient, agentPolicy, enrichedPackagePolicy.package?.name @@ -408,14 +411,14 @@ class PackagePolicyClientImpl implements PackagePolicyClient { if (!packagePolicy.id) { packagePolicy.id = SavedObjectsUtils.generateId(); } - - this.keepPolicyIdInSync(packagePolicy); - auditLoggingService.writeCustomSoAuditLog({ action: 'create', id: packagePolicy.id, savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); + + this.keepPolicyIdInSync(packagePolicy); + await preflightCheckPackagePolicy(soClient, packagePolicy); } const agentPolicyIds = new Set(packagePolicies.flatMap((pkgPolicy) => pkgPolicy.policy_ids)); @@ -471,6 +474,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { } const { pkgInfo, assetsMap } = packageInfoAndAsset; + validatePackagePolicyOrThrow(packagePolicy, pkgInfo); inputs = pkgInfo ? await _compilePackagePolicyInputs( @@ -822,6 +826,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { try { logger.debug(`Starting update of package policy ${id}`); + await preflightCheckPackagePolicy(soClient, packagePolicyUpdate); enrichedPackagePolicy = await packagePolicyService.runExternalCallbacks( 'packagePolicyUpdate', packagePolicyUpdate, @@ -1052,6 +1057,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const id = packagePolicyUpdate.id; this.keepPolicyIdInSync(packagePolicyUpdate); const packagePolicy = { ...packagePolicyUpdate, name: packagePolicyUpdate.name.trim() }; + await preflightCheckPackagePolicy(soClient, packagePolicy); const oldPackagePolicy = oldPackagePolicies.find((p) => p.id === id); if (!oldPackagePolicy) { throw new PackagePolicyNotFoundError('Package policy not found'); @@ -1762,6 +1768,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { }, policy_id: newPolicy.policy_id ?? agentPolicyId, policy_ids: newPolicy.policy_ids ?? [agentPolicyId], + output_id: newPolicy.output_id, inputs: newPolicy.inputs[0]?.streams ? newPolicy.inputs : inputs, vars: newPolicy.vars || newPP.vars, }; @@ -1982,6 +1989,76 @@ class PackagePolicyClientImpl implements PackagePolicyClient { } } + public async removeOutputFromAll( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + outputId: string + ) { + const packagePolicies = ( + await soClient.find({ + type: SAVED_OBJECT_TYPE, + fields: ['name', 'enabled', 'policy_ids', 'inputs', 'output_id'], + searchFields: ['output_id'], + search: escapeSearchQueryPhrase(outputId), + perPage: SO_SEARCH_LIMIT, + }) + ).saved_objects.map(mapPackagePolicySavedObjectToPackagePolicy); + + if (packagePolicies.length > 0) { + const getPackagePolicyUpdate = (packagePolicy: PackagePolicy) => ({ + name: packagePolicy.name, + enabled: packagePolicy.enabled, + policy_ids: packagePolicy.policy_ids, + inputs: packagePolicy.inputs, + output_id: packagePolicy.output_id === outputId ? null : packagePolicy.output_id, + }); + + // Validate that the new cleared/default output is valid for the package policies + // (from each of the associated agent policies) before updating any of them + await pMap( + packagePolicies, + async (packagePolicy) => { + const existingPackagePolicy = await this.get(soClient, packagePolicy.id); + + if (!existingPackagePolicy) { + throw new PackagePolicyNotFoundError('Package policy not found'); + } + + for (const policyId of packagePolicy.policy_ids) { + if (packagePolicy.package?.name) { + const agentPolicy = await agentPolicyService.get(soClient, policyId, true); + if (agentPolicy) { + await validateAgentPolicyOutputForIntegration( + soClient, + agentPolicy, + packagePolicy.package.name, + false + ); + } + } + } + }, + { + concurrency: 50, + } + ); + await pMap( + packagePolicies, + (packagePolicy) => { + return this.update( + soClient, + esClient, + packagePolicy.id, + getPackagePolicyUpdate(packagePolicy) + ); + }, + { + concurrency: 50, + } + ); + } + } + fetchAllItemIds( soClient: SavedObjectsClientContract, { perPage = 1000, kuery }: PackagePolicyClientFetchAllItemIdsOptions = {} diff --git a/x-pack/plugins/fleet/server/services/package_policy_service.ts b/x-pack/plugins/fleet/server/services/package_policy_service.ts index 1462d451388b52..fed46872ab6cba 100644 --- a/x-pack/plugins/fleet/server/services/package_policy_service.ts +++ b/x-pack/plugins/fleet/server/services/package_policy_service.ts @@ -219,6 +219,18 @@ export interface PackagePolicyClient { experimentalDataStreamFeatures: ExperimentalDataStreamFeature[]; }>; + /** + * Remove an output from all package policies that are using it, and replace the output by the default ones. + * @param soClient + * @param esClient + * @param outputId + */ + removeOutputFromAll( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + outputId: string + ): Promise; + /** * Returns an `AsyncIterable` for retrieving all integration policy IDs * @param soClient diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts index f6feffd24df535..3088814c8f8a32 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts @@ -6,6 +6,7 @@ */ import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; + import { appContextService } from '..'; import type { PreconfiguredOutput } from '../../../common/types'; @@ -31,6 +32,9 @@ const mockedOutputService = outputService as jest.Mocked; jest.mock('../app_context', () => ({ appContextService: { getInternalUserSOClientWithoutSpaceExtension: jest.fn(), + getExperimentalFeatures: () => ({ + useSpaceAwareness: true, + }), getLogger: () => new Proxy( {}, @@ -60,6 +64,9 @@ describe('output preconfiguration', () => { per_page: 0, total: 0, }); + internalSoClientWithoutSpaceExtension.bulkGet.mockResolvedValue({ + saved_objects: [], + }); mockedOutputService.create.mockReset(); mockedOutputService.update.mockReset(); mockedOutputService.delete.mockReset(); diff --git a/x-pack/plugins/fleet/server/types/models/package_policy.ts b/x-pack/plugins/fleet/server/types/models/package_policy.ts index 54db36b49d0430..c80cb45c84ff9a 100644 --- a/x-pack/plugins/fleet/server/types/models/package_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/package_policy.ts @@ -98,6 +98,7 @@ const PackagePolicyBaseSchema = { namespace: schema.maybe(PackagePolicyNamespaceSchema), policy_id: schema.maybe(schema.string()), policy_ids: schema.maybe(schema.arrayOf(schema.string())), + output_id: schema.nullable(schema.maybe(schema.string())), enabled: schema.boolean(), is_managed: schema.maybe(schema.boolean()), package: schema.maybe( @@ -109,8 +110,6 @@ const PackagePolicyBaseSchema = { requires_root: schema.maybe(schema.boolean()), }) ), - // Deprecated TODO create remove issue - output_id: schema.maybe(schema.string()), inputs: schema.arrayOf(schema.object(PackagePolicyInputsSchema)), vars: schema.maybe(ConfigRecordSchema), overrides: schema.maybe( @@ -152,8 +151,6 @@ const CreatePackagePolicyProps = { requires_root: schema.maybe(schema.boolean()), }) ), - // Deprecated TODO create remove issue - output_id: schema.maybe(schema.string()), inputs: schema.arrayOf( schema.object({ ...PackagePolicyInputsSchema, @@ -191,6 +188,7 @@ export const SimplifiedPackagePolicyBaseSchema = schema.object({ name: schema.string(), description: schema.maybe(schema.string()), namespace: schema.maybe(schema.string()), + output_id: schema.nullable(schema.maybe(schema.string())), vars: schema.maybe(SimplifiedVarsSchema), inputs: schema.maybe( schema.recordOf( diff --git a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts index 6216eb4bbd3269..79586b1885ed97 100644 --- a/x-pack/plugins/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/types/models/preconfiguration.ts @@ -162,6 +162,7 @@ export const PreconfiguredAgentPoliciesSchema = schema.arrayOf( }), description: schema.maybe(schema.string()), namespace: schema.maybe(PackagePolicyNamespaceSchema), + output_id: schema.nullable(schema.maybe(schema.string())), inputs: schema.maybe( schema.arrayOf( schema.object({ diff --git a/x-pack/plugins/fleet/server/types/so_attributes.ts b/x-pack/plugins/fleet/server/types/so_attributes.ts index 79640a0f90e129..ef39759b206f55 100644 --- a/x-pack/plugins/fleet/server/types/so_attributes.ts +++ b/x-pack/plugins/fleet/server/types/so_attributes.ts @@ -121,6 +121,8 @@ export interface PackagePolicySOAttributes { inputs: PackagePolicyInput[]; policy_id?: string; policy_ids: string[]; + // Nullable to allow user to reset to default outputs + output_id?: string | null; updated_at: string; updated_by: string; description?: string; diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/__snapshots__/agent_policy.snap b/x-pack/test/fleet_api_integration/apis/agent_policy/__snapshots__/agent_policy.snap index 9112ad20ad8609..a4d255613133ef 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/__snapshots__/agent_policy.snap +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/__snapshots__/agent_policy.snap @@ -30,6 +30,7 @@ Object { "enabled": true, "name": "system-1", "namespace": "default", + "output_id": null, "package": Object { "name": "system", "requires_root": true, diff --git a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts index 76585c1f0099ad..b860a774ba1220 100644 --- a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts @@ -120,7 +120,10 @@ export default function (providerContext: FtrProviderContext) { } }; - const createAgentPolicy = async (spaceId?: string): Promise => { + const createAgentPolicy = async ( + spaceId?: string, + dataOutputId?: string + ): Promise => { const { body: testPolicyRes } = await supertest .post(spaceId ? `/s/${spaceId}/api/fleet/agent_policies` : `/api/fleet/agent_policies`) .set('kbn-xsrf', 'xxxx') @@ -128,6 +131,7 @@ export default function (providerContext: FtrProviderContext) { name: `test ${uuidV4()}`, description: '', namespace: 'default', + ...(dataOutputId ? { data_output_id: dataOutputId } : {}), }) .expect(200); @@ -148,6 +152,33 @@ export default function (providerContext: FtrProviderContext) { .expect(200); }; + const createPackagePolicy = async ( + agentPolicyIds: string[], + spaceId?: string, + outputId?: string + ): Promise => { + const { body: testPolicyRes } = await supertest + .post(spaceId ? `/s/${spaceId}/api/fleet/package_policies` : `/api/fleet/package_policies`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: `package ${uuidV4()}`, + description: '', + namespace: 'default', + policy_ids: agentPolicyIds, + enabled: true, + inputs: [], + package: { + name: 'filetest', + title: 'For File Tests', + version: '0.1.0', + }, + ...(outputId ? { output_id: outputId } : {}), + }) + .expect(200); + + return testPolicyRes; + }; + const getAgentPolicy = async ( policyId: string, spaceId?: string @@ -396,7 +427,7 @@ export default function (providerContext: FtrProviderContext) { }) .expect(400); expect(body.message).to.eql( - 'Logstash output cannot be used with Fleet Server integration in Fleet Server policy 1. Please create a new ElasticSearch output.' + 'Logstash output cannot be used with Fleet Server integration in Fleet Server policy 1. Please create a new Elasticsearch output.' ); }); @@ -417,7 +448,7 @@ export default function (providerContext: FtrProviderContext) { }) .expect(400); expect(body.message).to.eql( - 'Kafka output cannot be used with Fleet Server integration in Fleet Server policy 1. Please create a new ElasticSearch output.' + 'Kafka output cannot be used with Fleet Server integration in Fleet Server policy 1. Please create a new Elasticsearch output.' ); }); @@ -765,10 +796,28 @@ export default function (providerContext: FtrProviderContext) { }); it('should bump all policies in all spaces if updating the default output', async () => { - const [policy1, policy2, policy3] = await Promise.all([ - createAgentPolicy(), + const { body: nonDefaultOutput } = await supertest + .post(`/api/fleet/outputs`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Nondefault Output', + type: 'elasticsearch', + hosts: ['https://test.fr'], + }) + .expect(200); + + const [policy1, policy2, policy3, policy4] = await Promise.all([ createAgentPolicy(), + createAgentPolicy(undefined, nonDefaultOutput.item.id), createAgentPolicy(TEST_SPACE_ID), + createAgentPolicy(TEST_SPACE_ID, nonDefaultOutput.item.id), + ]); + + // Create package policies with default output under agent policies not using default output + // to ensure that those agent policies still get bumped + await Promise.all([ + createPackagePolicy([policy2.item.id], undefined, defaultOutputId), + createPackagePolicy([policy4.item.id], TEST_SPACE_ID, defaultOutputId), ]); await supertest @@ -781,20 +830,79 @@ export default function (providerContext: FtrProviderContext) { }) .expect(200); - const [updatedPolicy1, updatedPolicy2, updatedPolicy3] = await Promise.all([ + const [updatedPolicy1, updatedPolicy2, updatedPolicy3, updatedPolicy4] = await Promise.all([ getAgentPolicy(policy1.item.id), getAgentPolicy(policy2.item.id), getAgentPolicy(policy3.item.id, TEST_SPACE_ID), + getAgentPolicy(policy4.item.id, TEST_SPACE_ID), ]); expect(updatedPolicy1.item.revision).to.eql(policy1.item.revision + 1); - expect(updatedPolicy2.item.revision).to.eql(policy2.item.revision + 1); + expect(updatedPolicy2.item.revision).to.eql(policy2.item.revision + 2); expect(updatedPolicy3.item.revision).to.eql(policy3.item.revision + 1); + expect(updatedPolicy4.item.revision).to.eql(policy4.item.revision + 2); + + // cleanup + await Promise.all([ + deleteAgentPolicy(policy1.item.id), + deleteAgentPolicy(policy2.item.id), + deleteAgentPolicy(policy3.item.id, TEST_SPACE_ID), + deleteAgentPolicy(policy4.item.id, TEST_SPACE_ID), + ]); + }); + + it('should bump all policies in all spaces if updating non-default output', async () => { + const { body: nonDefaultOutput } = await supertest + .post(`/api/fleet/outputs`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Nondefault Output', + type: 'elasticsearch', + hosts: ['https://test.fr'], + }) + .expect(200); + + const [policy1, policy2, policy3, policy4] = await Promise.all([ + createAgentPolicy(), + createAgentPolicy(undefined, nonDefaultOutput.item.id), + createAgentPolicy(TEST_SPACE_ID), + createAgentPolicy(TEST_SPACE_ID, nonDefaultOutput.item.id), + ]); + + // Create package policies under agent policies using default output to ensure those + // agent policies still get bumped + await Promise.all([ + createPackagePolicy([policy1.item.id], undefined, nonDefaultOutput.item.id), + createPackagePolicy([policy3.item.id], TEST_SPACE_ID, nonDefaultOutput.item.id), + ]); + + await supertest + .put(`/api/fleet/outputs/${nonDefaultOutput.item.id}`) + .set('kbn-xsrf', 'xxxx') + .send({ + name: 'Updated Nondefault Output', + type: 'elasticsearch', + hosts: ['http://test.fr:443'], + }) + .expect(200); + + const [updatedPolicy1, updatedPolicy2, updatedPolicy3, updatedPolicy4] = await Promise.all([ + getAgentPolicy(policy1.item.id), + getAgentPolicy(policy2.item.id), + getAgentPolicy(policy3.item.id, TEST_SPACE_ID), + getAgentPolicy(policy4.item.id, TEST_SPACE_ID), + ]); + + expect(updatedPolicy1.item.revision).to.eql(policy1.item.revision + 2); + expect(updatedPolicy2.item.revision).to.eql(policy2.item.revision + 1); + expect(updatedPolicy3.item.revision).to.eql(policy3.item.revision + 2); + expect(updatedPolicy4.item.revision).to.eql(policy4.item.revision + 1); // cleanup await Promise.all([ deleteAgentPolicy(policy1.item.id), deleteAgentPolicy(policy2.item.id), deleteAgentPolicy(policy3.item.id, TEST_SPACE_ID), + deleteAgentPolicy(policy4.item.id, TEST_SPACE_ID), ]); }); }); From 8dee365bda57a324d18fbd9405a965f74f1c047f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Tue, 13 Aug 2024 17:00:08 +0100 Subject: [PATCH 13/92] [Stateful sidenav] Don't fetch active space on unauthenticated routes (#190408) --- src/plugins/navigation/public/plugin.test.ts | 25 ++++++++++++ src/plugins/navigation/public/plugin.tsx | 38 +++++++++++++++---- .../navigation/server/ui_settings.test.ts | 20 +++++++++- src/plugins/navigation/server/ui_settings.ts | 2 + 4 files changed, 76 insertions(+), 9 deletions(-) diff --git a/src/plugins/navigation/public/plugin.test.ts b/src/plugins/navigation/public/plugin.test.ts index 1d9abb6f85dbc0..e1f9cd9ea3991f 100644 --- a/src/plugins/navigation/public/plugin.test.ts +++ b/src/plugins/navigation/public/plugin.test.ts @@ -69,6 +69,31 @@ describe('Navigation Plugin', () => { expect(coreStart.chrome.project.changeActiveSolutionNavigation).toHaveBeenCalledWith('es'); }); + it('should not load the active space on non authenticated pages', async () => { + const { plugin, coreStart, unifiedSearch, cloud, spaces } = setup(); + + coreStart.http.anonymousPaths.isAnonymous.mockReturnValue(true); + + const activeSpace$ = of({ solution: 'es' } as Pick); + activeSpace$.pipe = jest.fn().mockReturnValue(activeSpace$); + activeSpace$.subscribe = jest.fn().mockReturnValue(activeSpace$); + spaces.getActiveSpace$ = jest.fn().mockReturnValue(activeSpace$); + + plugin.start(coreStart, { unifiedSearch, cloud, spaces }); + await new Promise((resolve) => setTimeout(resolve)); + + expect(activeSpace$.pipe).not.toHaveBeenCalled(); + expect(activeSpace$.subscribe).not.toHaveBeenCalled(); + + // Test that the activeSpace$ observable is accessed when not an anonymous path + coreStart.http.anonymousPaths.isAnonymous.mockReturnValue(false); + plugin.start(coreStart, { unifiedSearch, cloud, spaces }); + await new Promise((resolve) => setTimeout(resolve)); + + expect(activeSpace$.pipe).toHaveBeenCalled(); + expect(activeSpace$.subscribe).toHaveBeenCalled(); + }); + describe('addSolutionNavigation()', () => { it('should update the solution navigation definitions', async () => { const { plugin, coreStart, unifiedSearch, cloud } = setup(); diff --git a/src/plugins/navigation/public/plugin.tsx b/src/plugins/navigation/public/plugin.tsx index 66ef8cb8087209..73dc93609bcf7c 100644 --- a/src/plugins/navigation/public/plugin.tsx +++ b/src/plugins/navigation/public/plugin.tsx @@ -6,8 +6,14 @@ * Side Public License, v 1. */ import React from 'react'; -import { of, ReplaySubject, take, map, Observable } from 'rxjs'; -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin } from '@kbn/core/public'; +import { of, ReplaySubject, take, map, Observable, switchMap } from 'rxjs'; +import { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + HttpStart, +} from '@kbn/core/public'; import type { UnifiedSearchPublicPluginStart } from '@kbn/unified-search-plugin/public'; import type { Space } from '@kbn/spaces-plugin/public'; import type { SolutionNavigationDefinition } from '@kbn/core-chrome-browser'; @@ -89,8 +95,7 @@ export class NavigationPublicPlugin return createTopNav(customUnifiedSearch ?? unifiedSearch, customExtensions ?? extensions); }; - // Initialize the solution navigation if it is enabled - activeSpace$.pipe(take(1)).subscribe((activeSpace) => { + const initSolutionNavigation = (activeSpace?: Space) => { this.initiateChromeStyleAndSideNav(chrome, { isServerless, activeSpace, @@ -99,7 +104,14 @@ export class NavigationPublicPlugin if (!this.isSolutionNavEnabled) return; chrome.project.setCloudUrls(cloud!); - }); + }; + + if (this.getIsUnauthenticated(core.http)) { + // Don't fetch the active space if the user is not authenticated + initSolutionNavigation(); + } else { + activeSpace$.pipe(take(1)).subscribe(initSolutionNavigation); + } return { ui: { @@ -111,9 +123,14 @@ export class NavigationPublicPlugin if (!this.isSolutionNavEnabled) return; this.addSolutionNavigation(solutionNavigation); }, - isSolutionNavEnabled$: activeSpace$.pipe( - map((activeSpace) => { - return this.isSolutionNavEnabled && getIsProjectNav(activeSpace?.solution); + isSolutionNavEnabled$: of(this.getIsUnauthenticated(core.http)).pipe( + switchMap((isUnauthenticated) => { + if (isUnauthenticated) return of(false); + return activeSpace$.pipe( + map((activeSpace) => { + return this.isSolutionNavEnabled && getIsProjectNav(activeSpace?.solution); + }) + ); }) ), }; @@ -172,6 +189,11 @@ export class NavigationPublicPlugin chrome.project.changeActiveSolutionNavigation(solutionView!); } } + + private getIsUnauthenticated(http: HttpStart) { + const { anonymousPaths } = http; + return anonymousPaths.isAnonymous(window.location.pathname); + } } function getIsProjectNav(solutionView?: string) { diff --git a/src/plugins/navigation/server/ui_settings.test.ts b/src/plugins/navigation/server/ui_settings.test.ts index 1d8431b3591098..6d8b12d41cbf91 100644 --- a/src/plugins/navigation/server/ui_settings.test.ts +++ b/src/plugins/navigation/server/ui_settings.test.ts @@ -41,6 +41,21 @@ describe('ui settings', () => { await expect(defaultRoute.getValue!()).resolves.toBe(DEFAULT_ROUTES.classic); }); + it('should return classic when accessing a non authenticated route', async () => { + const spaces = spacesMock.createStart(); + const mockSpace: Pick = { solution: 'es' }; + spaces.spacesService.getActiveSpace.mockResolvedValue(mockSpace as Space); + core.getStartServices.mockResolvedValue([{} as any, { spaces }, {} as any]); + + const { defaultRoute } = getUiSettings(core, logger); + const requestMock = { + auth: { isAuthenticated: false }, + }; + await expect(defaultRoute.getValue!({ request: requestMock as any })).resolves.toBe( + DEFAULT_ROUTES.classic + ); + }); + it('should return the route based on the active space', async () => { const spaces = spacesMock.createStart(); @@ -50,7 +65,10 @@ describe('ui settings', () => { core.getStartServices.mockResolvedValue([{} as any, { spaces }, {} as any]); const { defaultRoute } = getUiSettings(core, logger); - await expect(defaultRoute.getValue!({ request: {} as any })).resolves.toBe( + const requestMock = { + auth: { isAuthenticated: true }, + }; + await expect(defaultRoute.getValue!({ request: requestMock as any })).resolves.toBe( DEFAULT_ROUTES[solution] ); } diff --git a/src/plugins/navigation/server/ui_settings.ts b/src/plugins/navigation/server/ui_settings.ts index bcf128f2d348a4..be216e5d5175f1 100644 --- a/src/plugins/navigation/server/ui_settings.ts +++ b/src/plugins/navigation/server/ui_settings.ts @@ -34,6 +34,8 @@ export const getUiSettings = ( } try { + if (!request.auth.isAuthenticated) return DEFAULT_ROUTES.classic; + const activeSpace = await spaces.spacesService.getActiveSpace(request); const solution = activeSpace?.solution ?? 'classic'; From a9c4d2fa3451cca71324dd3a3ad252cd29be1e3e Mon Sep 17 00:00:00 2001 From: Jonathan Budzenski Date: Tue, 13 Aug 2024 12:25:03 -0500 Subject: [PATCH 14/92] Revert "[OAS] Include alerting rule APIs (#189962)" This reverts commit b85b1cb506df9c6b26e541c5e3cc54c6ab575a61. --- .../scripts/steps/capture_oas_snapshot.sh | 2 +- oas_docs/bundle.json | 4709 +---------------- oas_docs/bundle.serverless.json | 4709 +---------------- .../__snapshots__/generate_oas.test.ts.snap | 18 +- .../src/generate_oas.test.fixture.ts | 6 +- .../mutations/enum.test.ts | 33 - .../post_process_mutations/mutations/enum.ts | 40 +- .../mutations/object.test.ts | 7 +- .../mutations/object.ts | 2 +- .../src/operation_id_counter.test.ts | 31 - .../src/operation_id_counter.ts | 1 - 11 files changed, 23 insertions(+), 9535 deletions(-) delete mode 100644 packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts diff --git a/.buildkite/scripts/steps/capture_oas_snapshot.sh b/.buildkite/scripts/steps/capture_oas_snapshot.sh index fadd7276b47cc9..9768ff50c8fa5a 100755 --- a/.buildkite/scripts/steps/capture_oas_snapshot.sh +++ b/.buildkite/scripts/steps/capture_oas_snapshot.sh @@ -5,7 +5,7 @@ set -euo pipefail source .buildkite/scripts/common/util.sh echo --- Capture OAS snapshot -cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules" +cmd="node scripts/capture_oas_snapshot --include-path /api/status" if is_pr && ! is_auto_commit_disabled; then cmd="$cmd --update" fi diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index fbf194c8491a2c..3c6756b1da3695 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -344,4713 +344,9 @@ }, "openapi": "3.0.0", "paths": { - "/api/alerting/rule/{id}": { - "delete": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#2", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Delete a rule", - "tags": [ - "alerting" - ] - }, - "get": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Get rule details", - "tags": [ - "alerting" - ] - }, - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%3F%7D#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule. If it is omitted, an ID is randomly generated.", - "in": "path", - "name": "id", - "required": false, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "default": [], - "items": { - "additionalProperties": false, - "description": "An action that runs under defined conditions.", - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Conditions that affect whether the action runs. If you specify multiple conditions, all conditions must be met for the action to run. For example, if an alert occurs within the specified time frame and matches the query, the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "enabled": { - "default": true, - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "name": { - "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "schedule": { - "additionalProperties": false, - "description": "The check interval, which specifies how frequently the rule conditions are checked.", - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "tags": { - "default": [], - "description": "The tags for the rule.", - "items": { - "type": "string" - }, - "type": "array" - }, - "throttle": { - "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "name", - "rule_type_id", - "consumer", - "schedule" - ], - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Create a rule", - "tags": [ - "alerting" - ] - }, - "put": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#1", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "default": [], - "items": { - "additionalProperties": false, - "description": "An action that runs under defined conditions.", - "properties": { - "alerts_filter": { - "additionalProperties": false, - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "name": { - "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "tags": { - "default": [], - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "name", - "schedule" - ], - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Update a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_disable": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_disable#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "nullable": true, - "properties": { - "untrack": { - "description": "Defines whether this rule's alerts should be untracked.", - "type": "boolean" - } - }, - "type": "object", - "x-oas-optional": true - } - } - } - }, - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Disable a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_enable": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_enable#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Enable a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_mute_all": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_mute_all#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Mute all alerts", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_unmute_all": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_unmute_all#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Unmute all alerts", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_update_api_key": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_update_api_key#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Update the API key for a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{rule_id}/alert/{alert_id}/_mute": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_mute#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "rule_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The identifier for the alert.", - "in": "path", - "name": "alert_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Mute an alert", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmute": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_unmute#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "rule_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The identifier for the alert.", - "in": "path", - "name": "alert_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Unmute an alert", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rules/_find": { - "get": { - "operationId": "%2Fapi%2Falerting%2Frules%2F_find#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "The number of rules to return per page.", - "in": "query", - "name": "per_page", - "required": false, - "schema": { - "default": 10, - "minimum": 0, - "type": "number" - } - }, - { - "description": "The page number to return.", - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "minimum": 1, - "type": "number" - } - }, - { - "description": "An Elasticsearch simple_query_string query that filters the objects in the response.", - "in": "query", - "name": "search", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "The default operator to use for the simple_query_string.", - "in": "query", - "name": "default_search_operator", - "required": false, - "schema": { - "default": "OR", - "enum": [ - "OR", - "AND" - ], - "type": "string" - } - }, - { - "description": "The fields to perform the simple_query_string parsed query against.", - "in": "query", - "name": "search_fields", - "required": false, - "schema": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ] - } - }, - { - "description": "Determines which field is used to sort the results. The field must exist in the `attributes` key of the response.", - "in": "query", - "name": "sort_field", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Determines the sort order.", - "in": "query", - "name": "sort_order", - "required": false, - "schema": { - "enum": [ - "asc", - "desc" - ], - "type": "string" - } - }, - { - "description": "Filters the rules that have a relation with the reference objects with a specific type and identifier.", - "in": "query", - "name": "has_reference", - "required": false, - "schema": { - "additionalProperties": false, - "nullable": true, - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "type", - "id" - ], - "type": "object" - } - }, - { - "in": "query", - "name": "fields", - "required": false, - "schema": { - "items": { - "description": "The fields to return in the `attributes` key of the response.", - "type": "string" - }, - "type": "array" - } - }, - { - "description": "A KQL string that you filter with an attribute from your saved object. It should look like `savedObjectType.attributes.title: \"myTitle\"`. However, if you used a direct attribute of a saved object, such as `updatedAt`, you must define your filter, for example, `savedObjectType.updatedAt > 2018-12-22`.", - "in": "query", - "name": "filter", - "required": false, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "filter_consumers", - "required": false, - "schema": { - "items": { - "description": "List of consumers to filter.", - "type": "string" - }, - "type": "array" - } - } - ], - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Get information about rules", - "tags": [ - "alerting" - ] - } - }, "/api/status": { "get": { - "operationId": "%2Fapi%2Fstatus#0", + "operationId": "/api/status#0", "parameters": [ { "description": "The version of the API to use", @@ -5139,9 +435,6 @@ } ], "tags": [ - { - "name": "alerting" - }, { "name": "system" } diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index fbf194c8491a2c..3c6756b1da3695 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -344,4713 +344,9 @@ }, "openapi": "3.0.0", "paths": { - "/api/alerting/rule/{id}": { - "delete": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#2", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Delete a rule", - "tags": [ - "alerting" - ] - }, - "get": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Get rule details", - "tags": [ - "alerting" - ] - }, - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%3F%7D#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule. If it is omitted, an ID is randomly generated.", - "in": "path", - "name": "id", - "required": false, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "default": [], - "items": { - "additionalProperties": false, - "description": "An action that runs under defined conditions.", - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Conditions that affect whether the action runs. If you specify multiple conditions, all conditions must be met for the action to run. For example, if an alert occurs within the specified time frame and matches the query, the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "enabled": { - "default": true, - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "name": { - "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "schedule": { - "additionalProperties": false, - "description": "The check interval, which specifies how frequently the rule conditions are checked.", - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "tags": { - "default": [], - "description": "The tags for the rule.", - "items": { - "type": "string" - }, - "type": "array" - }, - "throttle": { - "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "name", - "rule_type_id", - "consumer", - "schedule" - ], - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Create a rule", - "tags": [ - "alerting" - ] - }, - "put": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D#1", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "default": [], - "items": { - "additionalProperties": false, - "description": "An action that runs under defined conditions.", - "properties": { - "alerts_filter": { - "additionalProperties": false, - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "description": "Defines the range of time in a day that the action can run. If the `start` value is `00:00` and the `end` value is `24:00`, actions be generated all day.", - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if `notify_when` is set to `onThrottleInterval`. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id" - ], - "type": "object" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "name": { - "description": "The name of the rule. While this name does not have to be unique, a distinctive name can help you identify a rule.", - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "default": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "tags": { - "default": [], - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "description": "Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "name", - "schedule" - ], - "type": "object" - } - } - } - }, - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Update a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_disable": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_disable#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "nullable": true, - "properties": { - "untrack": { - "description": "Defines whether this rule's alerts should be untracked.", - "type": "boolean" - } - }, - "type": "object", - "x-oas-optional": true - } - } - } - }, - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Disable a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_enable": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_enable#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Enable a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_mute_all": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_mute_all#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Mute all alerts", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_unmute_all": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_unmute_all#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Unmute all alerts", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{id}/_update_api_key": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Bid%7D%2F_update_api_key#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Update the API key for a rule", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{rule_id}/alert/{alert_id}/_mute": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_mute#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "rule_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The identifier for the alert.", - "in": "path", - "name": "alert_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Mute an alert", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rule/{rule_id}/alert/{alert_id}/_unmute": { - "post": { - "operationId": "%2Fapi%2Falerting%2Frule%2F%7Brule_id%7D%2Falert%2F%7Balert_id%7D%2F_unmute#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "A required header to protect against CSRF attacks", - "in": "header", - "name": "kbn-xsrf", - "required": true, - "schema": { - "example": "true", - "type": "string" - } - }, - { - "description": "The identifier for the rule.", - "in": "path", - "name": "rule_id", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "The identifier for the alert.", - "in": "path", - "name": "alert_id", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Indicates a successful call." - } - }, - "summary": "Unmute an alert", - "tags": [ - "alerting" - ] - } - }, - "/api/alerting/rules/_find": { - "get": { - "operationId": "%2Fapi%2Falerting%2Frules%2F_find#0", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, - { - "description": "The number of rules to return per page.", - "in": "query", - "name": "per_page", - "required": false, - "schema": { - "default": 10, - "minimum": 0, - "type": "number" - } - }, - { - "description": "The page number to return.", - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "minimum": 1, - "type": "number" - } - }, - { - "description": "An Elasticsearch simple_query_string query that filters the objects in the response.", - "in": "query", - "name": "search", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "The default operator to use for the simple_query_string.", - "in": "query", - "name": "default_search_operator", - "required": false, - "schema": { - "default": "OR", - "enum": [ - "OR", - "AND" - ], - "type": "string" - } - }, - { - "description": "The fields to perform the simple_query_string parsed query against.", - "in": "query", - "name": "search_fields", - "required": false, - "schema": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } - ] - } - }, - { - "description": "Determines which field is used to sort the results. The field must exist in the `attributes` key of the response.", - "in": "query", - "name": "sort_field", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Determines the sort order.", - "in": "query", - "name": "sort_order", - "required": false, - "schema": { - "enum": [ - "asc", - "desc" - ], - "type": "string" - } - }, - { - "description": "Filters the rules that have a relation with the reference objects with a specific type and identifier.", - "in": "query", - "name": "has_reference", - "required": false, - "schema": { - "additionalProperties": false, - "nullable": true, - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "type", - "id" - ], - "type": "object" - } - }, - { - "in": "query", - "name": "fields", - "required": false, - "schema": { - "items": { - "description": "The fields to return in the `attributes` key of the response.", - "type": "string" - }, - "type": "array" - } - }, - { - "description": "A KQL string that you filter with an attribute from your saved object. It should look like `savedObjectType.attributes.title: \"myTitle\"`. However, if you used a direct attribute of a saved object, such as `updatedAt`, you must define your filter, for example, `savedObjectType.updatedAt > 2018-12-22`.", - "in": "query", - "name": "filter", - "required": false, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "filter_consumers", - "required": false, - "schema": { - "items": { - "description": "List of consumers to filter.", - "type": "string" - }, - "type": "array" - } - } - ], - "responses": { - "200": { - "content": { - "application/json; Elastic-Api-Version=2023-10-31": { - "schema": { - "additionalProperties": false, - "properties": { - "actions": { - "items": { - "additionalProperties": false, - "properties": { - "alerts_filter": { - "additionalProperties": false, - "description": "Defines a period that limits whether the action runs.", - "properties": { - "query": { - "additionalProperties": false, - "properties": { - "dsl": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL).", - "type": "string" - }, - "filters": { - "description": "A filter written in Elasticsearch Query Domain Specific Language (DSL) as defined in the `kbn-es-query` package.", - "items": { - "additionalProperties": false, - "properties": { - "$state": { - "additionalProperties": false, - "properties": { - "store": { - "description": "A filter can be either specific to an application context or applied globally.", - "enum": [ - "appState", - "globalState" - ], - "type": "string" - } - }, - "required": [ - "store" - ], - "type": "object" - }, - "meta": { - "additionalProperties": {}, - "type": "object" - }, - "query": { - "additionalProperties": {}, - "type": "object" - } - }, - "required": [ - "meta" - ], - "type": "object" - }, - "type": "array" - }, - "kql": { - "description": "A filter written in Kibana Query Language (KQL).", - "type": "string" - } - }, - "required": [ - "kql", - "filters" - ], - "type": "object" - }, - "timeframe": { - "additionalProperties": false, - "properties": { - "days": { - "description": "Defines the days of the week that the action can run, represented as an array of numbers. For example, `1` represents Monday. An empty array is equivalent to specifying all the days of the week.", - "items": { - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7 - ], - "type": "integer" - }, - "type": "array" - }, - "hours": { - "additionalProperties": false, - "properties": { - "end": { - "description": "The end of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - }, - "start": { - "description": "The start of the time frame in 24-hour notation (`hh:mm`).", - "type": "string" - } - }, - "required": [ - "start", - "end" - ], - "type": "object" - }, - "timezone": { - "description": "The ISO time zone for the `hours` values. Values such as `UTC` and `UTC+1` also work but lack built-in daylight savings time support and are not recommended.", - "type": "string" - } - }, - "required": [ - "days", - "hours", - "timezone" - ], - "type": "object" - } - }, - "type": "object" - }, - "connector_type_id": { - "description": "The type of connector. This property appears in responses but cannot be set in requests.", - "type": "string" - }, - "frequency": { - "additionalProperties": false, - "properties": { - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "type": "string" - }, - "summary": { - "description": "Indicates whether the action is a summary.", - "type": "boolean" - }, - "throttle": { - "description": "The throttle interval, which defines how often an alert generates repeated actions. It is specified in seconds, minutes, hours, or days and is applicable only if 'notify_when' is set to 'onThrottleInterval'. NOTE: You cannot specify the throttle interval at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "summary", - "notify_when", - "throttle" - ], - "type": "object" - }, - "group": { - "description": "The group name, which affects when the action runs (for example, when the threshold is met or when the alert is recovered). Each rule type has a list of valid action group names. If you don't need to group actions, set to `default`.", - "type": "string" - }, - "id": { - "description": "The identifier for the connector saved object.", - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the action, which are sent to the connector. The `params` are handled as Mustache templates and passed a default set of context.", - "type": "object" - }, - "use_alert_data_for_template": { - "description": "Indicates whether to use alert data as a template.", - "type": "boolean" - }, - "uuid": { - "description": "A universally unique identifier (UUID) for the action.", - "type": "string" - } - }, - "required": [ - "id", - "connector_type_id", - "params" - ], - "type": "object" - }, - "type": "array" - }, - "active_snoozes": { - "items": { - "description": "List of active snoozes for the rule.", - "type": "string" - }, - "type": "array" - }, - "alert_delay": { - "additionalProperties": false, - "description": "Indicates that an alert occurs only when the specified number of consecutive runs met the rule conditions.", - "properties": { - "active": { - "description": "The number of consecutive runs that must meet the rule conditions.", - "type": "number" - } - }, - "required": [ - "active" - ], - "type": "object" - }, - "api_key_created_by_user": { - "description": "Indicates whether the API key that is associated with the rule was created by the user.", - "nullable": true, - "type": "boolean" - }, - "api_key_owner": { - "description": "The owner of the API key that is associated with the rule and used to run background tasks.", - "nullable": true, - "type": "string" - }, - "consumer": { - "description": "The name of the application or feature that owns the rule. For example: `alerts`, `apm`, `discover`, `infrastructure`, `logs`, `metrics`, `ml`, `monitoring`, `securitySolution`, `siem`, `stackAlerts`, or `uptime`.", - "type": "string" - }, - "created_at": { - "description": "The date and time that the rule was created.", - "type": "string" - }, - "created_by": { - "description": "The identifier for the user that created the rule.", - "nullable": true, - "type": "string" - }, - "enabled": { - "description": "Indicates whether you want to run the rule on an interval basis after it is created.", - "type": "boolean" - }, - "execution_status": { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Error message.", - "type": "string" - }, - "reason": { - "description": "Reason for error.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - }, - "last_duration": { - "description": "Duration of last execution of the rule.", - "type": "number" - }, - "last_execution_date": { - "description": "The date and time when rule was executed last.", - "type": "string" - }, - "status": { - "description": "Status of rule execution.", - "enum": [ - "ok", - "active", - "error", - "warning", - "pending", - "unknown" - ], - "type": "string" - }, - "warning": { - "additionalProperties": false, - "properties": { - "message": { - "description": "Warning message.", - "type": "string" - }, - "reason": { - "description": "Reason for warning.", - "enum": [ - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "type": "string" - } - }, - "required": [ - "reason", - "message" - ], - "type": "object" - } - }, - "required": [ - "status", - "last_execution_date" - ], - "type": "object" - }, - "id": { - "description": "The identifier for the rule.", - "type": "string" - }, - "is_snoozed_until": { - "description": "The date when the rule will no longer be snoozed.", - "nullable": true, - "type": "string" - }, - "last_run": { - "additionalProperties": false, - "nullable": true, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "mapped_params": { - "additionalProperties": {}, - "type": "object" - }, - "monitoring": { - "additionalProperties": false, - "description": "Monitoring details of the rule.", - "properties": { - "run": { - "additionalProperties": false, - "description": "Rule run details.", - "properties": { - "calculated_metrics": { - "additionalProperties": false, - "description": "Calculation of different percentiles and success ratio.", - "properties": { - "p50": { - "type": "number" - }, - "p95": { - "type": "number" - }, - "p99": { - "type": "number" - }, - "success_ratio": { - "type": "number" - } - }, - "required": [ - "success_ratio" - ], - "type": "object" - }, - "history": { - "description": "History of the rule run.", - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule run.", - "type": "number" - }, - "outcome": { - "additionalProperties": false, - "properties": { - "alerts_count": { - "additionalProperties": false, - "properties": { - "active": { - "description": "Number of active alerts during last run.", - "nullable": true, - "type": "number" - }, - "ignored": { - "description": "Number of ignored alerts during last run.", - "nullable": true, - "type": "number" - }, - "new": { - "description": "Number of new alerts during last run.", - "nullable": true, - "type": "number" - }, - "recovered": { - "description": "Number of recovered alerts during last run.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "outcome": { - "description": "Outcome of last run of the rule. Value could be succeeded, warning or failed.", - "enum": [ - "succeeded", - "warning", - "failed" - ], - "type": "string" - }, - "outcome_msg": { - "items": { - "description": "Outcome message generated during last rule run.", - "type": "string" - }, - "nullable": true, - "type": "array" - }, - "outcome_order": { - "description": "Order of the outcome.", - "type": "number" - }, - "warning": { - "description": "Warning of last rule execution.", - "enum": [ - "read", - "decrypt", - "execute", - "unknown", - "license", - "timeout", - "disabled", - "validate", - "maxExecutableActions", - "maxAlerts", - "maxQueuedActions" - ], - "nullable": true, - "type": "string" - } - }, - "required": [ - "outcome", - "alerts_count" - ], - "type": "object" - }, - "success": { - "description": "Indicates whether the rule run was successful.", - "type": "boolean" - }, - "timestamp": { - "description": "Time of rule run.", - "type": "number" - } - }, - "required": [ - "success", - "timestamp" - ], - "type": "object" - }, - "type": "array" - }, - "last_run": { - "additionalProperties": false, - "properties": { - "metrics": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of most recent rule run.", - "type": "number" - }, - "gap_duration_s": { - "description": "Duration in seconds of rule run gap.", - "nullable": true, - "type": "number" - }, - "total_alerts_created": { - "description": "Total number of alerts created during last rule run.", - "nullable": true, - "type": "number" - }, - "total_alerts_detected": { - "description": "Total number of alerts detected during last rule run.", - "nullable": true, - "type": "number" - }, - "total_indexing_duration_ms": { - "description": "Total time spent indexing documents during last rule run in milliseconds.", - "nullable": true, - "type": "number" - }, - "total_search_duration_ms": { - "description": "Total time spent performing Elasticsearch searches as measured by Kibana; includes network latency and time spent serializing or deserializing the request and response.", - "nullable": true, - "type": "number" - } - }, - "type": "object" - }, - "timestamp": { - "description": "Time of the most recent rule run.", - "type": "string" - } - }, - "required": [ - "timestamp", - "metrics" - ], - "type": "object" - } - }, - "required": [ - "history", - "calculated_metrics", - "last_run" - ], - "type": "object" - } - }, - "required": [ - "run" - ], - "type": "object" - }, - "mute_all": { - "description": "Indicates whether all alerts are muted.", - "type": "boolean" - }, - "muted_alert_ids": { - "items": { - "description": "List of identifiers of muted alerts. ", - "type": "string" - }, - "type": "array" - }, - "name": { - "description": " The name of the rule.", - "type": "string" - }, - "next_run": { - "description": "Date and time of the next run of the rule.", - "nullable": true, - "type": "string" - }, - "notify_when": { - "description": "Indicates how often alerts generate actions. Valid values include: `onActionGroupChange`: Actions run when the alert status changes; `onActiveAlert`: Actions run when the alert becomes active and at each check interval while the rule conditions are met; `onThrottleInterval`: Actions run when the alert becomes active and at the interval specified in the throttle property while the rule conditions are met. NOTE: You cannot specify `notify_when` at both the rule and action level. The recommended method is to set it for each action. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "enum": [ - "onActionGroupChange", - "onActiveAlert", - "onThrottleInterval" - ], - "nullable": true, - "type": "string" - }, - "params": { - "additionalProperties": {}, - "description": "The parameters for the rule.", - "type": "object" - }, - "revision": { - "description": "The rule revision number.", - "type": "number" - }, - "rule_type_id": { - "description": "The rule type identifier.", - "type": "string" - }, - "running": { - "description": "Indicates whether the rule is running.", - "nullable": true, - "type": "boolean" - }, - "schedule": { - "additionalProperties": false, - "properties": { - "interval": { - "description": "The interval is specified in seconds, minutes, hours, or days.", - "type": "string" - } - }, - "required": [ - "interval" - ], - "type": "object" - }, - "scheduled_task_id": { - "description": "Identifier of the scheduled task.", - "type": "string" - }, - "snooze_schedule": { - "items": { - "additionalProperties": false, - "properties": { - "duration": { - "description": "Duration of the rule snooze schedule.", - "type": "number" - }, - "id": { - "description": "Identifier of the rule snooze schedule.", - "type": "string" - }, - "rRule": { - "additionalProperties": false, - "properties": { - "byhour": { - "items": { - "description": "Indicates hours of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "byminute": { - "items": { - "description": "Indicates minutes of the hour to recur.", - "type": "number" - }, - "type": "array" - }, - "bymonth": { - "items": { - "description": "Indicates months of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "bymonthday": { - "items": { - "description": "Indicates the days of the month to recur.", - "type": "number" - }, - "type": "array" - }, - "bysecond": { - "items": { - "description": "Indicates seconds of the day to recur.", - "type": "number" - }, - "type": "array" - }, - "bysetpos": { - "items": { - "description": "A positive or negative integer affecting the nth day of the month. For example, -2 combined with `byweekday` of FR is 2nd to last Friday of the month. It is recommended to not set this manually and just use `byweekday`.", - "type": "number" - }, - "type": "array" - }, - "byweekday": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ], - "description": "Indicates the days of the week to recur or else nth-day-of-month strings. For example, \"+2TU\" second Tuesday of month, \"-1FR\" last Friday of the month, which are internally converted to a `byweekday/bysetpos` combination." - }, - "type": "array" - }, - "byweekno": { - "items": { - "description": "Indicates number of the week hours to recur.", - "type": "number" - }, - "type": "array" - }, - "byyearday": { - "items": { - "description": "Indicates the days of the year that this rule should recur.", - "type": "number" - }, - "type": "array" - }, - "count": { - "description": "Number of times the rule should recur until it stops.", - "type": "number" - }, - "dtstart": { - "description": "Rule start date in Coordinated Universal Time (UTC).", - "type": "string" - }, - "freq": { - "description": "Indicates frequency of the rule. Options are YEARLY, MONTHLY, WEEKLY, DAILY.", - "enum": [ - 0, - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer" - }, - "interval": { - "description": "Indicates the interval of frequency. For example, 1 and YEARLY is every 1 year, 2 and WEEKLY is every 2 weeks.", - "type": "number" - }, - "tzid": { - "description": "Indicates timezone abbreviation.", - "type": "string" - }, - "until": { - "description": "Recur the rule until this date.", - "type": "string" - }, - "wkst": { - "description": "Indicates the start of week, defaults to Monday.", - "enum": [ - "MO", - "TU", - "WE", - "TH", - "FR", - "SA", - "SU" - ], - "type": "string" - } - }, - "required": [ - "dtstart", - "tzid" - ], - "type": "object" - }, - "skipRecurrences": { - "items": { - "description": "Skips recurrence of rule on this date.", - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "duration", - "rRule" - ], - "type": "object" - }, - "type": "array" - }, - "tags": { - "items": { - "description": "The tags for the rule.", - "type": "string" - }, - "type": "array" - }, - "throttle": { - "deprecated": true, - "description": "Deprecated in 8.13.0. Use the `throttle` property in the action `frequency` object instead. The throttle interval, which defines how often an alert generates repeated actions. NOTE: You cannot specify the throttle interval at both the rule and action level. If you set it at the rule level then update the rule in Kibana, it is automatically changed to use action-specific values.", - "nullable": true, - "type": "string" - }, - "updated_at": { - "description": "The date and time that the rule was updated most recently.", - "type": "string" - }, - "updated_by": { - "description": "The identifier for the user that updated this rule most recently.", - "nullable": true, - "type": "string" - }, - "view_in_app_relative_url": { - "description": "Relative URL to view rule in the app.", - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "enabled", - "name", - "tags", - "rule_type_id", - "consumer", - "schedule", - "actions", - "params", - "created_by", - "updated_by", - "created_at", - "updated_at", - "api_key_owner", - "mute_all", - "muted_alert_ids", - "execution_status", - "revision" - ], - "type": "object" - } - } - }, - "description": "Indicates a successful call." - } - }, - "summary": "Get information about rules", - "tags": [ - "alerting" - ] - } - }, "/api/status": { "get": { - "operationId": "%2Fapi%2Fstatus#0", + "operationId": "/api/status#0", "parameters": [ { "description": "The version of the API to use", @@ -5139,9 +435,6 @@ } ], "tags": [ - { - "name": "alerting" - }, { "name": "system" } diff --git a/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap index a3c634f582d436..3e16455f5006eb 100644 --- a/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap +++ b/packages/kbn-router-to-openapispec/src/__snapshots__/generate_oas.test.ts.snap @@ -44,7 +44,7 @@ Object { "paths": Object { "/foo/{id}": Object { "get": Object { - "operationId": "%2Ffoo%2F%7Bid%7D#0", + "operationId": "/foo/{id}#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -138,7 +138,7 @@ Object { "/bar": Object { "get": Object { "deprecated": true, - "operationId": "%2Fbar#0", + "operationId": "/bar#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -229,7 +229,7 @@ OK response oas-test-version-2", "/foo/{id}/{path*}": Object { "delete": Object { "description": "route description", - "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#2", + "operationId": "/foo/{id}/{path*}#2", "parameters": Array [ Object { "description": "The version of the API to use", @@ -267,7 +267,7 @@ OK response oas-test-version-2", }, "get": Object { "description": "route description", - "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#0", + "operationId": "/foo/{id}/{path*}#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -413,7 +413,7 @@ OK response oas-test-version-2", }, "post": Object { "description": "route description", - "operationId": "%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#1", + "operationId": "/foo/{id}/{path*}#1", "parameters": Array [ Object { "description": "The version of the API to use", @@ -570,7 +570,7 @@ OK response oas-test-version-2", }, "/no-xsrf/{id}/{path*}": Object { "post": Object { - "operationId": "%2Fno-xsrf%2F%7Bid%7D%2F%7Bpath*%7D#1", + "operationId": "/no-xsrf/{id}/{path*}#1", "parameters": Array [ Object { "description": "The version of the API to use", @@ -721,7 +721,7 @@ Object { "paths": Object { "/recursive": Object { "get": Object { - "operationId": "%2Frecursive#0", + "operationId": "/recursive#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -804,7 +804,7 @@ Object { "paths": Object { "/foo/{id}": Object { "get": Object { - "operationId": "%2Ffoo%2F%7Bid%7D#0", + "operationId": "/foo/{id}#0", "parameters": Array [ Object { "description": "The version of the API to use", @@ -842,7 +842,7 @@ Object { }, "/test": Object { "get": Object { - "operationId": "%2Ftest#0", + "operationId": "/test#0", "parameters": Array [ Object { "description": "The version of the API to use", diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts b/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts index 760deff0200226..09bb6064c2bcb7 100644 --- a/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts +++ b/packages/kbn-router-to-openapispec/src/generate_oas.test.fixture.ts @@ -33,7 +33,7 @@ export const sharedOas = { '/bar': { get: { deprecated: true, - operationId: '%2Fbar#0', + operationId: '/bar#0', parameters: [ { description: 'The version of the API to use', @@ -152,7 +152,7 @@ export const sharedOas = { '/foo/{id}/{path*}': { get: { description: 'route description', - operationId: '%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#0', + operationId: '/foo/{id}/{path*}#0', parameters: [ { description: 'The version of the API to use', @@ -276,7 +276,7 @@ export const sharedOas = { }, post: { description: 'route description', - operationId: '%2Ffoo%2F%7Bid%7D%2F%7Bpath*%7D#1', + operationId: '/foo/{id}/{path*}#1', parameters: [ { description: 'The version of the API to use', diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts index 71f3ff1eeca70d..5c783e739d0453 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.test.ts @@ -110,39 +110,6 @@ describe('processEnum', () => { ], }, }, - { - name: 'correctly transforms schema.nullable inputs', - input: { - anyOf: [ - { - description: 'test', - type: 'object', - properties: { - test: { - type: 'string', - }, - }, - required: ['test'], - }, - { - enum: [], - nullable: true, - type: undefined, - }, - ], - } as OpenAPIV3.SchemaObject, - expected: { - description: 'test', - type: 'object', - properties: { - test: { - type: 'string', - }, - }, - required: ['test'], - nullable: true, - }, - }, ])('$name', ({ input, expected }) => { processEnum(input); expect(input).toEqual(expected); diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts index fb2e3856ae4950..7bbb7ae2c26d0a 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/enum.ts @@ -9,38 +9,8 @@ import type { OpenAPIV3 } from 'openapi-types'; import { isReferenceObject } from '../../../common'; -/** Identify special case output of schema.nullable() */ -const isNullableOutput = (schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject) => { - return ( - !isReferenceObject(schema) && - Object.keys(schema).length === 3 && - schema.enum?.length === 0 && - schema.nullable === true && - schema.type === undefined - ); -}; - -/** - * Handle special case output of schema.nullable() - * - * We go from: - * { anyOf: [ { type: 'string' }, { nullable: true, enum: [] } ] } - * - * To: - * { type: 'string', nullable: true } - */ -const processNullableOutput = (schema: OpenAPIV3.SchemaObject) => { - if (schema.anyOf!.length !== 2) return false; - const idx = schema.anyOf!.findIndex((item) => isNullableOutput(item)); - if (idx === -1) return false; - const anyOf = schema.anyOf!; - delete schema.anyOf; - schema.nullable = true; - Object.assign(schema, anyOf[1 - idx]); - return true; -}; - -const prettifyEnum = (schema: OpenAPIV3.SchemaObject) => { +export const processEnum = (schema: OpenAPIV3.SchemaObject) => { + if (!schema.anyOf) return; const result: unknown[] = []; let type: OpenAPIV3.SchemaObject['type']; for (const item of schema.anyOf!) { @@ -54,9 +24,3 @@ const prettifyEnum = (schema: OpenAPIV3.SchemaObject) => { schema.enum = result; delete schema.anyOf; }; - -export const processEnum = (schema: OpenAPIV3.SchemaObject) => { - if (!schema.anyOf) return; - if (processNullableOutput(schema)) return; - prettifyEnum(schema); -}; diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts index ae257aaec1edff..fd7b127ef87260 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.test.ts @@ -11,10 +11,13 @@ import { joi2JsonInternal } from '../../parse'; import { processObject } from './object'; test.each([ - [schema.object({}), { type: 'object', properties: {}, additionalProperties: false }], + [ + schema.object({}), + { type: 'object', properties: {}, additionalProperties: false, required: [] }, + ], [ schema.object({ never: schema.never() }), - { type: 'object', properties: {}, additionalProperties: false }, + { type: 'object', properties: {}, additionalProperties: false, required: [] }, ], [ schema.object( diff --git a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts index 0b21134061c78e..ec5888f986bd60 100644 --- a/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts +++ b/packages/kbn-router-to-openapispec/src/oas_converter/kbn_config_schema/post_process_mutations/mutations/object.ts @@ -38,7 +38,7 @@ const populateRequiredFields = (schema: OpenAPIV3.SchemaObject): void => { } } - if (required.length > 0) schema.required = required; + schema.required = required; }; const removeNeverType = (schema: OpenAPIV3.SchemaObject): void => { diff --git a/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts b/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts deleted file mode 100644 index 270b6b6e2c9820..00000000000000 --- a/packages/kbn-router-to-openapispec/src/operation_id_counter.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { createOperationIdCounter } from './operation_id_counter'; - -test('empty case', () => { - const opIdCounter = createOperationIdCounter(); - expect(opIdCounter('')).toBe('#0'); -}); - -test('other cases', () => { - const opIdCounter = createOperationIdCounter(); - const tests = [ - ['/', '%2F#0'], - ['/api/cool', '%2Fapi%2Fcool#0'], - ['/api/cool', '%2Fapi%2Fcool#1'], - ['/api/cool', '%2Fapi%2Fcool#2'], - ['/api/cool/{variable}', '%2Fapi%2Fcool%2F%7Bvariable%7D#0'], - ['/api/cool/{optionalVariable?}', '%2Fapi%2Fcool%2F%7BoptionalVariable%3F%7D#0'], - ['/api/cool/{optionalVariable?}', '%2Fapi%2Fcool%2F%7BoptionalVariable%3F%7D#1'], - ]; - - tests.forEach(([input, expected]) => { - expect(opIdCounter(input)).toBe(expected); - }); -}); diff --git a/packages/kbn-router-to-openapispec/src/operation_id_counter.ts b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts index 0842ec88d094f7..91fe2adf395d84 100644 --- a/packages/kbn-router-to-openapispec/src/operation_id_counter.ts +++ b/packages/kbn-router-to-openapispec/src/operation_id_counter.ts @@ -11,7 +11,6 @@ export type OperationIdCounter = (name: string) => string; export const createOperationIdCounter = () => { const operationIdCounters = new Map(); return (name: string): string => { - name = encodeURIComponent(name); // Aliases an operationId to ensure it is unique across // multiple method+path combinations sharing a name. // "search" -> "search#0", "search#1", etc. From f47f853eab922094335aaff9783be5bc2c44a556 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Tue, 13 Aug 2024 19:46:24 +0200 Subject: [PATCH 15/92] [Synthetics] Make overview grid embeddable (#160597) ## Summary Overview grid can be embedded as part of dashboard !! Can be added by selecting type `Select Type -> Synthetics -> ` image image --- .../common/constants/synthetics_alerts.ts | 2 +- .../runtime_types/monitor_management/state.ts | 1 + .../common/runtime_types/ping/ping.ts | 2 +- .../embeddables/common/field_selector.tsx | 128 ++++++++++++++++ .../common/monitor_configuration.tsx | 120 +++++++++++++++ .../common/monitor_filters_form.tsx | 94 ++++++++++++ .../common/monitors_open_configuration.tsx | 59 ++++++++ .../apps/embeddables/common/optional_text.tsx | 20 +++ .../common/show_selected_filters.tsx | 53 +++++++ .../public/apps/embeddables/constants.ts | 20 ++- .../hooks/use_fetch_synthetics_suggestions.ts | 51 +++++++ .../monitors_embeddable_factory.tsx} | 61 ++++++-- .../monitors_grid_component.tsx | 60 ++++++++ .../monitors_overview/redux_store.ts | 25 +++ .../embeddables/monitors_overview/types.ts | 19 +++ .../apps/embeddables/register_embeddables.ts | 46 +++--- .../embeddables/stats_overview/redux_store.ts | 26 ++++ .../stats_overview_component.tsx | 49 ++++++ .../stats_overview_embeddable_factory.tsx | 135 +++++++++++++++++ .../status_overview_component.tsx | 19 --- .../synthetics_embeddable_context.tsx | 21 ++- .../create_monitors_overview_panel_action.tsx | 55 +++++++ ...=> create_stats_overview_panel_action.tsx} | 36 ++--- .../ui_actions/register_ui_actions.ts | 30 ++++ .../common/components/add_to_dashboard.tsx | 142 ++++++++++++++++++ .../components/embeddable_panel_wrapper.tsx | 113 +------------- .../monitor_add_edit/form/field_config.tsx | 4 +- .../grid_by_group/grid_group_item.tsx | 40 ++++- .../overview/grid_by_group/group_fields.tsx | 22 ++- .../overview/overview/metric_item_icon.tsx | 40 ++++- .../overview/overview/overview_grid.tsx | 14 +- .../overview/overview/overview_status.tsx | 18 +-- .../contexts/synthetics_refresh_context.tsx | 13 +- .../contexts/synthetics_shared_context.tsx | 16 +- .../apps/synthetics/lib/alert_types/index.ts | 9 +- .../lib/alert_types/monitor_status.tsx | 3 +- .../apps/synthetics/lib/alert_types/tls.tsx | 4 +- .../apps/synthetics/lib/alert_types/types.ts | 15 ++ .../apps/synthetics/state/overview/api.ts | 1 + .../apps/synthetics/state/overview/index.ts | 4 + .../public/apps/synthetics/state/store.ts | 1 - .../synthetics/public/kibana_services.ts | 19 --- .../synthetics/public/plugin.ts | 4 - .../public/utils/api_service/api_service.ts | 4 +- .../synthetics/server/routes/common.ts | 1 + .../server/routes/suggestions/route.ts | 18 ++- .../apis/synthetics/suggestions.ts | 24 +++ 47 files changed, 1401 insertions(+), 260 deletions(-) create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/field_selector.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_configuration.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_filters_form.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitors_open_configuration.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/optional_text.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/show_selected_filters.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/hooks/use_fetch_synthetics_suggestions.ts rename x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/{status_overview/status_overview_embeddable_factory.tsx => monitors_overview/monitors_embeddable_factory.tsx} (57%) create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_grid_component.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/redux_store.ts create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/types.ts create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/redux_store.ts create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_component.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx delete mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_component.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_monitors_overview_panel_action.tsx rename x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/{create_overview_panel_action.tsx => create_stats_overview_panel_action.tsx} (57%) create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.ts create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/add_to_dashboard.tsx create mode 100644 x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/types.ts delete mode 100644 x-pack/plugins/observability_solution/synthetics/public/kibana_services.ts diff --git a/x-pack/plugins/observability_solution/synthetics/common/constants/synthetics_alerts.ts b/x-pack/plugins/observability_solution/synthetics/common/constants/synthetics_alerts.ts index 620c5c88033a75..4f525bda17564d 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/constants/synthetics_alerts.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/constants/synthetics_alerts.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { ActionGroup } from '@kbn/alerting-plugin/common'; +import type { ActionGroup } from '@kbn/alerting-plugin/common'; import { i18n } from '@kbn/i18n'; export type MonitorStatusActionGroup = diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts index 9fbda10dfba565..0c546eb431deae 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts @@ -34,6 +34,7 @@ export const FetchMonitorOverviewQueryArgsCodec = t.partial({ projects: t.array(t.string), schedules: t.array(t.string), monitorTypes: t.array(t.string), + monitorQueryIds: t.array(t.string), sortField: t.string, sortOrder: t.string, }); diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/ping/ping.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/ping/ping.ts index 5d481038b0869b..2e9e36460c7be0 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/ping/ping.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/ping/ping.ts @@ -16,7 +16,7 @@ export const PingErrorType = t.intersection([ t.partial({ code: t.string, id: t.string, - stack_trace: t.string, + stack_trace: t.union([t.string, t.null]), type: t.string, }), t.type({ diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/field_selector.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/field_selector.tsx new file mode 100644 index 00000000000000..0bb37e6c4e7362 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/field_selector.tsx @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { ReactNode, useState } from 'react'; +import { EuiComboBox, EuiComboBoxOptionOption, EuiFlexItem, EuiFormRow } from '@elastic/eui'; +import { debounce } from 'lodash'; +import { Controller, FieldPath, useFormContext } from 'react-hook-form'; +import { + Suggestion, + useFetchSyntheticsSuggestions, +} from '../hooks/use_fetch_synthetics_suggestions'; +import { OptionalText } from './optional_text'; +import { MonitorFilters } from '../monitors_overview/types'; + +interface Option { + label: string; + value: string; +} + +export interface Props { + dataTestSubj: string; + label: string; + name: FieldPath; + placeholder: string; + tooltip?: ReactNode; + suggestions?: Suggestion[]; + isLoading?: boolean; + required?: boolean; +} + +export function FieldSelector({ + dataTestSubj, + label, + name, + placeholder, + tooltip, + required, +}: Props) { + const { control, getFieldState } = useFormContext(); + const [search, setSearch] = useState(''); + + const { suggestions = [], isLoading } = useFetchSyntheticsSuggestions({ + search, + fieldName: name, + }); + + const debouncedSearch = debounce((value) => setSearch(value), 200); + + return ( + + + {label} {tooltip} + + ) : ( + label + ) + } + isInvalid={getFieldState(name).invalid} + fullWidth + labelAppend={!required ? : undefined} + > + { + const selectedOptions = + !!Array.isArray(field.value) && field.value.length + ? createSelectedOptions(field.value, suggestions) + : []; + + return ( + { + if (selected.length) { + field.onChange( + selected.map((option) => ({ + label: option.label, + value: option.value, + })) + ); + return; + } + field.onChange([]); + }} + onSearchChange={(value: string) => debouncedSearch(value)} + options={createOptions(suggestions)} + placeholder={placeholder} + selectedOptions={selectedOptions} + /> + ); + }} + /> + + + ); +} + +function createOptions(suggestions: Suggestion[] = []): Option[] { + return suggestions + .map((suggestion) => ({ label: suggestion.label, value: suggestion.value })) + .sort((a, b) => String(a.label).localeCompare(b.label)); +} + +function createSelectedOptions(selected: Option[] = [], suggestions: Suggestion[] = []): Option[] { + return selected.map((value) => { + const suggestion = suggestions.find((s) => s.value === value.value); + if (!suggestion) { + return { label: value.value, value: value.value }; + } + return { label: suggestion.label, value: suggestion.value }; + }); +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_configuration.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_configuration.tsx new file mode 100644 index 00000000000000..24995e898b3a17 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_configuration.tsx @@ -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 React from 'react'; +import { + EuiButton, + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiFlyout, + EuiFlyoutHeader, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiTitle, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { FormProvider, useForm } from 'react-hook-form'; +import { MonitorFilters } from '../monitors_overview/types'; +import { MonitorFiltersForm } from './monitor_filters_form'; + +interface MonitorConfigurationProps { + initialInput?: { + filters: MonitorFilters; + }; + onCreate: (props: { filters: MonitorFilters }) => void; + onCancel: () => void; +} + +export function MonitorConfiguration({ + initialInput, + onCreate, + onCancel, +}: MonitorConfigurationProps) { + const methods = useForm({ + defaultValues: { + monitorIds: [], + projects: [], + tags: [], + monitorTypes: [], + locations: [], + }, + values: initialInput?.filters, + mode: 'all', + }); + const { getValues, formState } = methods; + + const onConfirmClick = () => { + const newFilters = getValues(); + onCreate({ + filters: newFilters, + }); + }; + + return ( + + + + + +

+ {i18n.translate( + 'xpack.synthetics.overviewEmbeddable.config.sloSelector.headerTitle', + { + defaultMessage: 'Overview configuration', + } + )} +

+
+
+
+
+ + <> + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_filters_form.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_filters_form.tsx new file mode 100644 index 00000000000000..80d2f3aa072cdf --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitor_filters_form.tsx @@ -0,0 +1,94 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { EuiFlexGroup, EuiIconTip } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; +import { FieldSelector } from './field_selector'; + +export function MonitorFiltersForm() { + return ( + + + + } + /> + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitors_open_configuration.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitors_open_configuration.tsx new file mode 100644 index 00000000000000..48dbcb085b8061 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/monitors_open_configuration.tsx @@ -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 React from 'react'; +import type { CoreStart } from '@kbn/core/public'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { MonitorFilters } from '../monitors_overview/types'; +import { ClientPluginsStart } from '../../../plugin'; +import { MonitorConfiguration } from './monitor_configuration'; + +export async function openMonitorConfiguration({ + coreStart, + pluginStart, + initialState, +}: { + coreStart: CoreStart; + pluginStart: ClientPluginsStart; + initialState?: { filters: MonitorFilters }; +}): Promise<{ filters: MonitorFilters }> { + const { overlays } = coreStart; + const queryClient = new QueryClient(); + return new Promise(async (resolve, reject) => { + try { + const flyoutSession = overlays.openFlyout( + toMountPoint( + + + { + flyoutSession.close(); + resolve(update); + }} + onCancel={() => { + flyoutSession.close(); + reject(); + }} + /> + + , + coreStart + ) + ); + } catch (error) { + reject(error); + } + }); +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/optional_text.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/optional_text.tsx new file mode 100644 index 00000000000000..28bd67301af166 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/optional_text.tsx @@ -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 { EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React from 'react'; + +export function OptionalText() { + return ( + + {i18n.translate('xpack.synthetics.formEdit.optionalLabel', { + defaultMessage: 'Optional', + })} + + ); +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/show_selected_filters.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/show_selected_filters.tsx new file mode 100644 index 00000000000000..0a6f6ab515d94a --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/common/show_selected_filters.tsx @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiBadgeGroup, EuiBadge } from '@elastic/eui'; +import { MonitorFilters } from '../monitors_overview/types'; + +export const ShowSelectedFilters = ({ filters }: { filters: MonitorFilters }) => { + return ( + + {Object.entries(filters).map(([key, filter]) => { + if (!filter || !filter.length) { + return null; + } + const values = filter + .map((f: { label: string; value: string }) => f.label || f.value) + .join(', '); + + return ( + + {i18n.translate('xpack.synthetics.showSelectedFilters.monitorBadgeLabel', { + defaultMessage: '{label}: {value}', + values: { label: labels[key], value: values }, + })} + + ); + })} + + ); +}; + +const labels: Record = { + monitorIds: i18n.translate('xpack.synthetics.showSelectedFilters.monitorIdLabel', { + defaultMessage: 'Monitor', + }), + tags: i18n.translate('xpack.synthetics.showSelectedFilters.tagsLabel', { + defaultMessage: 'Tags', + }), + locations: i18n.translate('xpack.synthetics.showSelectedFilters.locationsLabel', { + defaultMessage: 'Location', + }), + monitorTypes: i18n.translate('xpack.synthetics.showSelectedFilters.monitorTypeLabel', { + defaultMessage: 'Type', + }), + projects: i18n.translate('xpack.synthetics.showSelectedFilters.presetLabel', { + defaultMessage: 'Project', + }), +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/constants.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/constants.ts index b471d46ac3832c..5afcf2d3026b4c 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/constants.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/constants.ts @@ -5,4 +5,22 @@ * 2.0. */ -export const SYNTHETICS_OVERVIEW_EMBEDDABLE = 'SYNTHETICS_OVERVIEW_EMBEDDABLE'; +import { i18n } from '@kbn/i18n'; + +export const SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE = 'SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE'; +export const SYNTHETICS_MONITORS_EMBEDDABLE = 'SYNTHETICS_MONITORS_EMBEDDABLE'; + +export const COMMON_SYNTHETICS_GROUPING = [ + { + id: 'synthetics', + getDisplayName: () => + i18n.translate('xpack.synthetics.common.constants.grouping.legacy', { + defaultMessage: 'Synthetics', + }), + getIconType: () => { + return 'online'; + }, + }, +]; + +export const ALL_VALUE = '*'; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/hooks/use_fetch_synthetics_suggestions.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/hooks/use_fetch_synthetics_suggestions.ts new file mode 100644 index 00000000000000..b9f838675bce49 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/hooks/use_fetch_synthetics_suggestions.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useFetcher } from '@kbn/observability-shared-plugin/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { ClientPluginsStart } from '../../../plugin'; + +export interface Suggestion { + label: string; + value: string; + count: number; +} + +export interface Params { + fieldName: string; + filters?: { + locations?: string[]; + monitorIds?: string[]; + tags?: string[]; + projects?: string[]; + }; + search: string; +} + +type ApiResponse = Record; + +export function useFetchSyntheticsSuggestions({ filters, fieldName, search }: Params) { + const { http } = useKibana().services; + const { locations, monitorIds, tags, projects } = filters || {}; + + const { loading, data } = useFetcher(async () => { + return await http.get('/internal/synthetics/suggestions', { + query: { + locations: locations || [], + monitorQueryIds: monitorIds || [], + tags: tags || [], + projects: projects || [], + query: search, + }, + }); + }, [http, locations, monitorIds, projects, search, tags]); + + return { + suggestions: data?.[fieldName] ?? [], + isLoading: Boolean(loading), + }; +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_embeddable_factory.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx similarity index 57% rename from x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_embeddable_factory.tsx rename to x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx index 3f7b3fcf136999..e23de3cc67a14f 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_embeddable_factory.tsx @@ -5,9 +5,8 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; - import React, { useEffect } from 'react'; +import { i18n } from '@kbn/i18n'; import { DefaultEmbeddableApi, ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import { initializeTitles, @@ -16,25 +15,30 @@ import { PublishesWritablePanelTitle, PublishesPanelTitle, SerializedTitles, + HasEditCapabilities, } from '@kbn/presentation-publishing'; import { BehaviorSubject, Subject } from 'rxjs'; import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; -import { SYNTHETICS_OVERVIEW_EMBEDDABLE } from '../constants'; +import { MonitorFilters } from './types'; +import { StatusGridComponent } from './monitors_grid_component'; +import { SYNTHETICS_MONITORS_EMBEDDABLE } from '../constants'; import { ClientPluginsStart } from '../../../plugin'; -import { StatusOverviewComponent } from './status_overview_component'; export const getOverviewPanelTitle = () => - i18n.translate('xpack.synthetics.statusOverview.displayName', { - defaultMessage: 'Synthetics Status Overview', + i18n.translate('xpack.synthetics.monitors.displayName', { + defaultMessage: 'Synthetics Monitors', }); -export type OverviewEmbeddableState = SerializedTitles; +export type OverviewEmbeddableState = SerializedTitles & { + filters: MonitorFilters; +}; export type StatusOverviewApi = DefaultEmbeddableApi & PublishesWritablePanelTitle & - PublishesPanelTitle; + PublishesPanelTitle & + HasEditCapabilities; -export const getStatusOverviewEmbeddableFactory = ( +export const getMonitorsEmbeddableFactory = ( getStartServices: StartServicesAccessor ) => { const factory: ReactEmbeddableFactory< @@ -42,29 +46,57 @@ export const getStatusOverviewEmbeddableFactory = ( OverviewEmbeddableState, StatusOverviewApi > = { - type: SYNTHETICS_OVERVIEW_EMBEDDABLE, + type: SYNTHETICS_MONITORS_EMBEDDABLE, deserializeState: (state) => { return state.rawState as OverviewEmbeddableState; }, buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const [coreStart, pluginStart] = await getStartServices(); + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); const reload$ = new Subject(); + const filters$ = new BehaviorSubject(state.filters); const api = buildApi( { ...titlesApi, defaultPanelTitle: defaultTitle$, + getTypeDisplayName: () => + i18n.translate('xpack.synthetics.editSloOverviewEmbeddableTitle.typeDisplayName', { + defaultMessage: 'filters', + }), + isEditingEnabled: () => true, serializeState: () => { return { rawState: { ...serializeTitles(), + filters: filters$.getValue(), }, }; }, + onEdit: async () => { + try { + const { openMonitorConfiguration } = await import( + '../common/monitors_open_configuration' + ); + + const result = await openMonitorConfiguration({ + coreStart, + pluginStart, + initialState: { + filters: filters$.getValue(), + }, + }); + filters$.next(result.filters); + } catch (e) { + return Promise.reject(); + } + }, }, { ...titleComparators, + filters: [filters$, (value) => filters$.next(value)], } ); @@ -77,7 +109,7 @@ export const getStatusOverviewEmbeddableFactory = ( return { api, Component: () => { - const [] = useBatchedPublishingSubjects(); + const [filters] = useBatchedPublishingSubjects(filters$); useEffect(() => { return () => { @@ -86,9 +118,14 @@ export const getStatusOverviewEmbeddableFactory = ( }, []); return (
- +
); }, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_grid_component.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_grid_component.tsx new file mode 100644 index 00000000000000..c3801bb98ca9af --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/monitors_grid_component.tsx @@ -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 React, { useEffect, useRef } from 'react'; +import { Subject } from 'rxjs'; +import { i18n } from '@kbn/i18n'; +import { useDispatch } from 'react-redux'; +import { getOverviewStore } from './redux_store'; +import { ShowSelectedFilters } from '../common/show_selected_filters'; +import { setOverviewPageStateAction } from '../../synthetics/state'; +import { MonitorFilters } from './types'; +import { EmbeddablePanelWrapper } from '../../synthetics/components/common/components/embeddable_panel_wrapper'; +import { SyntheticsEmbeddableContext } from '../synthetics_embeddable_context'; +import { OverviewGrid } from '../../synthetics/components/monitors_page/overview/overview/overview_grid'; + +export const StatusGridComponent = ({ + reload$, + filters, +}: { + reload$: Subject; + filters: MonitorFilters; +}) => { + const overviewStore = useRef(getOverviewStore()); + + return ( + } + > + + + + + ); +}; + +const MonitorsOverviewList = ({ filters }: { filters: MonitorFilters }) => { + const dispatch = useDispatch(); + useEffect(() => { + if (!filters) return; + dispatch( + setOverviewPageStateAction({ + tags: filters.tags.map((tag) => tag.value), + locations: filters.locations.map((location) => location.value), + monitorTypes: filters.monitorTypes.map((monitorType) => monitorType.value), + monitorQueryIds: filters.monitorIds.map((monitorId) => monitorId.value), + projects: filters.projects.map((project) => project.value), + }) + ); + }, [dispatch, filters]); + + return ; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/redux_store.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/redux_store.ts new file mode 100644 index 00000000000000..86bdd933116749 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/redux_store.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 { configureStore } from '@reduxjs/toolkit'; +import createSagaMiddleware from 'redux-saga'; +import { rootReducer } from '../../synthetics/state/root_reducer'; +import { rootEffect } from '../../synthetics/state/root_effect'; + +export const getOverviewStore = () => { + const sagaMW = createSagaMiddleware(); + + const store = configureStore({ + reducer: rootReducer, + middleware: (getDefaultMiddleware) => getDefaultMiddleware({ thunk: false }).concat(sagaMW), + devTools: process.env.NODE_ENV !== 'production', + preloadedState: {}, + enhancers: [], + }); + sagaMW.run(rootEffect); + return store; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/types.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/types.ts new file mode 100644 index 00000000000000..e8d1c71ee7d115 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/monitors_overview/types.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. + */ + +interface Option { + label: string; + value: string; +} + +export interface MonitorFilters { + projects: Option[]; + tags: Option[]; + monitorIds: Option[]; + monitorTypes: Option[]; + locations: Option[]; +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/register_embeddables.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/register_embeddables.ts index fbc516a6f611b4..3491df4dfc96fb 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/register_embeddables.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/register_embeddables.ts @@ -7,42 +7,54 @@ import { CoreSetup } from '@kbn/core-lifecycle-browser'; -import { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-browser/src'; -import { createStatusOverviewPanelAction } from './ui_actions/create_overview_panel_action'; import { ClientPluginsSetup, ClientPluginsStart } from '../../plugin'; -import { SYNTHETICS_OVERVIEW_EMBEDDABLE } from './constants'; +import { SYNTHETICS_MONITORS_EMBEDDABLE, SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE } from './constants'; export const registerSyntheticsEmbeddables = ( core: CoreSetup, pluginsSetup: ClientPluginsSetup ) => { pluginsSetup.embeddable.registerReactEmbeddableFactory( - SYNTHETICS_OVERVIEW_EMBEDDABLE, + SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE, async () => { - const { getStatusOverviewEmbeddableFactory } = await import( - './status_overview/status_overview_embeddable_factory' + const { getStatsOverviewEmbeddableFactory } = await import( + './stats_overview/stats_overview_embeddable_factory' ); - return getStatusOverviewEmbeddableFactory(core.getStartServices); + return getStatsOverviewEmbeddableFactory(core.getStartServices); } ); - const { uiActions, cloud, serverless } = pluginsSetup; - - // Initialize actions - const addOverviewPanelAction = createStatusOverviewPanelAction(); + pluginsSetup.embeddable.registerReactEmbeddableFactory( + SYNTHETICS_MONITORS_EMBEDDABLE, + async () => { + const { getMonitorsEmbeddableFactory } = await import( + './monitors_overview/monitors_embeddable_factory' + ); + return getMonitorsEmbeddableFactory(core.getStartServices); + } + ); core.getStartServices().then(([_, pluginsStart]) => { pluginsStart.dashboard.registerDashboardPanelPlacementSetting( - SYNTHETICS_OVERVIEW_EMBEDDABLE, + SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE, () => { return { width: 10, height: 8 }; } ); + pluginsStart.dashboard.registerDashboardPanelPlacementSetting( + SYNTHETICS_MONITORS_EMBEDDABLE, + () => { + return { width: 30, height: 12 }; + } + ); }); - // Assign triggers - // Only register these actions in stateful kibana, and the serverless observability project - if (Boolean((serverless && cloud?.serverless.projectType === 'observability') || !serverless)) { - uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addOverviewPanelAction); - } + const registerAsyncUiActions = async () => { + if (pluginsSetup.uiActions) { + const { registerSyntheticsUiActions } = await import('./ui_actions/register_ui_actions'); + registerSyntheticsUiActions(core, pluginsSetup); + } + }; + // can be done async + registerAsyncUiActions(); }; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/redux_store.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/redux_store.ts new file mode 100644 index 00000000000000..8192b9a787ac7f --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/redux_store.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { configureStore } from '@reduxjs/toolkit'; +import createSagaMiddleware from 'redux-saga'; +import { rootReducer } from '../../synthetics/state/root_reducer'; +import { rootEffect } from '../../synthetics/state/root_effect'; + +export const getStatsOverviewStore = () => { + const sagaMW = createSagaMiddleware(); + + const store = configureStore({ + reducer: rootReducer, + middleware: (getDefaultMiddleware) => getDefaultMiddleware({ thunk: false }).concat(sagaMW), + devTools: process.env.NODE_ENV !== 'production', + preloadedState: {}, + enhancers: [], + }); + sagaMW.run(rootEffect); + + return store; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_component.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_component.tsx new file mode 100644 index 00000000000000..579596615ae72f --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_component.tsx @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useEffect, useRef } from 'react'; +import { Subject } from 'rxjs'; +import { useDispatch } from 'react-redux'; +import { getStatsOverviewStore } from './redux_store'; +import { ShowSelectedFilters } from '../common/show_selected_filters'; +import { MonitorFilters } from '../monitors_overview/types'; +import { setOverviewPageStateAction } from '../../synthetics/state'; +import { SyntheticsEmbeddableContext } from '../synthetics_embeddable_context'; +import { OverviewStatus } from '../../synthetics/components/monitors_page/overview/overview/overview_status'; + +export const StatsOverviewComponent = ({ + reload$, + filters, +}: { + reload$: Subject; + filters: MonitorFilters; +}) => { + const statsOverviewStore = useRef(getStatsOverviewStore()); + + return ( + + + + ); +}; + +const WithFiltersComponent = ({ filters }: { filters: MonitorFilters }) => { + const dispatch = useDispatch(); + useEffect(() => { + dispatch( + setOverviewPageStateAction({ + tags: filters.tags.map((tag) => tag.value), + locations: filters.locations.map((location) => location.value), + monitorTypes: filters.monitorTypes.map((monitorType) => monitorType.value), + monitorQueryIds: filters.monitorIds.map((monitorId) => monitorId.value), + projects: filters.projects.map((project) => project.value), + }) + ); + }, [dispatch, filters]); + + return } />; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx new file mode 100644 index 00000000000000..07f1e72fa1e98c --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/stats_overview/stats_overview_embeddable_factory.tsx @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 React, { useEffect } from 'react'; +import { DefaultEmbeddableApi, ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import { + initializeTitles, + useBatchedPublishingSubjects, + fetch$, + PublishesWritablePanelTitle, + PublishesPanelTitle, + SerializedTitles, + HasEditCapabilities, +} from '@kbn/presentation-publishing'; +import { BehaviorSubject, Subject } from 'rxjs'; +import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; +import { MonitorFilters } from '../monitors_overview/types'; +import { SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE } from '../constants'; +import { ClientPluginsStart } from '../../../plugin'; +import { StatsOverviewComponent } from './stats_overview_component'; + +export const getOverviewPanelTitle = () => + i18n.translate('xpack.synthetics.statusOverview.list.displayName', { + defaultMessage: 'Synthetics Stats Overview', + }); + +export type OverviewEmbeddableState = SerializedTitles & { + filters: MonitorFilters; +}; + +export type StatsOverviewApi = DefaultEmbeddableApi & + PublishesWritablePanelTitle & + PublishesPanelTitle & + HasEditCapabilities; + +export const getStatsOverviewEmbeddableFactory = ( + getStartServices: StartServicesAccessor +) => { + const factory: ReactEmbeddableFactory< + OverviewEmbeddableState, + OverviewEmbeddableState, + StatsOverviewApi + > = { + type: SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE, + deserializeState: (state) => { + return state.rawState as OverviewEmbeddableState; + }, + buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + const [coreStart, pluginStart] = await getStartServices(); + + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const defaultTitle$ = new BehaviorSubject(getOverviewPanelTitle()); + const reload$ = new Subject(); + const filters$ = new BehaviorSubject(state.filters); + + const api = buildApi( + { + ...titlesApi, + defaultPanelTitle: defaultTitle$, + getTypeDisplayName: () => + i18n.translate('xpack.synthetics.editSloOverviewEmbeddableTitle.typeDisplayName', { + defaultMessage: 'filters', + }), + isEditingEnabled: () => true, + onEdit: async () => { + try { + const { openMonitorConfiguration } = await import( + '../common/monitors_open_configuration' + ); + + const result = await openMonitorConfiguration({ + coreStart, + pluginStart, + initialState: { + filters: filters$.getValue(), + }, + }); + filters$.next(result.filters); + } catch (e) { + return Promise.reject(); + } + }, + serializeState: () => { + return { + rawState: { + ...serializeTitles(), + filters: filters$.getValue(), + }, + }; + }, + }, + { + ...titleComparators, + filters: [filters$, (value) => filters$.next(value)], + } + ); + + const fetchSubscription = fetch$(api) + .pipe() + .subscribe((next) => { + reload$.next(next.isReload); + }); + + return { + api, + Component: () => { + const [filters] = useBatchedPublishingSubjects(filters$); + + useEffect(() => { + return () => { + fetchSubscription.unsubscribe(); + }; + }, []); + return ( +
+ +
+ ); + }, + }; + }, + }; + return factory; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_component.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_component.tsx deleted file mode 100644 index 1034f9ea959ecf..00000000000000 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/status_overview/status_overview_component.tsx +++ /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 React from 'react'; -import { Subject } from 'rxjs'; -import { OverviewStatus } from '../../synthetics/components/monitors_page/overview/overview/overview_status'; -import { SyntheticsEmbeddableContext } from '../synthetics_embeddable_context'; - -export const StatusOverviewComponent = ({ reload$ }: { reload$: Subject }) => { - return ( - - - - ); -}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/synthetics_embeddable_context.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/synthetics_embeddable_context.tsx index 0953fb79961b1e..6e4cbd4748e95a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/synthetics_embeddable_context.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/synthetics_embeddable_context.tsx @@ -9,23 +9,32 @@ import React from 'react'; import { createBrowserHistory } from 'history'; import { EuiPanel } from '@elastic/eui'; import { Router } from '@kbn/shared-ux-router'; +import { Subject } from 'rxjs'; +import { Store } from 'redux'; import { SyntheticsSharedContext } from '../synthetics/contexts/synthetics_shared_context'; import { SyntheticsEmbeddableStateContextProvider } from '../synthetics/contexts/synthetics_embeddable_context'; import { getSyntheticsAppProps } from '../synthetics/render_app'; import { SyntheticsSettingsContextProvider } from '../synthetics/contexts'; -export const SyntheticsEmbeddableContext: React.FC<{ search?: string }> = ({ - search, - children, -}) => { +export const SyntheticsEmbeddableContext: React.FC<{ + reload$: Subject; + reduxStore?: Store; +}> = ({ reload$, children, reduxStore }) => { const props = getSyntheticsAppProps(); return ( - + - {children} + + {children} + diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_monitors_overview_panel_action.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_monitors_overview_panel_action.tsx new file mode 100644 index 00000000000000..aa7355c4e1fec1 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_monitors_overview_panel_action.tsx @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import { apiIsPresentationContainer } from '@kbn/presentation-containers'; +import { + IncompatibleActionError, + type UiActionsActionDefinition, +} from '@kbn/ui-actions-plugin/public'; +import { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; +import { ClientPluginsStart } from '../../../plugin'; +import { COMMON_SYNTHETICS_GROUPING, SYNTHETICS_MONITORS_EMBEDDABLE } from '../constants'; + +export const ADD_SYNTHETICS_MONITORS_OVERVIEW_ACTION_ID = + 'CREATE_SYNTHETICS_MONITORS_OVERVIEW_EMBEDDABLE'; + +export function createMonitorsOverviewPanelAction( + getStartServices: StartServicesAccessor +): UiActionsActionDefinition { + return { + id: ADD_SYNTHETICS_MONITORS_OVERVIEW_ACTION_ID, + grouping: COMMON_SYNTHETICS_GROUPING, + order: 30, + getIconType: () => 'play', + isCompatible: async ({ embeddable }) => { + return apiIsPresentationContainer(embeddable); + }, + execute: async ({ embeddable }) => { + if (!apiIsPresentationContainer(embeddable)) throw new IncompatibleActionError(); + const [coreStart, pluginStart] = await getStartServices(); + const { openMonitorConfiguration } = await import('../common/monitors_open_configuration'); + + const initialState = await openMonitorConfiguration({ + coreStart, + pluginStart, + }); + try { + embeddable.addNewPanel({ + panelType: SYNTHETICS_MONITORS_EMBEDDABLE, + initialState, + }); + } catch (e) { + return Promise.reject(); + } + }, + getDisplayName: () => + i18n.translate('xpack.synthetics.syntheticsEmbeddable.monitors.ariaLabel', { + defaultMessage: 'Monitors overview', + }), + }; +} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_overview_panel_action.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_stats_overview_panel_action.tsx similarity index 57% rename from x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_overview_panel_action.tsx rename to x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_stats_overview_panel_action.tsx index 79c6a6c1195a90..a3b2c67be88fee 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_overview_panel_action.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/create_stats_overview_panel_action.tsx @@ -10,23 +10,15 @@ import { type UiActionsActionDefinition, } from '@kbn/ui-actions-plugin/public'; import { EmbeddableApiContext } from '@kbn/presentation-publishing'; -import { SYNTHETICS_OVERVIEW_EMBEDDABLE } from '../constants'; +import type { StartServicesAccessor } from '@kbn/core-lifecycle-browser'; +import { ClientPluginsStart } from '../../../plugin'; +import { COMMON_SYNTHETICS_GROUPING, SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE } from '../constants'; -export const COMMON_SYNTHETICS_GROUPING = [ - { - id: 'synthetics', - getDisplayName: () => - i18n.translate('xpack.synthetics.common.constants.grouping.legacy', { - defaultMessage: 'Synthetics', - }), - getIconType: () => { - return 'online'; - }, - }, -]; -export const ADD_SYNTHETICS_OVERVIEW_ACTION_ID = 'CREATE_SYNTHETICS_OVERVIEW_EMBEDDABLE'; +export const ADD_SYNTHETICS_OVERVIEW_ACTION_ID = 'CREATE_SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE'; -export function createStatusOverviewPanelAction(): UiActionsActionDefinition { +export function createStatusOverviewPanelAction( + getStartServices: StartServicesAccessor +): UiActionsActionDefinition { return { id: ADD_SYNTHETICS_OVERVIEW_ACTION_ID, grouping: COMMON_SYNTHETICS_GROUPING, @@ -40,16 +32,24 @@ export function createStatusOverviewPanelAction(): UiActionsActionDefinition - i18n.translate('xpack.synthetics.syntheticsEmbeddable.ariaLabel', { - defaultMessage: 'Synthetics Overview', + i18n.translate('xpack.synthetics.syntheticsEmbeddable.stats.ariaLabel', { + defaultMessage: 'Monitors stats', }), }; } diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.ts new file mode 100644 index 00000000000000..6edc4bb40a028a --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/embeddables/ui_actions/register_ui_actions.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 { ADD_PANEL_TRIGGER } from '@kbn/ui-actions-browser/src'; +import { CoreSetup } from '@kbn/core-lifecycle-browser'; +import { createStatusOverviewPanelAction } from './create_stats_overview_panel_action'; +import { createMonitorsOverviewPanelAction } from './create_monitors_overview_panel_action'; +import { ClientPluginsSetup, ClientPluginsStart } from '../../../plugin'; + +export const registerSyntheticsUiActions = async ( + core: CoreSetup, + pluginsSetup: ClientPluginsSetup +) => { + const { uiActions, cloud, serverless } = pluginsSetup; + + // Initialize actions + const addStatsOverviewPanelAction = createStatusOverviewPanelAction(core.getStartServices); + const addMonitorsOverviewPanelAction = createMonitorsOverviewPanelAction(core.getStartServices); + + // Assign triggers + // Only register these actions in stateful kibana, and the serverless observability project + if (Boolean((serverless && cloud?.serverless.projectType === 'observability') || !serverless)) { + uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addStatsOverviewPanelAction); + uiActions.addTriggerAction(ADD_PANEL_TRIGGER, addMonitorsOverviewPanelAction); + } +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/add_to_dashboard.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/add_to_dashboard.tsx new file mode 100644 index 00000000000000..2a910855aa2451 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/add_to_dashboard.tsx @@ -0,0 +1,142 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButtonEmpty, + EuiButtonIcon, + EuiContextMenuItem, + EuiContextMenuPanel, + EuiPopover, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import React, { useCallback } from 'react'; +import { + LazySavedObjectSaveModalDashboard, + SaveModalDashboardProps, + withSuspense, +} from '@kbn/presentation-util-plugin/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { ClientPluginsStart } from '../../../../../plugin'; +import { + SYNTHETICS_MONITORS_EMBEDDABLE, + SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE, +} from '../../../../embeddables/constants'; + +const SavedObjectSaveModalDashboard = withSuspense(LazySavedObjectSaveModalDashboard); + +export const AddToDashboard = ({ + type, + asButton = false, +}: { + type: typeof SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE | typeof SYNTHETICS_MONITORS_EMBEDDABLE; + asButton?: boolean; +}) => { + const [isPopoverOpen, setIsPopoverOpen] = React.useState(false); + const [isDashboardAttachmentReady, setDashboardAttachmentReady] = React.useState(false); + const closePopover = () => { + setIsPopoverOpen(false); + }; + + const { embeddable } = useKibana().services; + + const handleAttachToDashboardSave: SaveModalDashboardProps['onSave'] = useCallback( + ({ dashboardId, newTitle, newDescription }) => { + const stateTransfer = embeddable.getStateTransfer(); + const embeddableInput = {}; + + const state = { + input: embeddableInput, + type, + }; + + const path = dashboardId === 'new' ? '#/create' : `#/view/${dashboardId}`; + + stateTransfer.navigateToWithEmbeddablePackage('dashboards', { + state, + path, + }); + }, + [embeddable, type] + ); + const isSyntheticsApp = window.location.pathname.includes('/app/synthetics'); + + if (!isSyntheticsApp) { + return null; + } + + return ( + <> + {asButton ? ( + setDashboardAttachmentReady(true)} + > + {i18n.translate('xpack.synthetics.embeddablePanelWrapper.shareButtonLabel', { + defaultMessage: 'Add to dashboard', + })} + + ) : ( + setIsPopoverOpen(!isPopoverOpen)} + /> + } + isOpen={isPopoverOpen} + closePopover={closePopover} + > + { + setDashboardAttachmentReady(true); + closePopover(); + }} + > + {i18n.translate( + 'xpack.synthetics.embeddablePanelWrapper.shareContextMenuItemLabel', + { + defaultMessage: 'Add to dashboard', + } + )} + , + ]} + /> + + )} + {isDashboardAttachmentReady ? ( + { + setDashboardAttachmentReady(false); + }} + onSave={handleAttachToDashboardSave} + /> + ) : null} + + ); +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/embeddable_panel_wrapper.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/embeddable_panel_wrapper.tsx index cd73097c956a61..bb8ec04105167a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/embeddable_panel_wrapper.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/embeddable_panel_wrapper.tsx @@ -5,66 +5,18 @@ * 2.0. */ -import React, { FC, useCallback } from 'react'; -import { i18n } from '@kbn/i18n'; -import { - EuiButtonIcon, - EuiContextMenuItem, - EuiContextMenuPanel, - EuiFlexGroup, - EuiFlexItem, - EuiPanel, - EuiPopover, - EuiProgress, - EuiTitle, -} from '@elastic/eui'; -import { - LazySavedObjectSaveModalDashboard, - SaveModalDashboardProps, - withSuspense, -} from '@kbn/presentation-util-plugin/public'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { SYNTHETICS_OVERVIEW_EMBEDDABLE } from '../../../../embeddables/constants'; -import { ClientPluginsStart } from '../../../../../plugin'; - -const SavedObjectSaveModalDashboard = withSuspense(LazySavedObjectSaveModalDashboard); +import React, { FC } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiProgress, EuiTitle } from '@elastic/eui'; +import { AddToDashboard } from './add_to_dashboard'; +import { SYNTHETICS_STATS_OVERVIEW_EMBEDDABLE } from '../../../../embeddables/constants'; export const EmbeddablePanelWrapper: FC<{ title: string; loading?: boolean; -}> = ({ children, title, loading }) => { - const [isPopoverOpen, setIsPopoverOpen] = React.useState(false); - - const [isDashboardAttachmentReady, setDashboardAttachmentReady] = React.useState(false); - - const closePopover = () => { - setIsPopoverOpen(false); - }; - - const { embeddable } = useKibana().services; - + titleAppend?: React.ReactNode; +}> = ({ children, title, loading, titleAppend }) => { const isSyntheticsApp = window.location.pathname.includes('/app/synthetics'); - const handleAttachToDashboardSave: SaveModalDashboardProps['onSave'] = useCallback( - ({ dashboardId, newTitle, newDescription }) => { - const stateTransfer = embeddable.getStateTransfer(); - const embeddableInput = {}; - - const state = { - input: embeddableInput, - type: SYNTHETICS_OVERVIEW_EMBEDDABLE, - }; - - const path = dashboardId === 'new' ? '#/create' : `#/view/${dashboardId}`; - - stateTransfer.navigateToWithEmbeddablePackage('dashboards', { - state, - path, - }); - }, - [embeddable] - ); - return ( <> @@ -77,63 +29,14 @@ export const EmbeddablePanelWrapper: FC<{
{isSyntheticsApp && ( - setIsPopoverOpen(!isPopoverOpen)} - /> - } - isOpen={isPopoverOpen} - closePopover={closePopover} - > - { - setDashboardAttachmentReady(true); - closePopover(); - }} - > - {i18n.translate( - 'xpack.synthetics.embeddablePanelWrapper.shareContextMenuItemLabel', - { defaultMessage: 'Add to dashboard' } - )} - , - ]} - /> - + )} + {titleAppend && {titleAppend}}
{children} - {isDashboardAttachmentReady ? ( - { - setDashboardAttachmentReady(false); - }} - onSave={handleAttachToDashboardSave} - /> - ) : null} ); }; 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 7e24a0726a8296..a55a93853344bf 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 @@ -30,6 +30,7 @@ import { EuiBadge, EuiToolTip, } from '@elastic/eui'; +import { kibanaService } from '../../../../../utils/kibana_service'; import { PROFILE_OPTIONS, ThrottlingConfigFieldProps, @@ -60,7 +61,6 @@ import { TextArea, ThrottlingWrapper, } from './field_wrappers'; -import { getDocLinks } from '../../../../../kibana_services'; import { useMonitorName } from '../../../hooks/use_monitor_name'; import { ConfigKey, @@ -1332,7 +1332,7 @@ export const FIELD = (readOnly?: boolean): FieldMap => ({ })} {i18n.translate('xpack.synthetics.monitorConfig.playwrightOptions.learnMore', { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/grid_by_group/grid_group_item.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/grid_by_group/grid_group_item.tsx index 8f92887da6ba85..7fea62b348edd2 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/grid_by_group/grid_group_item.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/grid_by_group/grid_group_item.tsx @@ -17,6 +17,7 @@ import { EuiTablePagination, } from '@elastic/eui'; import React, { useState } from 'react'; +import { i18n } from '@kbn/i18n'; import { useSelector } from 'react-redux'; import { useKey } from 'react-use'; import { OverviewLoader } from '../overview_loader'; @@ -49,7 +50,7 @@ export const GroupGridItem = ({ const downMonitors = groupMonitors.filter((monitor) => { const downConfigs = overviewStatus?.downConfigs; if (downConfigs) { - return downConfigs[`${monitor.configId}-${monitor.location?.label}`]?.status === 'down'; + return downConfigs[`${monitor.configId}-${monitor.location?.id}`]?.status === 'down'; } }); @@ -96,14 +97,17 @@ export const GroupGridItem = ({
} extraAction={ - + { if (fullScreenGroup) { setFullScreenGroup(''); @@ -117,7 +121,30 @@ export const GroupGridItem = ({ - {groupMonitors.length} Monitors + + {i18n.translate('xpack.synthetics.groupGridItem.monitorsBadgeLabel.downCount', { + defaultMessage: '{downCount} Down', + values: { downCount: downMonitorsCount }, + })} + + + + + + {i18n.translate('xpack.synthetics.groupGridItem.monitorsBadgeLabel.upCount', { + defaultMessage: '{upCount} Up', + values: { upCount: groupMonitors.length - downMonitorsCount }, + })} + + + + + + {i18n.translate('xpack.synthetics.groupGridItem.monitorsBadgeLabel.count', { + defaultMessage: '{count, number} {count, plural, one {monitor} other {monitors}}', + values: { count: groupMonitors.length }, + })} + } @@ -145,7 +172,10 @@ export const GroupGridItem = ({ )} { if (!urlGroupField && groupField !== 'none' && !isUrlHydratedFromRedux.current) { // Hydrate url only during initialization updateUrlParams({ groupBy: groupField, groupOrderBy: groupOrder }); - } else { - dispatch( - setOverviewGroupByAction({ - field: urlGroupField ?? 'none', - order: urlGroupOrderBy ?? 'asc', - }) - ); } } isUrlHydratedFromRedux.current = true; @@ -48,6 +41,21 @@ export const GroupFields = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [dispatch, groupField, groupOrder, urlGroupField, urlGroupOrderBy]); + const isUReduxHydratedFromUrl = useRef(false); + + useEffect(() => { + if (urlGroupField && urlGroupField !== groupField && !isUReduxHydratedFromUrl.current) { + dispatch( + setOverviewGroupByAction({ + field: urlGroupField ?? 'none', + order: urlGroupOrderBy ?? 'asc', + }) + ); + } + isUReduxHydratedFromUrl.current = true; + // Only depend on the serialized snapshot + }, [dispatch, groupField, groupOrder, urlGroupField, urlGroupOrderBy]); + const handleChange = (groupByState: GroupByState) => { dispatch(setOverviewGroupByAction(groupByState)); updateUrlParams({ groupBy: groupByState.field, groupOrderBy: groupByState.order }); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item_icon.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item_icon.tsx index 7dacc511c2e704..8945726bc443b0 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item_icon.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/metric_item_icon.tsx @@ -18,6 +18,8 @@ import { EuiCallOut, EuiFlexGroup, EuiFlexItem, + EuiLink, + EuiSpacer, } from '@elastic/eui'; import { useDispatch, useSelector } from 'react-redux'; import styled from 'styled-components'; @@ -148,6 +150,21 @@ export const MetricItemIcon = ({
+ {ping?.url?.full && ( + <> + {i18n.translate('xpack.synthetics.metricItemIcon.div.urlLabel', { + defaultMessage: 'URL: ', + })} + + {ping.url.full} + + + + )}
@@ -164,6 +181,23 @@ export const MetricItemIcon = ({ ); } else { + if (ping?.url) { + return ( + + + + ); + } return null; } }; @@ -184,8 +218,10 @@ const StyledIcon = euiStyled.div<{ boxShadow: string }>` gap: 10px; width: 32px; height: 32px; - background: #ffffff; - border: 1px solid #d3dae6; + background: ${({ theme }) => + theme.darkMode ? theme.eui.euiColorDarkestShade : theme.eui.euiColorLightestShade}; + border: 1px solid ${({ theme }) => + theme.darkMode ? theme.eui.euiColorDarkShade : theme.eui.euiColorLightShade}; ${({ boxShadow }) => boxShadow} border-radius: 16px; flex: none; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx index 49f21acc20f104..3da7b03f3ad9e2 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_grid.tsx @@ -14,7 +14,10 @@ import { EuiSpacer, EuiButtonEmpty, EuiText, + EuiProgress, } from '@elastic/eui'; +import { SYNTHETICS_MONITORS_EMBEDDABLE } from '../../../../../embeddables/constants'; +import { AddToDashboard } from '../../../common/components/add_to_dashboard'; import { useOverviewStatus } from '../../hooks/use_overview_status'; import { useInfiniteScroll } from './use_infinite_scroll'; import { GridItemsByGroup } from './grid_by_group/grid_items_by_group'; @@ -40,6 +43,7 @@ export const OverviewGrid = memo(() => { data: { monitors }, flyoutConfig, loaded, + loading, pageState, groupBy: { field: groupField }, } = useSelector(selectOverviewState); @@ -76,7 +80,7 @@ export const OverviewGrid = memo(() => { <> @@ -87,6 +91,10 @@ export const OverviewGrid = memo(() => { total={status ? monitorsSortedByStatus.length : undefined} />
+ + + + setPage(1)} /> @@ -94,7 +102,9 @@ export const OverviewGrid = memo(() => {
- + + {loading && } + <> {groupField === 'none' ? ( loaded && currentMonitors.length ? ( diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_status.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_status.tsx index 28eaf97a37c5ff..4f089b2464ed92 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_status.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/overview_status.tsx @@ -9,8 +9,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiStat } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import { useDispatch } from 'react-redux'; -import { Subject } from 'rxjs'; -import { useSyntheticsRefreshContext } from '../../../../contexts'; import { EmbeddablePanelWrapper } from '../../../common/components/embeddable_panel_wrapper'; import { clearOverviewStatusErrorAction } from '../../../../state/overview_status'; import { kibanaService } from '../../../../../../utils/kibana_service'; @@ -21,11 +19,9 @@ function title(t?: number) { return t ?? '-'; } -export function OverviewStatus({ reload$ }: { reload$?: Subject }) { +export function OverviewStatus({ titleAppend }: { titleAppend?: React.ReactNode }) { const { statusFilter } = useGetUrlParams(); - const { refreshApp } = useSyntheticsRefreshContext(); - const { status, error: statusError, @@ -39,14 +35,6 @@ export function OverviewStatus({ reload$ }: { reload$?: Subject }) { disabledCount: status?.disabledCount, }); - useEffect(() => { - const sub = reload$?.subscribe(() => { - refreshApp(); - }); - - return () => sub?.unsubscribe(); - }, [refreshApp, reload$]); - useEffect(() => { if (statusError) { dispatch(clearOverviewStatusErrorAction()); @@ -104,9 +92,9 @@ export function OverviewStatus({ reload$ }: { reload$?: Subject }) { }, [status, statusFilter]); return ( - + - + > = ({ children }) => { +export const SyntheticsRefreshContextProvider: FC<{ + reload$?: Subject; +}> = ({ children, reload$ }) => { const [lastRefresh, setLastRefresh] = useState(Date.now()); const refreshPaused = useSelector(selectRefreshPaused); @@ -51,6 +53,13 @@ export const SyntheticsRefreshContextProvider: FC> = } }, [refreshApp, refreshPaused]); + useEffect(() => { + const subscription = reload$?.subscribe(() => { + refreshApp(); + }); + return () => subscription?.unsubscribe(); + }, [reload$, refreshApp]); + const value = useMemo(() => { return { lastRefresh, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/contexts/synthetics_shared_context.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/contexts/synthetics_shared_context.tsx index b4a2702626285c..da35fb89dbf3bd 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/contexts/synthetics_shared_context.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/contexts/synthetics_shared_context.tsx @@ -10,18 +10,16 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; import { Provider as ReduxProvider } from 'react-redux'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; +import { Subject } from 'rxjs'; +import { Store } from 'redux'; import { SyntheticsRefreshContextProvider } from './synthetics_refresh_context'; import { SyntheticsDataViewContextProvider } from './synthetics_data_view_context'; import { SyntheticsAppProps } from './synthetics_settings_context'; import { storage, store } from '../state'; -export const SyntheticsSharedContext: React.FC = ({ - coreStart, - setupPlugins, - startPlugins, - children, - darkMode, -}) => { +export const SyntheticsSharedContext: React.FC< + SyntheticsAppProps & { reload$?: Subject; reduxStore?: Store } +> = ({ reduxStore, coreStart, setupPlugins, startPlugins, children, darkMode, reload$ }) => { return ( = ({ }} > - - + + = (dependencies: { - core: CoreStart; - plugins: ClientPluginsStart; -}) => TAlertTypeModel; +import type { AlertTypeInitializer } from './types'; export const syntheticsAlertTypeInitializers: AlertTypeInitializer[] = [ initMonitorStatusAlertType, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/monitor_status.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/monitor_status.tsx index ba864078594087..5f63d6ac298c71 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/monitor_status.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/monitor_status.tsx @@ -16,7 +16,8 @@ import { STATE_ID } from '../../../../../common/field_names'; import { SyntheticsMonitorStatusTranslations } from '../../../../../common/rules/synthetics/translations'; import type { StatusRuleParams } from '../../../../../common/rules/status_rule'; import { SYNTHETICS_ALERT_RULE_TYPES } from '../../../../../common/constants/synthetics_alerts'; -import type { AlertTypeInitializer } from '.'; +import type { AlertTypeInitializer } from './types'; + const { defaultActionMessage, defaultRecoveryMessage, description } = SyntheticsMonitorStatusTranslations; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/tls.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/tls.tsx index 15c0fa90ec605a..896a84cd1688c8 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/tls.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/tls.tsx @@ -14,12 +14,14 @@ import { TlsTranslations } from '../../../../../common/rules/synthetics/translat import { CERTIFICATES_ROUTE } from '../../../../../common/constants/ui'; import { SYNTHETICS_ALERT_RULE_TYPES } from '../../../../../common/constants/synthetics_alerts'; import type { TLSParams } from '../../../../../common/runtime_types/alerts/tls'; -import { AlertTypeInitializer } from '.'; + +import type { AlertTypeInitializer } from './types'; let validateFunc: (ruleParams: any) => ValidationResult; const { defaultActionMessage, defaultRecoveryMessage, description } = TlsTranslations; const TLSAlert = React.lazy(() => import('./lazy_wrapper/tls_alert')); + export const initTlsAlertType: AlertTypeInitializer = ({ core, plugins, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/types.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/types.ts new file mode 100644 index 00000000000000..baf1f6c75801c0 --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/lib/alert_types/types.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ObservabilityRuleTypeModel } from '@kbn/observability-plugin/public'; +import { CoreStart } from '@kbn/core-lifecycle-browser'; +import type { ClientPluginsStart } from '../../../../plugin'; + +export type AlertTypeInitializer = (dependencies: { + core: CoreStart; + plugins: ClientPluginsStart; +}) => TAlertTypeModel; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/api.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/api.ts index 7244efc4dc6550..cc496074332b0c 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/api.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/api.ts @@ -36,6 +36,7 @@ export function toStatusOverviewQueryArgs( projects: pageState.projects, schedules: pageState.schedules, monitorTypes: pageState.monitorTypes, + monitorQueryIds: pageState.monitorQueryIds, searchFields: [], }; } diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/index.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/index.ts index 3f8038ffc84d38..665a92aeaf7738 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/overview/index.ts @@ -11,6 +11,7 @@ import { MonitorOverviewState } from './models'; import { fetchMonitorOverviewAction, + quietFetchOverviewAction, setFlyoutConfig, setOverviewGroupByAction, setOverviewPageStateAction, @@ -44,6 +45,9 @@ export const monitorOverviewReducer = createReducer(initialState, (builder) => { state.loading = true; state.loaded = false; }) + .addCase(quietFetchOverviewAction.get, (state, action) => { + state.loading = true; + }) .addCase(fetchMonitorOverviewAction.success, (state, action) => { state.data = action.payload; state.loading = false; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/store.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/store.ts index 19320f0102a99e..c88f126edeb526 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/store.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/state/store.ts @@ -20,7 +20,6 @@ export const store = configureStore({ preloadedState: {}, enhancers: [], }); - sagaMW.run(rootEffect); export const storage = new Storage(window.localStorage); diff --git a/x-pack/plugins/observability_solution/synthetics/public/kibana_services.ts b/x-pack/plugins/observability_solution/synthetics/public/kibana_services.ts deleted file mode 100644 index 9c3f641c29a80f..00000000000000 --- a/x-pack/plugins/observability_solution/synthetics/public/kibana_services.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 { CoreStart } from '@kbn/core/public'; - -type StartServices = Pick; - -let coreStart: CoreStart; -export function setStartServices(core: CoreStart) { - coreStart = core; -} - -export const getStartServices = (): StartServices => coreStart; - -export const getDocLinks = () => coreStart?.docLinks; diff --git a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts index 4489d418830e52..15de2de6d5eee0 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/plugin.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/plugin.ts @@ -66,7 +66,6 @@ import { kibanaService } from './utils/kibana_service'; import { PLUGIN } from '../common/constants/plugin'; import { OVERVIEW_ROUTE } from '../common/constants/ui'; import { locators } from './apps/locators'; -import { setStartServices } from './kibana_services'; import { syntheticsAlertTypeInitializers } from './apps/synthetics/lib/alert_types'; export interface ClientPluginsSetup { @@ -216,9 +215,6 @@ export class SyntheticsPlugin public start(coreStart: CoreStart, pluginsStart: ClientPluginsStart): void { const { triggersActionsUi } = pluginsStart; - setStartServices(coreStart); - - setStartServices(coreStart); syntheticsAlertTypeInitializers.forEach((init) => { const { observabilityRuleTypeRegistry } = pluginsStart.observability; diff --git a/x-pack/plugins/observability_solution/synthetics/public/utils/api_service/api_service.ts b/x-pack/plugins/observability_solution/synthetics/public/utils/api_service/api_service.ts index 682b3be6a700a5..9a0b887a7d6ebe 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/utils/api_service/api_service.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/utils/api_service/api_service.ts @@ -9,8 +9,10 @@ import { isRight } from 'fp-ts/lib/Either'; import { formatErrors } from '@kbn/securitysolution-io-ts-utils'; import { HttpFetchQuery, HttpHeadersInit, HttpSetup } from '@kbn/core/public'; import { FETCH_STATUS, AddInspectorRequest } from '@kbn/observability-shared-plugin/public'; -import { InspectorRequestProps } from '@kbn/observability-shared-plugin/public/contexts/inspector/inspector_context'; +import type { InspectorRequestProps } from '@kbn/observability-shared-plugin/public/contexts/inspector/inspector_context'; + type Params = HttpFetchQuery & { version?: string }; + class ApiService { private static instance: ApiService; private _http!: HttpSetup; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/common.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/common.ts index b29e3578aba876..491b67160677ee 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/common.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/common.ts @@ -44,6 +44,7 @@ export const OverviewStatusSchema = schema.object({ monitorTypes: StringOrArraySchema, locations: StringOrArraySchema, projects: StringOrArraySchema, + monitorQueryIds: StringOrArraySchema, schedules: StringOrArraySchema, status: StringOrArraySchema, scopeStatusByLocation: schema.maybe(schema.boolean()), diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts index ae729e7361a4d5..3a9c3b064bc0f7 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/suggestions/route.ts @@ -30,6 +30,9 @@ interface AggsResponse { projectsAggs: { buckets: Buckets; }; + monitorTypeAggs: { + buckets: Buckets; + }; monitorIdsAggs: { buckets: Array<{ key: string; @@ -82,7 +85,7 @@ export const getSyntheticsSuggestionsRoute: SyntheticsRestApiRouteFactory< searchFields: SEARCH_FIELDS, }); - const { tagsAggs, locationsAggs, projectsAggs, monitorIdsAggs } = + const { monitorTypeAggs, tagsAggs, locationsAggs, projectsAggs, monitorIdsAggs } = (data?.aggregations as AggsResponse) ?? {}; const allLocationsMap = new Map(allLocations.map((obj) => [obj.id, obj.label])); @@ -110,6 +113,12 @@ export const getSyntheticsSuggestionsRoute: SyntheticsRestApiRouteFactory< value: key, count, })) ?? [], + monitorTypes: + monitorTypeAggs?.buckets?.map(({ key, doc_count: count }) => ({ + label: key, + value: key, + count, + })) ?? [], }; } catch (error) { logger.error(`Failed to fetch synthetics suggestions: ${error}`); @@ -125,6 +134,13 @@ const aggs = { exclude: [''], }, }, + monitorTypeAggs: { + terms: { + field: `${syntheticsMonitorType}.attributes.${ConfigKey.MONITOR_TYPE}.keyword`, + size: 10000, + exclude: [''], + }, + }, locationsAggs: { terms: { field: `${syntheticsMonitorType}.attributes.${ConfigKey.LOCATIONS}.id`, diff --git a/x-pack/test/api_integration/apis/synthetics/suggestions.ts b/x-pack/test/api_integration/apis/synthetics/suggestions.ts index bbdac399714de2..dab822f832c08a 100644 --- a/x-pack/test/api_integration/apis/synthetics/suggestions.ts +++ b/x-pack/test/api_integration/apis/synthetics/suggestions.ts @@ -161,6 +161,18 @@ export default function ({ getService }: FtrProviderContext) { value: project, }, ], + monitorTypes: [ + { + count: 20, + label: 'http', + value: 'http', + }, + { + count: 2, + label: 'icmp', + value: 'icmp', + }, + ], tags: expect.arrayContaining([ { count: 21, @@ -237,6 +249,18 @@ export default function ({ getService }: FtrProviderContext) { value: project, }, ], + monitorTypes: [ + // { + // count: 20, + // label: 'http', + // value: 'http', + // }, + { + count: 2, + label: 'icmp', + value: 'icmp', + }, + ], tags: expect.arrayContaining([ { count: 1, From f3dc8a6d5d822a4e1b0825032537cc8afe091fdd Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 13:40:15 -0500 Subject: [PATCH 16/92] Update actions/checkout action to v4.1.7 (main) (#190439) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://togithub.com/actions/checkout) | action | minor | `v4` -> `v4.1.7` | --- ### Release Notes
actions/checkout (actions/checkout) ### [`v4.1.7`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v417) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.6...v4.1.7) - Bump the minor-npm-dependencies group across 1 directory with 4 updates by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1739](https://togithub.com/actions/checkout/pull/1739) - Bump actions/checkout from 3 to 4 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1697](https://togithub.com/actions/checkout/pull/1697) - Check out other refs/\* by commit by [@​orhantoy](https://togithub.com/orhantoy) in [https://github.com/actions/checkout/pull/1774](https://togithub.com/actions/checkout/pull/1774) - Pin actions/checkout's own workflows to a known, good, stable version. by [@​jww3](https://togithub.com/jww3) in [https://github.com/actions/checkout/pull/1776](https://togithub.com/actions/checkout/pull/1776) ### [`v4.1.6`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v416) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.5...v4.1.6) - Check platform to set archive extension appropriately by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1732](https://togithub.com/actions/checkout/pull/1732) ### [`v4.1.5`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v415) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.4...v4.1.5) - Update NPM dependencies by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1703](https://togithub.com/actions/checkout/pull/1703) - Bump github/codeql-action from 2 to 3 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1694](https://togithub.com/actions/checkout/pull/1694) - Bump actions/setup-node from 1 to 4 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1696](https://togithub.com/actions/checkout/pull/1696) - Bump actions/upload-artifact from 2 to 4 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1695](https://togithub.com/actions/checkout/pull/1695) - README: Suggest `user.email` to be `41898282+github-actions[bot]@​users.noreply.github.com` by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1707](https://togithub.com/actions/checkout/pull/1707) ### [`v4.1.4`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v414) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.3...v4.1.4) - Disable `extensions.worktreeConfig` when disabling `sparse-checkout` by [@​jww3](https://togithub.com/jww3) in [https://github.com/actions/checkout/pull/1692](https://togithub.com/actions/checkout/pull/1692) - Add dependabot config by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1688](https://togithub.com/actions/checkout/pull/1688) - Bump the minor-actions-dependencies group with 2 updates by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1693](https://togithub.com/actions/checkout/pull/1693) - Bump word-wrap from 1.2.3 to 1.2.5 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/actions/checkout/pull/1643](https://togithub.com/actions/checkout/pull/1643) ### [`v4.1.3`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v413) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.2...v4.1.3) - Check git version before attempting to disable `sparse-checkout` by [@​jww3](https://togithub.com/jww3) in [https://github.com/actions/checkout/pull/1656](https://togithub.com/actions/checkout/pull/1656) - Add SSH user parameter by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1685](https://togithub.com/actions/checkout/pull/1685) - Update `actions/checkout` version in `update-main-version.yml` by [@​jww3](https://togithub.com/jww3) in [https://github.com/actions/checkout/pull/1650](https://togithub.com/actions/checkout/pull/1650) ### [`v4.1.2`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v412) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.1...v4.1.2) - Fix: Disable sparse checkout whenever `sparse-checkout` option is not present [@​dscho](https://togithub.com/dscho) in [https://github.com/actions/checkout/pull/1598](https://togithub.com/actions/checkout/pull/1598) ### [`v4.1.1`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v411) [Compare Source](https://togithub.com/actions/checkout/compare/v4.1.0...v4.1.1) - Correct link to GitHub Docs by [@​peterbe](https://togithub.com/peterbe) in [https://github.com/actions/checkout/pull/1511](https://togithub.com/actions/checkout/pull/1511) - Link to release page from what's new section by [@​cory-miller](https://togithub.com/cory-miller) in [https://github.com/actions/checkout/pull/1514](https://togithub.com/actions/checkout/pull/1514) ### [`v4.1.0`](https://togithub.com/actions/checkout/blob/HEAD/CHANGELOG.md#v410) [Compare Source](https://togithub.com/actions/checkout/compare/v4...v4.1.0) - [Add support for partial checkout filters](https://togithub.com/actions/checkout/pull/1396)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> --- .github/workflows/alert-failed-test.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/fix-version-gaps.yml | 2 +- .github/workflows/label-failed-test.yml | 2 +- .github/workflows/launchdarkly-code-references.yml | 2 +- .github/workflows/on-merge.yml | 2 +- .github/workflows/skip-failed-test.yml | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/alert-failed-test.yml b/.github/workflows/alert-failed-test.yml index 92916629d80f38..4d465b03dd43f1 100644 --- a/.github/workflows/alert-failed-test.yml +++ b/.github/workflows/alert-failed-test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout kibana-operations - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c4819f86fa1f92..66f99a95a3b2ce 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -22,7 +22,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: ref: ${{ matrix.branch }} diff --git a/.github/workflows/fix-version-gaps.yml b/.github/workflows/fix-version-gaps.yml index 77a56a268f20d2..1e89ec25534575 100644 --- a/.github/workflows/fix-version-gaps.yml +++ b/.github/workflows/fix-version-gaps.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Actions - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-github-actions' ref: main diff --git a/.github/workflows/label-failed-test.yml b/.github/workflows/label-failed-test.yml index ec5114803639e5..358ff08edecd16 100644 --- a/.github/workflows/label-failed-test.yml +++ b/.github/workflows/label-failed-test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout kibana-operations - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-operations' ref: main diff --git a/.github/workflows/launchdarkly-code-references.yml b/.github/workflows/launchdarkly-code-references.yml index ab888da06c97a4..3f6c4b1ead69fc 100644 --- a/.github/workflows/launchdarkly-code-references.yml +++ b/.github/workflows/launchdarkly-code-references.yml @@ -16,7 +16,7 @@ jobs: if: github.event.repository.fork == false runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: fetch-depth: 11 # This value must be set if the lookback configuration option is not disabled for find-code-references. Read more: https://github.com/launchdarkly/ld-find-code-refs#searching-for-unused-flags-extinctions - name: LaunchDarkly Code References diff --git a/.github/workflows/on-merge.yml b/.github/workflows/on-merge.yml index b02129edb6fe0a..421e4825d1a6af 100644 --- a/.github/workflows/on-merge.yml +++ b/.github/workflows/on-merge.yml @@ -24,7 +24,7 @@ jobs: ) steps: - name: Checkout Actions - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-github-actions' ref: main diff --git a/.github/workflows/skip-failed-test.yml b/.github/workflows/skip-failed-test.yml index 4c6d7c94b808d9..913ba7b9648d4a 100644 --- a/.github/workflows/skip-failed-test.yml +++ b/.github/workflows/skip-failed-test.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Actions - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-github-actions' ref: main @@ -30,7 +30,7 @@ jobs: token: ${{secrets.KIBANAMACHINE_TOKEN}} - name: Checkout kibana-operations - uses: actions/checkout@v4 + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: repository: 'elastic/kibana-operations' ref: main From 2f9dca4b023fad14106489a0751d95ce2eb4ceb7 Mon Sep 17 00:00:00 2001 From: Nick Partridge Date: Tue, 13 Aug 2024 11:54:56 -0700 Subject: [PATCH 17/92] fix: `kbn-config-schema` tests for conditional config schemas (#190259) --- .../src/create_browser_config.test.ts | 4 +- .../src/plugins_service.test.ts | 4 +- .../src/types/object_type.test.ts | 37 +- packages/kbn-config-schema/src/types/type.ts | 79 ++- .../test_suites/core_plugins/rendering.ts | 526 +++++++++--------- 5 files changed, 363 insertions(+), 287 deletions(-) diff --git a/packages/core/plugins/core-plugins-server-internal/src/create_browser_config.test.ts b/packages/core/plugins/core-plugins-server-internal/src/create_browser_config.test.ts index 11f55d1bc1edb0..41da3f1ce2cef9 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/create_browser_config.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/create_browser_config.test.ts @@ -69,7 +69,7 @@ describe('createBrowserConfig', () => { exposedConfigKeys: { exposed1: 'string', 'nested.exposed2': 'boolean', - 'nested.exposed3': 'number', + 'nested.exposed3': 'number?', // notExposed4 is not present }, }); @@ -182,7 +182,7 @@ describe('createBrowserConfig', () => { exposedConfigKeys: { exposed1: 'string', 'deeply.exposed2': 'boolean', - 'deeply.nested.exposed3': 'number', + 'deeply.nested.exposed3': 'number?', 'deeply.nested.structure.exposed4': 'string', // notExposed5, notExposed6, notExposed7, and notExposed8 are not present }, diff --git a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts index 076245a07b7581..3320fe22d7d620 100644 --- a/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts +++ b/packages/core/plugins/core-plugins-server-internal/src/plugins_service.test.ts @@ -1046,7 +1046,7 @@ describe('PluginsService', () => { const prebootUIConfig$ = preboot.uiPlugins.browserConfigs.get('plugin-with-expose-preboot')!; await expect(prebootUIConfig$.pipe(take(1)).toPromise()).resolves.toEqual({ browserConfig: { sharedProp: 'sharedProp default value plugin-with-expose-preboot' }, - exposedConfigKeys: { sharedProp: 'string' }, + exposedConfigKeys: { sharedProp: 'string?' }, }); const standardUIConfig$ = standard.uiPlugins.browserConfigs.get( @@ -1054,7 +1054,7 @@ describe('PluginsService', () => { )!; await expect(standardUIConfig$.pipe(take(1)).toPromise()).resolves.toEqual({ browserConfig: { sharedProp: 'sharedProp default value plugin-with-expose-standard' }, - exposedConfigKeys: { sharedProp: 'string' }, + exposedConfigKeys: { sharedProp: 'string?' }, }); }); diff --git a/packages/kbn-config-schema/src/types/object_type.test.ts b/packages/kbn-config-schema/src/types/object_type.test.ts index d12688fa04099f..d8828f566d0074 100644 --- a/packages/kbn-config-schema/src/types/object_type.test.ts +++ b/packages/kbn-config-schema/src/types/object_type.test.ts @@ -8,7 +8,7 @@ import { get } from 'lodash'; import { expectType } from 'tsd'; -import { schema } from '../..'; +import { offeringBasedSchema, schema } from '../..'; import { TypeOf } from './object_type'; test('returns value by default', () => { @@ -682,6 +682,10 @@ test('returns schema structure', () => { boolean: schema.boolean(), buffer: schema.buffer(), byteSize: schema.byteSize(), + svlConditional: offeringBasedSchema({ + serverless: schema.literal('serverless'), + traditional: schema.literal('stateful'), + }), conditional: schema.conditional( schema.contextRef('context_value_1'), schema.contextRef('context_value_2'), @@ -699,8 +703,9 @@ test('returns schema structure', () => { record: schema.recordOf(schema.string(), schema.string()), stream: schema.stream(), string: schema.string(), - union: schema.oneOf([schema.string()]), + union: schema.oneOf([schema.string(), schema.number(), schema.boolean()]), uri: schema.uri(), + null: schema.literal(null), }); const type = objSchema.extends({ nested: objSchema, @@ -711,39 +716,43 @@ test('returns schema structure', () => { { path: ['boolean'], type: 'boolean' }, { path: ['buffer'], type: 'binary' }, { path: ['byteSize'], type: 'bytes' }, - { path: ['conditional'], type: 'any' }, + { path: ['svlConditional'], type: 'serverless|stateful' }, + { path: ['conditional'], type: 'string' }, { path: ['duration'], type: 'duration' }, { path: ['ip'], type: 'string' }, - { path: ['literal'], type: 'any' }, + { path: ['literal'], type: 'foo' }, { path: ['map'], type: 'map' }, - { path: ['maybe'], type: 'string' }, - { path: ['never'], type: 'any' }, - { path: ['nullable'], type: 'alternatives' }, + { path: ['maybe'], type: 'string?' }, + { path: ['never'], type: 'never' }, + { path: ['nullable'], type: 'string?|null' }, { path: ['number'], type: 'number' }, { path: ['record'], type: 'record' }, { path: ['stream'], type: 'stream' }, { path: ['string'], type: 'string' }, - { path: ['union'], type: 'alternatives' }, + { path: ['union'], type: 'string|number|boolean' }, { path: ['uri'], type: 'string' }, + { path: ['null'], type: 'null' }, { path: ['nested', 'any'], type: 'any' }, { path: ['nested', 'array'], type: 'array' }, { path: ['nested', 'boolean'], type: 'boolean' }, { path: ['nested', 'buffer'], type: 'binary' }, { path: ['nested', 'byteSize'], type: 'bytes' }, - { path: ['nested', 'conditional'], type: 'any' }, + { path: ['nested', 'svlConditional'], type: 'serverless|stateful' }, + { path: ['nested', 'conditional'], type: 'string' }, { path: ['nested', 'duration'], type: 'duration' }, { path: ['nested', 'ip'], type: 'string' }, - { path: ['nested', 'literal'], type: 'any' }, + { path: ['nested', 'literal'], type: 'foo' }, { path: ['nested', 'map'], type: 'map' }, - { path: ['nested', 'maybe'], type: 'string' }, - { path: ['nested', 'never'], type: 'any' }, - { path: ['nested', 'nullable'], type: 'alternatives' }, + { path: ['nested', 'maybe'], type: 'string?' }, + { path: ['nested', 'never'], type: 'never' }, + { path: ['nested', 'nullable'], type: 'string?|null' }, { path: ['nested', 'number'], type: 'number' }, { path: ['nested', 'record'], type: 'record' }, { path: ['nested', 'stream'], type: 'stream' }, { path: ['nested', 'string'], type: 'string' }, - { path: ['nested', 'union'], type: 'alternatives' }, + { path: ['nested', 'union'], type: 'string|number|boolean' }, { path: ['nested', 'uri'], type: 'string' }, + { path: ['nested', 'null'], type: 'null' }, ]); }); diff --git a/packages/kbn-config-schema/src/types/type.ts b/packages/kbn-config-schema/src/types/type.ts index d7e02e439ae3bc..eee480723c623f 100644 --- a/packages/kbn-config-schema/src/types/type.ts +++ b/packages/kbn-config-schema/src/types/type.ts @@ -6,7 +6,15 @@ * Side Public License, v 1. */ -import type { AnySchema, CustomValidator, ErrorReport } from 'joi'; +import { + isSchema, + type CustomValidator, + type ErrorReport, + type Schema, + type SchemaLike, + type WhenOptions, + CustomHelpers, +} from 'joi'; import { META_FIELD_X_OAS_DEPRECATED } from '../oas_meta_fields'; import { SchemaTypeError, ValidationError } from '../errors'; import { Reference } from '../references'; @@ -91,9 +99,9 @@ export abstract class Type { * Internal "schema" backed by Joi. * @type {Schema} */ - protected readonly internalSchema: AnySchema; + protected readonly internalSchema: Schema; - protected constructor(schema: AnySchema, options: TypeOptions = {}) { + protected constructor(schema: Schema, options: TypeOptions = {}) { if (options.defaultValue !== undefined) { schema = schema.optional(); @@ -214,7 +222,7 @@ export abstract class Type { } } -function recursiveGetSchemaStructure(internalSchema: AnySchema, path: string[] = []) { +function recursiveGetSchemaStructure(internalSchema: Schema, path: string[] = []) { const array: SchemaStructureEntry[] = []; // Note: we are relying on Joi internals to obtain the schema structure (recursive keys). // This is not ideal, but it works for now and we only need it for some integration test assertions. @@ -222,8 +230,69 @@ function recursiveGetSchemaStructure(internalSchema: AnySchema, path: string[] = for (const [key, val] of (internalSchema as any)._ids._byKey.entries()) { array.push(...recursiveGetSchemaStructure(val.schema, [...path, key])); } + if (!array.length) { - array.push({ path, type: internalSchema.type ?? 'unknown' }); + let type: string; + try { + type = prettyPrintType(internalSchema, path); + } catch (error) { + // failed to find special type, might need to update for new joi versions or type usages + type = internalSchema.type || 'unknown'; + } + + array.push({ + path, + type, + }); } return array; } + +/** + * Returns a more accurate type from complex schema definitions. + * + * For example, conditional values resolve to type `any` when the nested value is only ever a `string`. + * + * @param internalSchema + * @param path of current schema + * @returns schema type + */ +function prettyPrintType(schema?: SchemaLike, path: string[] = []): string { + // takes array of possible values and de-dups and joins + return [...new Set([prettyPrintTypeParts(schema, false, path)].flat())].filter(Boolean).join('|'); +} + +/** + * Recursively collects all possible nested schema types. + */ +function prettyPrintTypeParts( + schema?: SchemaLike, + optional = false, + path: string[] = [] +): string | string[] { + if (!isSchema(schema)) { + if (schema === null) return 'null'; + return `${schema ?? 'unknown'}${optional ? '?' : ''}`; + } + + const isOptionalType = optional || schema._flags?.presence === 'optional'; + // For explicit custom schema.never + if (schema._flags?.presence === 'forbidden') return 'never'; + // For offeringBasedSchema, schema.when, schema.conditional + if (schema.$_terms?.whens?.length > 0) + return (schema.$_terms.whens as WhenOptions[]).flatMap((when) => + [when?.then, when?.otherwise].flatMap((s) => prettyPrintTypeParts(s, isOptionalType, path)) + ); + // schema.oneOf, schema.allOf, etc. + if (schema.$_terms?.matches?.length > 0) + return (schema.$_terms.matches as CustomHelpers[]).flatMap((s) => + prettyPrintTypeParts(s.schema, isOptionalType, path) + ); + // schema.literal + if (schema._flags?.only && (schema as any)._valids?._values?.size > 0) + return [...(schema as any)._valids._values.keys()].flatMap((v) => + prettyPrintTypeParts(v, isOptionalType, path) + ); + + return `${schema?.type || 'unknown'}${isOptionalType ? '?' : ''}`; +} diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index ba6ff390669395..a2e957f96d934a 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -100,211 +100,209 @@ export default function ({ getService }: PluginFunctionalProviderContext) { // what types of config settings can be exposed to the browser. // When plugin owners make a change that exposes additional config values, the changes will be reflected in this test assertion. // Ensure that your change does not unintentionally expose any sensitive values! - 'console.autocompleteDefinitions.endpointsAvailability (alternatives)', - 'console.dev.enableMonaco (boolean)', - 'console.ui.enabled (boolean)', - 'console.ui.embeddedEnabled (boolean)', - 'dashboard.allowByValueEmbeddables (boolean)', - 'unifiedSearch.autocomplete.querySuggestions.enabled (boolean)', - 'unifiedSearch.autocomplete.valueSuggestions.enabled (boolean)', - 'unifiedSearch.autocomplete.valueSuggestions.terminateAfter (duration)', - 'unifiedSearch.autocomplete.valueSuggestions.tiers (array)', - 'unifiedSearch.autocomplete.valueSuggestions.timeout (duration)', - 'data.search.aggs.shardDelay.enabled (boolean)', - 'data.search.asyncSearch.batchedReduceSize (number)', - 'data.search.asyncSearch.keepAlive (duration)', - 'data.search.asyncSearch.waitForCompletion (duration)', - 'data.search.asyncSearch.pollInterval (number)', - 'data.search.sessions.defaultExpiration (duration)', - 'data.search.sessions.enabled (boolean)', - 'data.search.sessions.management.expiresSoonWarning (duration)', - 'data.search.sessions.management.maxSessions (number)', - 'data.search.sessions.management.refreshInterval (duration)', - 'data.search.sessions.management.refreshTimeout (duration)', - 'data.search.sessions.maxUpdateRetries (number)', - 'data.search.sessions.notTouchedTimeout (duration)', - 'data_views.scriptedFieldsEnabled (any)', // It's a boolean (any because schema.conditional) + 'console.autocompleteDefinitions.endpointsAvailability (stack?|serverless?)', + 'console.dev.enableMonaco (boolean?)', + 'console.ui.enabled (boolean?)', + 'console.ui.embeddedEnabled (boolean?)', + 'dashboard.allowByValueEmbeddables (boolean?)', + 'unifiedSearch.autocomplete.querySuggestions.enabled (boolean?)', + 'unifiedSearch.autocomplete.valueSuggestions.enabled (boolean?)', + 'unifiedSearch.autocomplete.valueSuggestions.terminateAfter (duration?)', + 'unifiedSearch.autocomplete.valueSuggestions.tiers (array?)', + 'unifiedSearch.autocomplete.valueSuggestions.timeout (duration?)', + 'data.search.aggs.shardDelay.enabled (boolean?)', + 'data.search.asyncSearch.batchedReduceSize (number?)', + 'data.search.asyncSearch.keepAlive (duration?)', + 'data.search.asyncSearch.waitForCompletion (duration?)', + 'data.search.asyncSearch.pollInterval (number?)', + 'data.search.sessions.defaultExpiration (duration?)', + 'data.search.sessions.enabled (boolean?)', + 'data.search.sessions.management.expiresSoonWarning (duration?)', + 'data.search.sessions.management.maxSessions (number?)', + 'data.search.sessions.management.refreshInterval (duration?)', + 'data.search.sessions.management.refreshTimeout (duration?)', + 'data.search.sessions.maxUpdateRetries (number?)', + 'data.search.sessions.notTouchedTimeout (duration?)', + 'data_views.scriptedFieldsEnabled (boolean?|never)', 'data_visualizer.resultLinks.fileBeat.enabled (boolean)', - 'dev_tools.deeplinks.navLinkStatus (string)', - 'discover.experimental.enabledProfiles (array)', - 'enterpriseSearch.canDeployEntSearch (boolean)', - 'enterpriseSearch.host (string)', - 'enterpriseSearch.ui.enabled (boolean)', - 'home.disableWelcomeScreen (boolean)', - 'management.deeplinks.navLinkStatus (string)', - 'map.emsFileApiUrl (string)', - 'map.emsFontLibraryUrl (string)', - 'map.emsLandingPageUrl (string)', - 'map.emsTileApiUrl (string)', - 'map.emsTileLayerId.bright (string)', - 'map.emsTileLayerId.dark (string)', - 'map.emsTileLayerId.desaturated (string)', - 'map.emsUrl (string)', - 'map.includeElasticMapsService (boolean)', - 'map.tilemap.options.attribution (string)', - 'map.tilemap.options.bounds (array)', - 'map.tilemap.options.default (boolean)', - 'map.tilemap.options.errorTileUrl (string)', - 'map.tilemap.options.maxZoom (number)', - 'map.tilemap.options.minZoom (number)', - 'map.tilemap.options.reuseTiles (boolean)', - 'map.tilemap.options.subdomains (array)', - 'map.tilemap.options.tileSize (number)', - 'map.tilemap.options.tms (boolean)', - 'map.tilemap.url (string)', - 'monitoring.kibana.collection.enabled (boolean)', - 'monitoring.kibana.collection.interval (number)', - 'monitoring.ui.ccs.enabled (boolean)', - 'monitoring.ui.kibana.reporting.stale_status_threshold_seconds (number)', - 'monitoring.ui.container.apm.enabled (boolean)', - 'monitoring.ui.container.elasticsearch.enabled (boolean)', - 'monitoring.ui.container.logstash.enabled (boolean)', - 'monitoring.ui.enabled (boolean)', - 'monitoring.ui.min_interval_seconds (number)', - 'monitoring.ui.show_license_expiration (boolean)', - 'newsfeed.fetchInterval (duration)', - 'newsfeed.mainInterval (duration)', - 'newsfeed.service.pathTemplate (string)', - 'newsfeed.service.urlRoot (string)', - 'no_data_page.analyticsNoDataPageFlavor (any)', // It's a string (any because schema.conditional) - 'telemetry.allowChangingOptInStatus (boolean)', - 'telemetry.appendServerlessChannelsSuffix (any)', // It's a boolean (any because schema.conditional) - 'telemetry.banner (boolean)', - 'telemetry.labels.branch (string)', - 'telemetry.labels.ciBuildId (string)', - 'telemetry.labels.ciBuildJobId (string)', - 'telemetry.labels.ciBuildNumber (number)', - 'telemetry.labels.environment (string)', - 'telemetry.labels.ftrConfig (string)', - 'telemetry.labels.gitRev (string)', - 'telemetry.labels.isPr (boolean)', - 'telemetry.labels.journeyName (string)', - 'telemetry.labels.prId (number)', - 'telemetry.labels.testBuildId (string)', - 'telemetry.labels.testJobId (string)', - 'telemetry.labels.ciBuildName (string)', - 'telemetry.labels.performancePhase (string)', - 'telemetry.labels.serverless (any)', // It's the project type (string), claims any because schema.conditional. Can only be set on Serverless. - 'telemetry.hidePrivacyStatement (boolean)', - 'telemetry.optIn (boolean)', - 'telemetry.sendUsageFrom (alternatives)', - 'telemetry.sendUsageTo (any)', - 'usageCollection.uiCounters.debug (boolean)', - 'usageCollection.uiCounters.enabled (boolean)', - // readOnly is boolean flag - 'input_control_vis.readOnly (any)', - 'vis_type_gauge.readOnly (any)', - 'vis_type_heatmap.readOnly (any)', - 'vis_type_metric.readOnly (any)', - 'vis_type_pie.readOnly (any)', - 'vis_type_table.readOnly (any)', - 'vis_type_tagcloud.readOnly (any)', - 'vis_type_timelion.readOnly (any)', - 'vis_type_timeseries.readOnly (any)', - 'vis_type_vislib.readOnly (any)', - 'vis_type_xy.readOnly (any)', - 'vis_type_vega.enableExternalUrls (boolean)', + 'dev_tools.deeplinks.navLinkStatus (string?)', + 'discover.experimental.enabledProfiles (array?)', + 'enterpriseSearch.canDeployEntSearch (boolean?)', + 'enterpriseSearch.host (string?)', + 'enterpriseSearch.ui.enabled (boolean?)', + 'home.disableWelcomeScreen (boolean?)', + 'management.deeplinks.navLinkStatus (string?)', + 'map.emsFileApiUrl (string?)', + 'map.emsFontLibraryUrl (string?)', + 'map.emsLandingPageUrl (string?)', + 'map.emsTileApiUrl (string?)', + 'map.emsTileLayerId.bright (string?)', + 'map.emsTileLayerId.dark (string?)', + 'map.emsTileLayerId.desaturated (string?)', + 'map.emsUrl (string?)', + 'map.includeElasticMapsService (boolean?)', + 'map.tilemap.options.attribution (string?)', + 'map.tilemap.options.bounds (array?)', + 'map.tilemap.options.default (boolean?)', + 'map.tilemap.options.errorTileUrl (string?)', + 'map.tilemap.options.maxZoom (number?)', + 'map.tilemap.options.minZoom (number?)', + 'map.tilemap.options.reuseTiles (boolean?)', + 'map.tilemap.options.subdomains (array?)', + 'map.tilemap.options.tileSize (number?)', + 'map.tilemap.options.tms (boolean?)', + 'map.tilemap.url (string?)', + 'monitoring.kibana.collection.enabled (boolean?)', + 'monitoring.kibana.collection.interval (number?)', + 'monitoring.ui.ccs.enabled (boolean?)', + 'monitoring.ui.kibana.reporting.stale_status_threshold_seconds (number?)', + 'monitoring.ui.container.apm.enabled (boolean?)', + 'monitoring.ui.container.elasticsearch.enabled (boolean?)', + 'monitoring.ui.container.logstash.enabled (boolean?)', + 'monitoring.ui.enabled (boolean?)', + 'monitoring.ui.min_interval_seconds (number?)', + 'monitoring.ui.show_license_expiration (boolean?)', + 'newsfeed.fetchInterval (duration?)', + 'newsfeed.mainInterval (duration?)', + 'newsfeed.service.pathTemplate (string?)', + 'newsfeed.service.urlRoot (string?)', + 'no_data_page.analyticsNoDataPageFlavor (kibana?|serverless_search?|serverless_observability?|never)', + 'telemetry.allowChangingOptInStatus (boolean?)', + 'telemetry.appendServerlessChannelsSuffix (true?|false?)', + 'telemetry.banner (boolean?)', + 'telemetry.labels.branch (string?)', + 'telemetry.labels.ciBuildId (string?)', + 'telemetry.labels.ciBuildJobId (string?)', + 'telemetry.labels.ciBuildNumber (number?)', + 'telemetry.labels.environment (string?)', + 'telemetry.labels.ftrConfig (string?)', + 'telemetry.labels.gitRev (string?)', + 'telemetry.labels.isPr (boolean?)', + 'telemetry.labels.journeyName (string?)', + 'telemetry.labels.prId (number?)', + 'telemetry.labels.testBuildId (string?)', + 'telemetry.labels.testJobId (string?)', + 'telemetry.labels.ciBuildName (string?)', + 'telemetry.labels.performancePhase (string?)', + 'telemetry.labels.serverless (string?|never)', // Can only be set on Serverless. + 'telemetry.hidePrivacyStatement (boolean?)', + 'telemetry.optIn (boolean?)', + 'telemetry.sendUsageFrom (server?|browser?)', + 'telemetry.sendUsageTo (prod?|staging?)', + 'usageCollection.uiCounters.debug (boolean?)', + 'usageCollection.uiCounters.enabled (boolean?)', + 'input_control_vis.readOnly (boolean?|never)', + 'vis_type_gauge.readOnly (boolean?|never)', + 'vis_type_heatmap.readOnly (boolean?|never)', + 'vis_type_metric.readOnly (boolean?|never)', + 'vis_type_pie.readOnly (boolean?|never)', + 'vis_type_table.readOnly (boolean?|never)', + 'vis_type_tagcloud.readOnly (boolean?|never)', + 'vis_type_timelion.readOnly (boolean?|never)', + 'vis_type_timeseries.readOnly (boolean?|never)', + 'vis_type_vislib.readOnly (boolean?|never)', + 'vis_type_xy.readOnly (boolean?|never)', + 'vis_type_vega.enableExternalUrls (boolean?)', 'xpack.actions.email.domain_allowlist (array)', - 'xpack.apm.serviceMapEnabled (boolean)', - 'xpack.apm.ui.enabled (boolean)', - 'xpack.apm.ui.maxTraceItems (number)', - 'xpack.apm.managedServiceUrl (any)', - 'xpack.apm.serverlessOnboarding (any)', - 'xpack.apm.latestAgentVersionsUrl (string)', - 'xpack.apm.featureFlags.agentConfigurationAvailable (any)', - 'xpack.apm.featureFlags.configurableIndicesAvailable (any)', - 'xpack.apm.featureFlags.infrastructureTabAvailable (any)', - 'xpack.apm.featureFlags.infraUiAvailable (any)', - 'xpack.apm.featureFlags.migrationToFleetAvailable (any)', - 'xpack.apm.featureFlags.sourcemapApiAvailable (any)', - 'xpack.apm.featureFlags.storageExplorerAvailable (any)', - 'xpack.apm.featureFlags.profilingIntegrationAvailable (boolean)', - 'xpack.apm.serverless.enabled (any)', // It's a boolean (any because schema.conditional) - 'xpack.observability_onboarding.serverless.enabled (any)', // It's a boolean (any because schema.conditional) - 'xpack.cases.files.allowedMimeTypes (array)', - 'xpack.cases.files.maxSize (number)', - 'xpack.cases.markdownPlugins.lens (boolean)', - 'xpack.cases.stack.enabled (boolean)', - 'xpack.ccr.ui.enabled (boolean)', - 'xpack.cloud.base_url (string)', - 'xpack.cloud.cname (string)', - 'xpack.cloud.deployment_url (string)', - 'xpack.cloud.deployments_url (string)', - 'xpack.cloud.is_elastic_staff_owned (boolean)', - 'xpack.cloud.trial_end_date (string)', - 'xpack.cloud_integrations.chat.chatURL (string)', - 'xpack.cloud_integrations.chat.trialBuffer (number)', + 'xpack.apm.serviceMapEnabled (boolean?)', + 'xpack.apm.ui.enabled (boolean?)', + 'xpack.apm.ui.maxTraceItems (number?)', + 'xpack.apm.managedServiceUrl (string?|never)', + 'xpack.apm.serverlessOnboarding (boolean?|never)', + 'xpack.apm.latestAgentVersionsUrl (string?)', + 'xpack.apm.featureFlags.agentConfigurationAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.configurableIndicesAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.infrastructureTabAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.infraUiAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.migrationToFleetAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.sourcemapApiAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.storageExplorerAvailable (boolean?|true?)', + 'xpack.apm.featureFlags.profilingIntegrationAvailable (boolean?)', + 'xpack.apm.serverless.enabled (true?|never)', + 'xpack.observability_onboarding.serverless.enabled (true?|never)', + 'xpack.cases.files.allowedMimeTypes (array?)', + 'xpack.cases.files.maxSize (number?)', + 'xpack.cases.markdownPlugins.lens (boolean?)', + 'xpack.cases.stack.enabled (boolean?)', + 'xpack.ccr.ui.enabled (boolean?)', + 'xpack.cloud.base_url (string?)', + 'xpack.cloud.cname (string?)', + 'xpack.cloud.deployment_url (string?)', + 'xpack.cloud.deployments_url (string?)', + 'xpack.cloud.is_elastic_staff_owned (boolean?)', + 'xpack.cloud.trial_end_date (string?)', + 'xpack.cloud_integrations.chat.chatURL (string?)', + 'xpack.cloud_integrations.chat.trialBuffer (number?)', // No PII. This is an escape patch to override LaunchDarkly's flag resolution mechanism for testing or quick fix. - 'xpack.cloud_integrations.experiments.flag_overrides (record)', + 'xpack.cloud_integrations.experiments.flag_overrides (record?)', // Commented because it's inside a schema conditional, and the test is not able to resolve it. But it's shared. // Added here for documentation purposes. // 'xpack.cloud_integrations.experiments.launch_darkly.client_id (string)', // 'xpack.cloud_integrations.experiments.launch_darkly.client_log_level (string)', - 'xpack.cloud_integrations.experiments.metadata_refresh_interval (duration)', - 'xpack.cloud_integrations.full_story.org_id (any)', + 'xpack.cloud_integrations.experiments.metadata_refresh_interval (duration?)', + 'xpack.cloud_integrations.full_story.org_id (string|string?)', // No PII. Just the list of event types we want to forward to FullStory. - 'xpack.cloud_integrations.full_story.eventTypesAllowlist (array)', - 'xpack.cloud_integrations.full_story.pageVarsDebounceTime (duration)', - 'xpack.cloud.id (string)', - 'xpack.cloud.organization_id (string)', - 'xpack.cloud.organization_url (string)', - 'xpack.cloud.billing_url (string)', - 'xpack.cloud.profile_url (string)', - 'xpack.cloud.performance_url (string)', - 'xpack.cloud.users_and_roles_url (string)', - 'xpack.cloud.projects_url (any)', // It's a string (any because schema.conditional) + 'xpack.cloud_integrations.full_story.eventTypesAllowlist (array?)', + 'xpack.cloud_integrations.full_story.pageVarsDebounceTime (duration?)', + 'xpack.cloud.id (string?)', + 'xpack.cloud.organization_id (string?)', + 'xpack.cloud.organization_url (string?)', + 'xpack.cloud.billing_url (string?)', + 'xpack.cloud.profile_url (string?)', + 'xpack.cloud.performance_url (string?)', + 'xpack.cloud.users_and_roles_url (string?)', + 'xpack.cloud.projects_url (string?|never)', // can't be used to infer urls or customer id from the outside - 'xpack.cloud.serverless.project_id (string)', - 'xpack.cloud.serverless.project_name (string)', - 'xpack.cloud.serverless.project_type (string)', - 'xpack.cloud.serverless.orchestrator_target (string)', - 'xpack.cloud.onboarding.default_solution (string)', - 'xpack.discoverEnhanced.actions.exploreDataInChart.enabled (boolean)', - 'xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled (boolean)', - 'xpack.fleet.agents.enabled (boolean)', + 'xpack.cloud.serverless.project_id (string?)', + 'xpack.cloud.serverless.project_name (string?)', + 'xpack.cloud.serverless.project_type (string?)', + 'xpack.cloud.serverless.orchestrator_target (string?)', + 'xpack.cloud.onboarding.default_solution (string?)', + 'xpack.discoverEnhanced.actions.exploreDataInChart.enabled (boolean?)', + 'xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled (boolean?)', + 'xpack.fleet.agents.enabled (boolean?)', 'xpack.fleet.agentless.api.url (string)', - 'xpack.fleet.enableExperimental (array)', - 'xpack.fleet.internal.activeAgentsSoftLimit (number)', - 'xpack.fleet.internal.fleetServerStandalone (boolean)', - 'xpack.fleet.internal.onlyAllowAgentUpgradeToKnownVersions (boolean)', - 'xpack.fleet.developer.maxAgentPoliciesWithInactivityTimeout (number)', - 'xpack.global_search.search_timeout (duration)', - 'xpack.global_search_bar.input_max_limit (number)', - 'xpack.graph.canEditDrillDownUrls (boolean)', - 'xpack.graph.savePolicy (alternatives)', - 'xpack.ilm.ui.enabled (boolean)', - 'xpack.index_management.ui.enabled (boolean)', - 'xpack.infra.sources.default.fields.message (array)', - 'xpack.index_management.enableTogglingDataRetention (any)', // It's a boolean (any because schema.conditional) + 'xpack.fleet.enableExperimental (array?)', + 'xpack.fleet.internal.activeAgentsSoftLimit (number?)', + 'xpack.fleet.internal.fleetServerStandalone (boolean?)', + 'xpack.fleet.internal.onlyAllowAgentUpgradeToKnownVersions (boolean?)', + 'xpack.fleet.developer.maxAgentPoliciesWithInactivityTimeout (number?)', + 'xpack.global_search.search_timeout (duration?)', + 'xpack.global_search_bar.input_max_limit (number?)', + 'xpack.graph.canEditDrillDownUrls (boolean?)', + 'xpack.graph.savePolicy (none?|config?|configAndData?|configAndDataWithConsent?)', + 'xpack.ilm.ui.enabled (boolean?)', + 'xpack.index_management.ui.enabled (boolean?)', + 'xpack.infra.sources.default.fields.message (array?)', + 'xpack.index_management.enableTogglingDataRetention (boolean?|never)', /** * Feature flags bellow are conditional based on traditional/serverless offering - * and will all resolve to xpack.infra.featureFlags.* (boolean) */ - 'xpack.infra.featureFlags.metricsExplorerEnabled (any)', - 'xpack.infra.featureFlags.customThresholdAlertsEnabled (any)', - 'xpack.infra.featureFlags.osqueryEnabled (boolean)', - 'xpack.infra.featureFlags.inventoryThresholdAlertRuleEnabled (any)', - 'xpack.infra.featureFlags.metricThresholdAlertRuleEnabled (any)', - 'xpack.infra.featureFlags.logThresholdAlertRuleEnabled (any)', - 'xpack.infra.featureFlags.logsUIEnabled (any)', - 'xpack.infra.featureFlags.alertsAndRulesDropdownEnabled (any)', - 'xpack.infra.featureFlags.profilingEnabled (boolean)', - - 'xpack.index_management.enableIndexActions (any)', - 'xpack.index_management.enableLegacyTemplates (any)', - 'xpack.index_management.enableIndexStats (any)', - 'xpack.index_management.enableDataStreamStats (any)', - 'xpack.index_management.editableIndexSettings (any)', - 'xpack.index_management.enableMappingsSourceFieldSection (any)', - 'xpack.index_management.dev.enableSemanticText (boolean)', - 'xpack.license_management.ui.enabled (boolean)', - 'xpack.maps.preserveDrawingBuffer (boolean)', - 'xpack.maps.showMapsInspectorAdapter (boolean)', + 'xpack.infra.featureFlags.metricsExplorerEnabled (boolean?)', + 'xpack.infra.featureFlags.customThresholdAlertsEnabled (boolean?)', + 'xpack.infra.featureFlags.osqueryEnabled (boolean?)', + 'xpack.infra.featureFlags.inventoryThresholdAlertRuleEnabled (boolean?)', + 'xpack.infra.featureFlags.metricThresholdAlertRuleEnabled (boolean?)', + 'xpack.infra.featureFlags.logThresholdAlertRuleEnabled (boolean?)', + 'xpack.infra.featureFlags.logsUIEnabled (boolean?)', + 'xpack.infra.featureFlags.alertsAndRulesDropdownEnabled (boolean?)', + 'xpack.infra.featureFlags.profilingEnabled (boolean?)', + + 'xpack.index_management.enableIndexActions (boolean?|never)', + 'xpack.index_management.enableLegacyTemplates (boolean?|never)', + 'xpack.index_management.enableIndexStats (boolean?|never)', + 'xpack.index_management.enableDataStreamStats (boolean?|never)', + 'xpack.index_management.editableIndexSettings (all?|limited?|never)', + 'xpack.index_management.enableMappingsSourceFieldSection (boolean?|never)', + 'xpack.index_management.dev.enableSemanticText (boolean?)', + 'xpack.license_management.ui.enabled (boolean?)', + 'xpack.maps.preserveDrawingBuffer (boolean?)', + 'xpack.maps.showMapsInspectorAdapter (boolean?)', 'xpack.ml.ad.enabled (boolean)', 'xpack.ml.dfa.enabled (boolean)', 'xpack.ml.nlp.enabled (boolean)', - 'xpack.osquery.actionEnabled (boolean)', - 'xpack.remote_clusters.ui.enabled (boolean)', + 'xpack.osquery.actionEnabled (boolean?)', + 'xpack.remote_clusters.ui.enabled (boolean?)', /** * NOTE: The Reporting plugin is currently disabled in functional tests (see test/functional/config.base.js). * It will be re-enabled once #102552 is completed. @@ -315,54 +313,54 @@ export default function ({ getService }: PluginFunctionalProviderContext) { // 'xpack.reporting.poll.jobCompletionNotifier.intervalErrorMultiplier (number)', // 'xpack.reporting.poll.jobsRefresh.interval (number)', // 'xpack.reporting.poll.jobsRefresh.intervalErrorMultiplier (number)', - 'xpack.rollup.ui.enabled (boolean)', - 'xpack.saved_object_tagging.cache_refresh_interval (duration)', - 'xpack.search.homepage.ui.enabled (boolean)', - 'xpack.searchInferenceEndpoints.ui.enabled (boolean)', - 'xpack.searchPlayground.ui.enabled (boolean)', - 'xpack.security.loginAssistanceMessage (string)', - 'xpack.security.sameSiteCookies (alternatives)', - 'xpack.security.showInsecureClusterWarning (boolean)', - 'xpack.security.showNavLinks (boolean)', - 'xpack.security.ui (any)', - 'xpack.security.roleManagementEnabled (any)', - 'xpack.spaces.maxSpaces (number)', - 'xpack.spaces.allowFeatureVisibility (any)', - 'xpack.spaces.allowSolutionVisibility (any)', - 'xpack.securitySolution.enableExperimental (array)', - 'xpack.securitySolution.prebuiltRulesPackageVersion (string)', - 'xpack.securitySolution.offeringSettings (record)', - 'xpack.snapshot_restore.slm_ui.enabled (boolean)', - 'xpack.snapshot_restore.ui.enabled (boolean)', - 'xpack.stack_connectors.enableExperimental (array)', - 'xpack.trigger_actions_ui.enableExperimental (array)', - 'xpack.trigger_actions_ui.enableGeoTrackingThresholdAlert (boolean)', - 'xpack.timelines.enableExperimental (array)', - 'xpack.alerting.rules.run.alerts.max (number)', - 'xpack.upgrade_assistant.featureSet.migrateSystemIndices (boolean)', - 'xpack.upgrade_assistant.featureSet.mlSnapshots (boolean)', - 'xpack.upgrade_assistant.featureSet.reindexCorrectiveActions (boolean)', - 'xpack.upgrade_assistant.ui.enabled (boolean)', - 'xpack.observability.unsafe.alertDetails.metrics.enabled (boolean)', - 'xpack.observability.unsafe.alertDetails.logs.enabled (boolean)', - 'xpack.observability.unsafe.alertDetails.uptime.enabled (boolean)', - 'xpack.observability.unsafe.alertDetails.observability.enabled (boolean)', - 'xpack.observability.unsafe.thresholdRule.enabled (any)', // conditional, is actually a boolean - 'xpack.observability_onboarding.ui.enabled (boolean)', - 'xpack.observabilityLogsExplorer.navigation.showAppLink (any)', // conditional, is actually a boolean - 'share.new_version.enabled (boolean)', - 'aiAssistantManagementSelection.preferredAIAssistantType (alternatives)', + 'xpack.rollup.ui.enabled (boolean?)', + 'xpack.saved_object_tagging.cache_refresh_interval (duration?)', + 'xpack.search.homepage.ui.enabled (boolean?)', + 'xpack.searchInferenceEndpoints.ui.enabled (boolean?)', + 'xpack.searchPlayground.ui.enabled (boolean?)', + 'xpack.security.loginAssistanceMessage (string?)', + 'xpack.security.sameSiteCookies (Strict?|Lax?|None?)', + 'xpack.security.showInsecureClusterWarning (boolean?)', + 'xpack.security.showNavLinks (boolean?)', + 'xpack.security.ui (object?|never)', + 'xpack.security.roleManagementEnabled (boolean?|never)', + 'xpack.spaces.maxSpaces (number?)', + 'xpack.spaces.allowFeatureVisibility (false|boolean?)', + 'xpack.spaces.allowSolutionVisibility (false|boolean?)', + 'xpack.securitySolution.enableExperimental (array?)', + 'xpack.securitySolution.prebuiltRulesPackageVersion (string?)', + 'xpack.securitySolution.offeringSettings (record?)', + 'xpack.snapshot_restore.slm_ui.enabled (boolean?)', + 'xpack.snapshot_restore.ui.enabled (boolean?)', + 'xpack.stack_connectors.enableExperimental (array?)', + 'xpack.trigger_actions_ui.enableExperimental (array?)', + 'xpack.trigger_actions_ui.enableGeoTrackingThresholdAlert (boolean?)', + 'xpack.timelines.enableExperimental (array?)', + 'xpack.alerting.rules.run.alerts.max (number?)', + 'xpack.upgrade_assistant.featureSet.migrateSystemIndices (boolean?)', + 'xpack.upgrade_assistant.featureSet.mlSnapshots (boolean?)', + 'xpack.upgrade_assistant.featureSet.reindexCorrectiveActions (boolean?)', + 'xpack.upgrade_assistant.ui.enabled (boolean?)', + 'xpack.observability.unsafe.alertDetails.metrics.enabled (boolean?)', + 'xpack.observability.unsafe.alertDetails.logs.enabled (boolean?)', + 'xpack.observability.unsafe.alertDetails.uptime.enabled (boolean?)', + 'xpack.observability.unsafe.alertDetails.observability.enabled (boolean?)', + 'xpack.observability.unsafe.thresholdRule.enabled (boolean?)', + 'xpack.observability_onboarding.ui.enabled (boolean?)', + 'xpack.observabilityLogsExplorer.navigation.showAppLink (boolean?|never)', + 'share.new_version.enabled (boolean?)', + 'aiAssistantManagementSelection.preferredAIAssistantType (default?|never?|observability?)', /** * Rule form V2 feature flags */ - 'discover.experimental.ruleFormV2Enabled (boolean)', - 'xpack.infra.featureFlags.ruleFormV2Enabled (boolean)', - 'xpack.legacy_uptime.experimental.ruleFormV2Enabled (boolean)', + 'discover.experimental.ruleFormV2Enabled (boolean?)', + 'xpack.infra.featureFlags.ruleFormV2Enabled (boolean?)', + 'xpack.legacy_uptime.experimental.ruleFormV2Enabled (boolean?)', 'xpack.ml.experimental.ruleFormV2.enabled (boolean)', - 'xpack.transform.experimental.ruleFormV2Enabled (boolean)', - 'xpack.apm.featureFlags.ruleFormV2Enabled (boolean)', - 'xpack.observability.unsafe.ruleFormV2.enabled (boolean)', - 'xpack.slo.experimental.ruleFormV2.enabled (boolean)', + 'xpack.transform.experimental.ruleFormV2Enabled (boolean?)', + 'xpack.apm.featureFlags.ruleFormV2Enabled (boolean?)', + 'xpack.observability.unsafe.ruleFormV2.enabled (boolean?)', + 'xpack.slo.experimental.ruleFormV2.enabled (boolean?)', /**/ ]; // We don't assert that actualExposedConfigKeys and expectedExposedConfigKeys are equal, because test failure messages with large @@ -401,37 +399,37 @@ export default function ({ getService }: PluginFunctionalProviderContext) { // what types of config settings can be exposed to the browser. // When plugin owners make a change that exposes additional config values, the changes will be reflected in this test assertion. // Ensure that your change does not unintentionally expose any sensitive values! - 'xpack.security.loginAssistanceMessage (string)', - 'xpack.security.sameSiteCookies (alternatives)', - 'xpack.security.showInsecureClusterWarning (boolean)', - 'xpack.security.showNavLinks (boolean)', - 'xpack.security.ui (any)', - 'xpack.security.roleManagementEnabled (any)', - - 'telemetry.allowChangingOptInStatus (boolean)', - 'telemetry.appendServerlessChannelsSuffix (any)', // It's a boolean (any because schema.conditional) - 'telemetry.banner (boolean)', - 'telemetry.labels.branch (string)', - 'telemetry.labels.ciBuildId (string)', - 'telemetry.labels.ciBuildJobId (string)', - 'telemetry.labels.ciBuildNumber (number)', - 'telemetry.labels.environment (string)', - 'telemetry.labels.ftrConfig (string)', - 'telemetry.labels.gitRev (string)', - 'telemetry.labels.isPr (boolean)', - 'telemetry.labels.journeyName (string)', - 'telemetry.labels.prId (number)', - 'telemetry.labels.testBuildId (string)', - 'telemetry.labels.testJobId (string)', - 'telemetry.labels.ciBuildName (string)', - 'telemetry.labels.performancePhase (string)', - 'telemetry.labels.serverless (any)', // It's the project type (string), claims any because schema.conditional. Can only be set on Serverless. - 'telemetry.hidePrivacyStatement (boolean)', - 'telemetry.optIn (boolean)', - 'telemetry.sendUsageFrom (alternatives)', - 'telemetry.sendUsageTo (any)', - 'usageCollection.uiCounters.debug (boolean)', - 'usageCollection.uiCounters.enabled (boolean)', + 'xpack.security.loginAssistanceMessage (string?)', + 'xpack.security.sameSiteCookies (Strict?|Lax?|None?)', + 'xpack.security.showInsecureClusterWarning (boolean?)', + 'xpack.security.showNavLinks (boolean?)', + 'xpack.security.ui (object?|never)', + 'xpack.security.roleManagementEnabled (boolean?|never)', + + 'telemetry.allowChangingOptInStatus (boolean?)', + 'telemetry.appendServerlessChannelsSuffix (true?|false?)', + 'telemetry.banner (boolean?)', + 'telemetry.labels.branch (string?)', + 'telemetry.labels.ciBuildId (string?)', + 'telemetry.labels.ciBuildJobId (string?)', + 'telemetry.labels.ciBuildNumber (number?)', + 'telemetry.labels.environment (string?)', + 'telemetry.labels.ftrConfig (string?)', + 'telemetry.labels.gitRev (string?)', + 'telemetry.labels.isPr (boolean?)', + 'telemetry.labels.journeyName (string?)', + 'telemetry.labels.prId (number?)', + 'telemetry.labels.testBuildId (string?)', + 'telemetry.labels.testJobId (string?)', + 'telemetry.labels.ciBuildName (string?)', + 'telemetry.labels.performancePhase (string?)', + 'telemetry.labels.serverless (string?|never)', // Can only be set on Serverless. + 'telemetry.hidePrivacyStatement (boolean?)', + 'telemetry.optIn (boolean?)', + 'telemetry.sendUsageFrom (server?|browser?)', + 'telemetry.sendUsageTo (prod?|staging?)', + 'usageCollection.uiCounters.debug (boolean?)', + 'usageCollection.uiCounters.enabled (boolean?)', ]; // We don't assert that actualExposedConfigKeys and expectedExposedConfigKeys are equal, because test failure messages with large // arrays are hard to grok. Instead, we take the difference between the two arrays and assert them separately, that way it's From 193458417e21d07c63913c7e3b59968cb347d34b Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Tue, 13 Aug 2024 13:50:52 -0700 Subject: [PATCH 18/92] [Reporting] [API/Functional tests] Remove/Reorganize tests that trigger failure (#190099) ## Summary Functional tests and API integration tests that trigger failures are problematic. These have the potential to run in a monitored environment. Engineers that are on-call and watching for failures in HTTP responses could see these as a false positive of an actual problem. 1. Remove Reporting API integration that generally tests for error codes. These tests are suitably covered in jest integration tests. 2. Reorganize Screenshotting tests that test for error codes. WIP: find out if these can be covered in jest integration tests and if so, remove them 3. Reorganize tests of export types by creating `csv` and `screenshot` directories. This change facilitates finer-grained code ownership. --- .../{ => csv}/__snapshots__/csv_v2.snap | 0 .../{ => csv}/__snapshots__/csv_v2_esql.snap | 0 .../__snapshots__/generate_csv_discover.snap | 0 .../{ => csv}/csv_v2.ts | 2 +- .../{ => csv}/csv_v2_esql.ts | 2 +- .../{ => csv}/generate_csv_discover.ts | 2 +- .../reporting_and_security/error_codes.ts | 62 ------------------- .../reporting_and_security/index.ts | 58 ++++------------- .../{ => screenshot}/network_policy.ts | 2 +- .../{ => screenshot}/validation.ts | 42 ++++++++++++- .../{ => csv}/job_apis_csv.ts | 2 +- .../reporting_without_security/index.ts | 2 +- 12 files changed, 57 insertions(+), 117 deletions(-) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/__snapshots__/csv_v2.snap (100%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/__snapshots__/csv_v2_esql.snap (100%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/__snapshots__/generate_csv_discover.snap (100%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/csv_v2.ts (99%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/csv_v2_esql.ts (99%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => csv}/generate_csv_discover.ts (99%) delete mode 100644 x-pack/test/reporting_api_integration/reporting_and_security/error_codes.ts rename x-pack/test/reporting_api_integration/reporting_and_security/{ => screenshot}/network_policy.ts (96%) rename x-pack/test/reporting_api_integration/reporting_and_security/{ => screenshot}/validation.ts (65%) rename x-pack/test/reporting_api_integration/reporting_without_security/{ => csv}/job_apis_csv.ts (99%) diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/csv_v2.snap b/x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/csv_v2.snap similarity index 100% rename from x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/csv_v2.snap rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/csv_v2.snap diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/csv_v2_esql.snap b/x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/csv_v2_esql.snap similarity index 100% rename from x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/csv_v2_esql.snap rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/csv_v2_esql.snap diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/generate_csv_discover.snap b/x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/generate_csv_discover.snap similarity index 100% rename from x-pack/test/reporting_api_integration/reporting_and_security/__snapshots__/generate_csv_discover.snap rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/__snapshots__/generate_csv_discover.snap diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/csv_v2.ts b/x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2.ts similarity index 99% rename from x-pack/test/reporting_api_integration/reporting_and_security/csv_v2.ts rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2.ts index 5b70c5db2fd8ae..78403308dea913 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/csv_v2.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2.ts @@ -12,7 +12,7 @@ import { DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; import type { JobParamsCsvFromSavedObject } from '@kbn/reporting-export-types-csv-common'; import type { ReportApiJSON } from '@kbn/reporting-common/types'; import rison from '@kbn/rison'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; const LOGSTASH_DATA_ARCHIVE = 'test/functional/fixtures/es_archiver/logstash_functional'; const LOGSTASH_SAVED_OBJECTS = 'x-pack/test/functional/fixtures/kbn_archiver/reporting/logs'; diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/csv_v2_esql.ts b/x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2_esql.ts similarity index 99% rename from x-pack/test/reporting_api_integration/reporting_and_security/csv_v2_esql.ts rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2_esql.ts index 09a1da86b72d61..0489bef7991006 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/csv_v2_esql.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/csv/csv_v2_esql.ts @@ -12,7 +12,7 @@ import { DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; import type { JobParamsCsvFromSavedObject } from '@kbn/reporting-export-types-csv-common'; import type { ReportApiJSON } from '@kbn/reporting-common/types'; import rison from '@kbn/rison'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; // eslint-disable-next-line import/no-default-export export default ({ getService }: FtrProviderContext) => { diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/generate_csv_discover.ts b/x-pack/test/reporting_api_integration/reporting_and_security/csv/generate_csv_discover.ts similarity index 99% rename from x-pack/test/reporting_api_integration/reporting_and_security/generate_csv_discover.ts rename to x-pack/test/reporting_api_integration/reporting_and_security/csv/generate_csv_discover.ts index 8846ff15055ca0..c48dcb97b37bf1 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/generate_csv_discover.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/csv/generate_csv_discover.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import type { SortDirection } from '@kbn/data-plugin/common'; import type { JobParamsCSV } from '@kbn/reporting-export-types-csv-common'; import type { Filter } from '@kbn/es-query'; -import type { FtrProviderContext } from '../ftr_provider_context'; +import type { FtrProviderContext } from '../../ftr_provider_context'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/error_codes.ts b/x-pack/test/reporting_api_integration/reporting_and_security/error_codes.ts deleted file mode 100644 index 67fe67481232f6..00000000000000 --- a/x-pack/test/reporting_api_integration/reporting_and_security/error_codes.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import expect from '@kbn/expect'; -import { INTERNAL_ROUTES } from '@kbn/reporting-common'; -import { ReportApiJSON } from '@kbn/reporting-common/types'; -import { FtrProviderContext } from '../ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default function ({ getService }: FtrProviderContext) { - const reportingAPI = getService('reportingAPI'); - const esArchiver = getService('esArchiver'); - const supertest = getService('supertestWithoutAuth'); - - describe('Reporting error codes', () => { - it('places error_code in report output', async () => { - await reportingAPI.initEcommerce(); - - const { body: reportApiJson, status } = await reportingAPI.generateCsv({ - title: 'CSV Report', - browserTimezone: 'UTC', - objectType: 'search', - version: '7.15.0', - searchSource: null, // Invalid searchSource that should cause job to throw at execute phase... - } as any); - expect(status).to.be(200); - - const { job: report, path: downloadPath } = reportApiJson as { - job: ReportApiJSON; - path: string; - }; - - // wait for the the pending job to complete - await reportingAPI.waitForJobToFinish(downloadPath, true); - - expect(await reportingAPI.getJobErrorCode(report.id)).to.be('unknown_error'); - - await reportingAPI.teardownEcommerce(); - await reportingAPI.deleteAllReports(); - }); - - it('adds warning text with cause of failure in report output', async () => { - await reportingAPI.createDataAnalystRole(); - await reportingAPI.createDataAnalyst(); - await esArchiver.load('x-pack/test/functional/es_archives/reporting/archived_reports'); - - const jobInfo = await supertest - .get(INTERNAL_ROUTES.JOBS.INFO_PREFIX + '/kraz4j94154g0763b583rc37') - .auth('test_user', 'changeme'); - - expect(jobInfo.body.output.warnings).to.eql([ - 'Error: Max attempts reached (1). Queue timeout reached.', - ]); - - await esArchiver.unload('x-pack/test/functional/es_archives/reporting/archived_reports'); - }); - }); -} diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/index.ts b/x-pack/test/reporting_api_integration/reporting_and_security/index.ts index 14c33bced76015..8bd69780b44b72 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/index.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/index.ts @@ -20,54 +20,18 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { }); loadTestFile(require.resolve('./bwc_existing_indexes')); - loadTestFile(require.resolve('./security_roles_privileges')); - loadTestFile(require.resolve('./generate_csv_discover')); loadTestFile(require.resolve('./datastream')); - loadTestFile(require.resolve('./csv_v2')); - loadTestFile(require.resolve('./csv_v2_esql')); - loadTestFile(require.resolve('./network_policy')); - loadTestFile(require.resolve('./spaces')); loadTestFile(require.resolve('./ilm_migration_apis')); - loadTestFile(require.resolve('./error_codes')); - loadTestFile(require.resolve('./validation')); - }); -} + loadTestFile(require.resolve('./security_roles_privileges')); + loadTestFile(require.resolve('./spaces')); -export const createPdfV2Params = (testWidth: number | string, layoutId = 'preserve_layout') => - `(browserTimezone:UTC,layout:` + - `(dimensions:(height:1492,width:${testWidth}),id:${layoutId}),` + - `locatorParams:\u0021((id:DASHBOARD_APP_LOCATOR,params:` + - `(dashboardId:\'6c263e00-1c6d-11ea-a100-8589bb9d7c6b\',` + - `preserveSavedFilters:\u0021t,` + - `timeRange:(from:\'2019-03-23T03:06:17.785Z\',to:\'2019-10-04T02:33:16.708Z\'),` + - `useHash:\u0021f,` + - `viewMode:view),` + - `version:\'8.2.0\')),` + - `objectType:dashboard,` + - `title:\'Ecom Dashboard\',` + - `version:\'8.2.0\')`; + // CSV-specific + loadTestFile(require.resolve('./csv/csv_v2')); + loadTestFile(require.resolve('./csv/csv_v2_esql')); + loadTestFile(require.resolve('./csv/generate_csv_discover')); -export const createPngV2Params = (testWidth: number | string) => - `(browserTimezone:UTC,layout:` + - `(dimensions:(height:648,width:${testWidth}),id:preserve_layout),` + - `locatorParams:(id:VISUALIZE_APP_LOCATOR,params:` + - `(filters:\u0021(),` + - `indexPattern:\'5193f870-d861-11e9-a311-0fa548c5f953\',` + - `linked:\u0021t,` + - `query:(language:kuery,query:\'\'),` + - `savedSearchId:\'6091ead0-1c6d-11ea-a100-8589bb9d7c6b\',` + - `timeRange:(from:\'2019-03-23T03:06:17.785Z\',to:\'2019-10-04T02:33:16.708Z\'),` + - `uiState:(),` + - `vis:(aggs:\u0021((enabled:\u0021t,id:\'1\',params:(emptyAsNull:\u0021f),schema:metric,type:count),` + - `(enabled:\u0021t,` + - `id:\'2\',` + - `params:(field:customer_first_name.keyword,missingBucket:\u0021f,missingBucketLabel:Missing,order:desc,orderBy:\'1\',otherBucket:\u0021f,otherBucketLabel:Other,size:10),` + - `schema:segment,type:terms)),` + - `params:(maxFontSize:72,minFontSize:18,orientation:single,palette:(name:kibana_palette,type:palette),scale:linear,showLabel:\u0021t),` + - `title:\'Tag Cloud of Names\',` + - `type:tagcloud),` + - `visId:\'1bba55f0-507e-11eb-9c0d-97106882b997\'),` + - `version:\'8.2.0\'),` + - `objectType:visualization,` + - `title:\'Tag Cloud of Names\',` + - `version:\'8.2.0\')`; + // Screenshot-specific + loadTestFile(require.resolve('./screenshot/network_policy')); + loadTestFile(require.resolve('./screenshot/validation')); + }); +} diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/network_policy.ts b/x-pack/test/reporting_api_integration/reporting_and_security/screenshot/network_policy.ts similarity index 96% rename from x-pack/test/reporting_api_integration/reporting_and_security/network_policy.ts rename to x-pack/test/reporting_api_integration/reporting_and_security/screenshot/network_policy.ts index 40ee0986df9e53..5b82e1e2fcb4c3 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/network_policy.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/screenshot/network_policy.ts @@ -6,7 +6,7 @@ */ import expect from '@kbn/expect'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { diff --git a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts b/x-pack/test/reporting_api_integration/reporting_and_security/screenshot/validation.ts similarity index 65% rename from x-pack/test/reporting_api_integration/reporting_and_security/validation.ts rename to x-pack/test/reporting_api_integration/reporting_and_security/screenshot/validation.ts index f4e26c9b77a89b..e5181c1c167763 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security/validation.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security/screenshot/validation.ts @@ -7,8 +7,46 @@ import expect from '@kbn/expect'; import supertest from 'supertest'; -import { createPdfV2Params, createPngV2Params } from '.'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +const createPdfV2Params = (testWidth: number | string, layoutId = 'preserve_layout') => + `(browserTimezone:UTC,layout:` + + `(dimensions:(height:1492,width:${testWidth}),id:${layoutId}),` + + `locatorParams:\u0021((id:DASHBOARD_APP_LOCATOR,params:` + + `(dashboardId:\'6c263e00-1c6d-11ea-a100-8589bb9d7c6b\',` + + `preserveSavedFilters:\u0021t,` + + `timeRange:(from:\'2019-03-23T03:06:17.785Z\',to:\'2019-10-04T02:33:16.708Z\'),` + + `useHash:\u0021f,` + + `viewMode:view),` + + `version:\'8.2.0\')),` + + `objectType:dashboard,` + + `title:\'Ecom Dashboard\',` + + `version:\'8.2.0\')`; + +const createPngV2Params = (testWidth: number | string) => + `(browserTimezone:UTC,layout:` + + `(dimensions:(height:648,width:${testWidth}),id:preserve_layout),` + + `locatorParams:(id:VISUALIZE_APP_LOCATOR,params:` + + `(filters:\u0021(),` + + `indexPattern:\'5193f870-d861-11e9-a311-0fa548c5f953\',` + + `linked:\u0021t,` + + `query:(language:kuery,query:\'\'),` + + `savedSearchId:\'6091ead0-1c6d-11ea-a100-8589bb9d7c6b\',` + + `timeRange:(from:\'2019-03-23T03:06:17.785Z\',to:\'2019-10-04T02:33:16.708Z\'),` + + `uiState:(),` + + `vis:(aggs:\u0021((enabled:\u0021t,id:\'1\',params:(emptyAsNull:\u0021f),schema:metric,type:count),` + + `(enabled:\u0021t,` + + `id:\'2\',` + + `params:(field:customer_first_name.keyword,missingBucket:\u0021f,missingBucketLabel:Missing,order:desc,orderBy:\'1\',otherBucket:\u0021f,otherBucketLabel:Other,size:10),` + + `schema:segment,type:terms)),` + + `params:(maxFontSize:72,minFontSize:18,orientation:single,palette:(name:kibana_palette,type:palette),scale:linear,showLabel:\u0021t),` + + `title:\'Tag Cloud of Names\',` + + `type:tagcloud),` + + `visId:\'1bba55f0-507e-11eb-9c0d-97106882b997\'),` + + `version:\'8.2.0\'),` + + `objectType:visualization,` + + `title:\'Tag Cloud of Names\',` + + `version:\'8.2.0\')`; // eslint-disable-next-line import/no-default-export export default function ({ getService }: FtrProviderContext) { diff --git a/x-pack/test/reporting_api_integration/reporting_without_security/job_apis_csv.ts b/x-pack/test/reporting_api_integration/reporting_without_security/csv/job_apis_csv.ts similarity index 99% rename from x-pack/test/reporting_api_integration/reporting_without_security/job_apis_csv.ts rename to x-pack/test/reporting_api_integration/reporting_without_security/csv/job_apis_csv.ts index 5aec831f708976..ade8efab7166c3 100644 --- a/x-pack/test/reporting_api_integration/reporting_without_security/job_apis_csv.ts +++ b/x-pack/test/reporting_api_integration/reporting_without_security/csv/job_apis_csv.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { INTERNAL_ROUTES } from '@kbn/reporting-common'; import { ReportApiJSON } from '@kbn/reporting-common/types'; import { pick } from 'lodash'; -import { FtrProviderContext } from '../ftr_provider_context'; +import { FtrProviderContext } from '../../ftr_provider_context'; const apiResponseFields = [ 'attempts', diff --git a/x-pack/test/reporting_api_integration/reporting_without_security/index.ts b/x-pack/test/reporting_api_integration/reporting_without_security/index.ts index 19f96aa5d2869f..7586e067d3e6b0 100644 --- a/x-pack/test/reporting_api_integration/reporting_without_security/index.ts +++ b/x-pack/test/reporting_api_integration/reporting_without_security/index.ts @@ -15,6 +15,6 @@ export default function ({ loadTestFile, getService }: FtrProviderContext) { await reportingAPI.logTaskManagerHealth(); }); - loadTestFile(require.resolve('./job_apis_csv')); + loadTestFile(require.resolve('./csv/job_apis_csv')); }); } From be2b853062ffdcbf9d8c6207eb070086561c8ea5 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Tue, 13 Aug 2024 16:19:59 -0500 Subject: [PATCH 19/92] [Search] update copy for try in console button, to Run in Console (#190412) ## Summary Updated the default copy for "Try in Console" to be "Run in Console" instead. ### Screenshots image ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../components/try_in_console_button.test.tsx | 12 ++++++------ .../components/try_in_console_button.tsx | 12 +++++++----- x-pack/plugins/translations/translations/fr-FR.json | 1 - x-pack/plugins/translations/translations/ja-JP.json | 1 - x-pack/plugins/translations/translations/zh-CN.json | 1 - 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/kbn-try-in-console/components/try_in_console_button.test.tsx b/packages/kbn-try-in-console/components/try_in_console_button.test.tsx index fb4cce16d61346..ffb07c46989f6e 100644 --- a/packages/kbn-try-in-console/components/try_in_console_button.test.tsx +++ b/packages/kbn-try-in-console/components/try_in_console_button.test.tsx @@ -73,7 +73,7 @@ describe('TryInConsoleButton', () => { const wrapper = render(); expect(wrapper.getByTestId('tryInConsoleButton')).toBeTruthy(); - expect(wrapper.getByRole('button')).toHaveTextContent('Try in Console'); + expect(wrapper.getByRole('button')).toHaveTextContent('Run in Console'); expect(mockLocatorUseUrl).toHaveBeenCalledWith( { loadFrom: 'data:text/plain,OIUQKgBA9A+gzgFwIYLkA', @@ -87,7 +87,7 @@ describe('TryInConsoleButton', () => { const wrapper = render(); expect(wrapper.getByTestId('tryInConsoleLink')).toBeTruthy(); - expect(wrapper.getByRole('button')).toHaveTextContent('Try in Console'); + expect(wrapper.getByRole('button')).toHaveTextContent('Run in Console'); }); it('renders null if dev tools are unavailable', async () => { const props: Partial = { @@ -153,7 +153,7 @@ describe('TryInConsoleButton', () => { const props: Partial = { request: 'GET /_stats' }; render(); - fireEvent.click(screen.getByText('Try in Console')); + fireEvent.click(screen.getByText('Run in Console')); expect(windowOpenSpy).toHaveBeenCalledTimes(1); expect(windowOpenSpy).toHaveBeenCalledWith('/app/test/dev_tools', '_blank', 'noreferrer'); @@ -161,7 +161,7 @@ describe('TryInConsoleButton', () => { it('can open in new tab without data', async () => { render(); - fireEvent.click(screen.getByText('Try in Console')); + fireEvent.click(screen.getByText('Run in Console')); expect(mockLocatorUseUrl).toHaveBeenCalledWith({}, undefined, [undefined]); expect(windowOpenSpy).toHaveBeenCalledTimes(1); @@ -175,7 +175,7 @@ describe('TryInConsoleButton', () => { /> ); - fireEvent.click(screen.getByText('Try in Console')); + fireEvent.click(screen.getByText('Run in Console')); expect(windowOpenSpy).toHaveBeenCalledTimes(0); expect(mockConsole.openEmbeddedConsole).toHaveBeenCalledTimes(1); @@ -185,7 +185,7 @@ describe('TryInConsoleButton', () => { mockConsole.isEmbeddedConsoleAvailable.mockReturnValue(false); render(); - fireEvent.click(screen.getByText('Try in Console')); + fireEvent.click(screen.getByText('Run in Console')); expect(windowOpenSpy).toHaveBeenCalledTimes(1); expect(mockConsole.openEmbeddedConsole).toHaveBeenCalledTimes(0); diff --git a/packages/kbn-try-in-console/components/try_in_console_button.tsx b/packages/kbn-try-in-console/components/try_in_console_button.tsx index 077c87ca66ed05..aae6ec338dfaa2 100644 --- a/packages/kbn-try-in-console/components/try_in_console_button.tsx +++ b/packages/kbn-try-in-console/components/try_in_console_button.tsx @@ -16,7 +16,9 @@ import type { ConsolePluginStart } from '@kbn/console-plugin/public'; import { i18n } from '@kbn/i18n'; import { compressToEncodedURIComponent } from 'lz-string'; -const TRY_IN_CONSOLE = i18n.translate('tryInConsole.button', { defaultMessage: 'Try in Console' }); +const RUN_IN_CONSOLE = i18n.translate('tryInConsole.button.text', { + defaultMessage: 'Run in Console', +}); export interface TryInConsoleButtonProps { request?: string; @@ -32,7 +34,7 @@ export const TryInConsoleButton = ({ application, consolePlugin, sharePlugin, - content = TRY_IN_CONSOLE, + content = RUN_IN_CONSOLE, showIcon = true, type = 'emptyButton', }: TryInConsoleButtonProps) => { @@ -70,11 +72,11 @@ export const TryInConsoleButton = ({ consolePlugin?.isEmbeddedConsoleAvailable?.() ) { return i18n.translate('tryInConsole.embeddedConsoleButton.ariaLabel', { - defaultMessage: 'Try in Console - opens in embedded console', + defaultMessage: 'Run in Console - opens in embedded console', }); } return i18n.translate('tryInConsole.inNewTab.button.ariaLabel', { - defaultMessage: 'Try in Console - opens in a new tab', + defaultMessage: 'Run in Console - opens in a new tab', }); }; @@ -83,7 +85,7 @@ export const TryInConsoleButton = ({ 'aria-label': getAriaLabel(), onClick, }; - const iconType = showIcon ? 'popout' : undefined; + const iconType = showIcon ? 'play' : undefined; switch (type) { case 'link': diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index bf087405664b85..75e7b26557a0c7 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -7697,7 +7697,6 @@ "timelion.vis.invalidIntervalErrorMessage": "Format d'intervalle non valide.", "timelion.vis.selectIntervalHelpText": "Choisissez une option ou créez une valeur personnalisée. Exemples : 30s, 20m, 24h, 2d, 1w, 1M", "timelion.vis.selectIntervalPlaceholder": "Choisir un intervalle", - "tryInConsole.button": "Essayer dans la console", "uiActions.actionPanel.more": "Plus", "uiActions.actionPanel.title": "Options", "uiActions.errors.incompatibleAction": "Action non compatible", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 8255c814498ba9..fa953de2475cd2 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -7691,7 +7691,6 @@ "timelion.vis.invalidIntervalErrorMessage": "無効な間隔フォーマット。", "timelion.vis.selectIntervalHelpText": "オプションを選択するかカスタム値を作成します。例:30s、20m、24h、2d、1w、1M", "timelion.vis.selectIntervalPlaceholder": "間隔を選択", - "tryInConsole.button": "コンソールで試す", "uiActions.actionPanel.more": "詳細", "uiActions.actionPanel.title": "オプション", "uiActions.errors.incompatibleAction": "操作に互換性がありません", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 10be509e503b65..3f9b62848c120c 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -7704,7 +7704,6 @@ "timelion.vis.invalidIntervalErrorMessage": "时间间隔格式无效。", "timelion.vis.selectIntervalHelpText": "选择选项或创建定制值。示例:30s、20m、24h、2d、1w、1M", "timelion.vis.selectIntervalPlaceholder": "选择时间间隔", - "tryInConsole.button": "在 Console 中试用", "uiActions.actionPanel.more": "更多", "uiActions.actionPanel.title": "选项", "uiActions.errors.incompatibleAction": "操作不兼容", From 6ee8051a07370a41727b4f0eb31cde905538c189 Mon Sep 17 00:00:00 2001 From: Bryce Buchanan <75274611+bryce-b@users.noreply.github.com> Date: Tue, 13 Aug 2024 14:44:57 -0700 Subject: [PATCH 20/92] Fixes accordion disclosure keyboard focus border (#190436) ## Summary This fixes keyboard navigation focus border around the accordion element on the Exploratory View. https://github.com/user-attachments/assets/e863f52a-9745-4f55-acc5-d2aa12464f3c ### Checklist Delete any items that are not applicable to this PR. - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../shared/exploratory_view/series_editor/series.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/series_editor/series.tsx b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/series_editor/series.tsx index 7be69c2a0969f9..08810e673a0e6a 100644 --- a/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/series_editor/series.tsx +++ b/x-pack/plugins/observability_solution/exploratory_view/public/components/shared/exploratory_view/series_editor/series.tsx @@ -63,7 +63,8 @@ export function Series({ item, isExpanded, toggleExpanded }: Props) { aria-label={ACCORDION_LABEL} onToggle={toggleExpanded} arrowDisplay={!seriesProps.series.dataType ? 'none' : undefined} - extraAction={ + buttonElement="div" + buttonContent={ From a28f2193bca2dbc00efc6e5832208f70c1bfcf15 Mon Sep 17 00:00:00 2001 From: Paulo Henrique Date: Tue, 13 Aug 2024 17:48:46 -0700 Subject: [PATCH 21/92] [Agentless API] Updating Agentless API URL and enablement flag (#190277) ## Summary It closes https://github.com/elastic/security-team/issues/10104 This PR addresses the necessary changes in Kibana to reflect the updated agentless API settings in kibana.yml settings: - **xpack.fleet.agentless.enabled: true** Changing to use `xpack.fleet.agentless.enabled` as a Feature flag for enabling agentless in ESS environments. (Serverless changes was out of scope, so it is still using `xpack.fleet.enableExperimental` for now). Also, this value will now be exposed to the client side instead of the API URL (It closes https://github.com/elastic/security-team/issues/10019). - **xpack.fleet.agentless.api.url** This setting will now include only the URL (without the basePath), so I added a `prependAgentlessApiBasePathToEndpoint` helper function to append the basePath with type support. Also this value will no longer be exposed to the client side ### Additional changes - This PR also modified the Agentless settings schema validation to be optional (so it will only validate the types), as because of the nature of how the `kibana.yml` will set the configuration as of [this](https://github.com/elastic/cloud/pull/130314) PR, it might happen that we will have partial settings, so changing the schema to optional will prevent Kibana failing from starting due to incomplete agentless settings. (It closes https://github.com/elastic/security-team/issues/10189) - Updated unit tests and FTR e2e config files to reflect the latest changes --- .../test_suites/core_plugins/rendering.ts | 2 +- x-pack/plugins/fleet/common/types/index.ts | 1 + .../package_policy_input_panel.test.tsx | 2 - .../hooks/setup_technology.test.ts | 14 +--- .../hooks/setup_technology.ts | 18 ++--- .../single_page_layout/index.test.tsx | 1 + x-pack/plugins/fleet/server/config.test.ts | 12 +++- x-pack/plugins/fleet/server/config.ts | 25 ++++--- .../routes/package_policy/handlers.test.ts | 29 ++++---- .../server/services/agent_policy.test.ts | 42 +++++++++--- .../services/agents/agentless_agent.test.ts | 3 +- .../server/services/agents/agentless_agent.ts | 3 +- .../server/services/utils/agentless.test.ts | 67 ++++++++++++++++--- .../fleet/server/services/utils/agentless.ts | 16 ++++- .../agentless/create_agent.ts | 4 +- .../config.agentless.ts | 4 +- .../test/fleet_api_integration/config.base.ts | 2 +- 17 files changed, 163 insertions(+), 82 deletions(-) diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index a2e957f96d934a..a7afb228f5c1f6 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -261,7 +261,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.discoverEnhanced.actions.exploreDataInChart.enabled (boolean?)', 'xpack.discoverEnhanced.actions.exploreDataInContextMenu.enabled (boolean?)', 'xpack.fleet.agents.enabled (boolean?)', - 'xpack.fleet.agentless.api.url (string)', + 'xpack.fleet.agentless.enabled (boolean?)', 'xpack.fleet.enableExperimental (array?)', 'xpack.fleet.internal.activeAgentsSoftLimit (number?)', 'xpack.fleet.internal.fleetServerStandalone (boolean?)', diff --git a/x-pack/plugins/fleet/common/types/index.ts b/x-pack/plugins/fleet/common/types/index.ts index d5582bc87e37ab..3338c8c86f2f2b 100644 --- a/x-pack/plugins/fleet/common/types/index.ts +++ b/x-pack/plugins/fleet/common/types/index.ts @@ -31,6 +31,7 @@ export interface FleetConfigType { }; }; agentless?: { + enabled: boolean; api: { url: string; tls: { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.test.tsx index 322bbfbaa57e2a..c889dc862bf9e4 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/components/steps/components/package_policy_input_panel.test.tsx @@ -359,7 +359,6 @@ describe('PackagePolicyInputPanel', () => { describe('When agentless is enabled', () => { beforeEach(() => { useAgentlessMock.mockReturnValue({ - agentlessAPIUrl: 'https://agentless.api.url', isAgentlessEnabled: true, isAgentlessPackagePolicy: jest.fn(), isAgentlessAgentPolicy: jest.fn(), @@ -395,7 +394,6 @@ describe('PackagePolicyInputPanel', () => { describe('When agentless not enabled', () => { beforeEach(() => { useAgentlessMock.mockReturnValue({ - agentlessAPIUrl: undefined, isAgentlessEnabled: false, isAgentlessPackagePolicy: jest.fn(), isAgentlessAgentPolicy: jest.fn(), diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts index b3fadedcc964ec..9edca8f772fbac 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts @@ -53,7 +53,6 @@ describe('useAgentless', () => { const { result } = renderHook(() => useAgentless()); expect(result.current.isAgentlessEnabled).toBeFalsy(); - expect(result.current.agentlessAPIUrl).toBeFalsy(); expect(result.current.isAgentlessCloudEnabled).toBeFalsy(); expect(result.current.isAgentlessServerlessEnabled).toBeFalsy(); }); @@ -69,8 +68,6 @@ describe('useAgentless', () => { const { result } = renderHook(() => useAgentless()); - expect(result.current.agentlessAPIUrl).toBeTruthy(); - expect(result.current.agentlessAPIUrl).toBe(agentlessAPIUrl); expect(result.current.isAgentlessEnabled).toBeFalsy(); expect(result.current.isAgentlessCloudEnabled).toBeFalsy(); expect(result.current.isAgentlessServerlessEnabled).toBeFalsy(); @@ -92,7 +89,6 @@ describe('useAgentless', () => { const { result } = renderHook(() => useAgentless()); - expect(result.current.agentlessAPIUrl).toBeTruthy(); expect(result.current.isAgentlessEnabled).toBeFalsy(); expect(result.current.isAgentlessCloudEnabled).toBeFalsy(); expect(result.current.isAgentlessServerlessEnabled).toBeFalsy(); @@ -102,16 +98,13 @@ describe('useAgentless', () => { const agentlessAPIUrl = 'https://agentless.api.url'; (useConfig as MockFn).mockReturnValue({ agentless: { + enabled: true, api: { url: agentlessAPIUrl, }, }, } as any); - mockedExperimentalFeaturesService.get.mockReturnValue({ - agentless: true, - } as any); - (useStartServices as MockFn).mockReturnValue({ cloud: { isServerlessEnabled: false, @@ -121,7 +114,6 @@ describe('useAgentless', () => { const { result } = renderHook(() => useAgentless()); - expect(result.current.agentlessAPIUrl).toBeTruthy(); expect(result.current.isAgentlessEnabled).toBeTruthy(); expect(result.current.isAgentlessCloudEnabled).toBeTruthy(); expect(result.current.isAgentlessServerlessEnabled).toBeFalsy(); @@ -149,7 +141,6 @@ describe('useAgentless', () => { const { result } = renderHook(() => useAgentless()); - expect(result.current.agentlessAPIUrl).toBeTruthy(); expect(result.current.isAgentlessEnabled).toBeTruthy(); expect(result.current.isAgentlessCloudEnabled).toBeFalsy(); expect(result.current.isAgentlessServerlessEnabled).toBeTruthy(); @@ -233,6 +224,7 @@ describe('useSetupTechnology', () => { it('should create agentless policy if agentless feature is enabled and isCloud is true and agentless.api.url', async () => { (useConfig as MockFn).mockReturnValue({ agentless: { + enabled: true, api: { url: 'https://agentless.api.url', }, @@ -271,6 +263,7 @@ describe('useSetupTechnology', () => { it('should update agentless policy name to match integration name if agentless is enabled', async () => { (useConfig as MockFn).mockReturnValue({ agentless: { + enabled: true, api: { url: 'https://agentless.api.url', }, @@ -278,7 +271,6 @@ describe('useSetupTechnology', () => { } as any); (useStartServices as MockFn).mockReturnValue({ cloud: { - // isServerlessEnabled: false, isCloudEnabled: true, }, }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts index e9c5c04892e7f5..078fb51ebf3767 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts @@ -28,13 +28,11 @@ export const useAgentless = () => { const { cloud } = useStartServices(); const isServerless = !!cloud?.isServerlessEnabled; const isCloud = !!cloud?.isCloudEnabled; - const agentlessAPIUrl = config.agentless?.api.url; - const isAgentlessEnabled = - agentlessExperimentalFeatureEnabled && (isServerless || (isCloud && !!agentlessAPIUrl)); + const isAgentlessCloudEnabled = isCloud && !!config.agentless?.enabled; + const isAgentlessServerlessEnabled = isServerless && agentlessExperimentalFeatureEnabled; - const isAgentlessCloudEnabled = isCloud && isAgentlessEnabled && !!agentlessAPIUrl; - const isAgentlessServerlessEnabled = isServerless && isAgentlessEnabled; + const isAgentlessEnabled = isAgentlessCloudEnabled || isAgentlessServerlessEnabled; const isAgentlessAgentPolicy = (agentPolicy: AgentPolicy | undefined) => { if (!agentPolicy) return false; @@ -64,7 +62,6 @@ export const useAgentless = () => { return isAgentlessEnabled && packagePolicy.policy_ids.includes(AGENTLESS_POLICY_ID); }; return { - agentlessAPIUrl, isAgentlessCloudEnabled, isAgentlessServerlessEnabled, isAgentlessEnabled, @@ -91,7 +88,6 @@ export function useSetupTechnology({ packagePolicy: NewPackagePolicy; isEditPage?: boolean; }) { - const { cloud } = useStartServices(); const { isAgentlessEnabled, isAgentlessCloudEnabled, isAgentlessServerlessEnabled } = useAgentless(); @@ -144,12 +140,10 @@ export function useSetupTechnology({ } }; - if (isAgentlessEnabled) { - if (cloud?.isServerlessEnabled) { - fetchAgentlessPolicy(); - } + if (isAgentlessServerlessEnabled) { + fetchAgentlessPolicy(); } - }, [isAgentlessEnabled, cloud]); + }, [isAgentlessServerlessEnabled]); const handleSetupTechnologyChange = useCallback( (setupTechnology: SetupTechnology) => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx index ac7d0e9db77fca..9dbdcafdc94bbf 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/index.test.tsx @@ -780,6 +780,7 @@ describe('When on the package policy create page', () => { beforeEach(async () => { (useConfig as jest.MockedFunction).mockReturnValue({ agentless: { + enabled: true, api: { url: 'http://agentless-api-url', }, diff --git a/x-pack/plugins/fleet/server/config.test.ts b/x-pack/plugins/fleet/server/config.test.ts index 86f05be014d848..e2b08f4e50cde5 100644 --- a/x-pack/plugins/fleet/server/config.test.ts +++ b/x-pack/plugins/fleet/server/config.test.ts @@ -102,12 +102,20 @@ describe('Config schema', () => { }); }).not.toThrow(); }); - it('should not allow to specify a agentless.api.url in xpack.fleet.agentless.api without the tls config ', () => { + + it('should allow to specify xpack.fleet.agentless.enabled flag ', () => { + expect(() => { + config.schema.validate({ + agentless: { enabled: true }, + }); + }).not.toThrow(); + }); + it('should allow to specify a agentless.api.url in xpack.fleet.agentless.api without the tls config ', () => { expect(() => { config.schema.validate({ agentless: { api: { url: 'https://agentless.api.url' } }, }); - }).toThrow(); + }).not.toThrow(); }); it('should allow to specify agentless.api.url and the tls config in in xpack.fleet.agentless.api', () => { diff --git a/x-pack/plugins/fleet/server/config.ts b/x-pack/plugins/fleet/server/config.ts index 5ca34d5b505b38..8ea3f204ffc8f0 100644 --- a/x-pack/plugins/fleet/server/config.ts +++ b/x-pack/plugins/fleet/server/config.ts @@ -35,9 +35,7 @@ export const config: PluginConfigDescriptor = { enabled: true, }, agentless: { - api: { - url: true, - }, + enabled: true, }, enableExperimental: true, developer: { @@ -149,14 +147,19 @@ export const config: PluginConfigDescriptor = { }), agentless: schema.maybe( schema.object({ - api: schema.object({ - url: schema.uri({ scheme: ['http', 'https'] }), - tls: schema.object({ - certificate: schema.string(), - key: schema.string(), - ca: schema.string(), - }), - }), + enabled: schema.boolean({ defaultValue: false }), + api: schema.maybe( + schema.object({ + url: schema.maybe(schema.uri({ scheme: ['http', 'https'] })), + tls: schema.maybe( + schema.object({ + certificate: schema.maybe(schema.string()), + key: schema.maybe(schema.string()), + ca: schema.maybe(schema.string()), + }) + ), + }) + ), }) ), packages: PreconfiguredPackagesSchema, diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts index 468828da32c068..9cefa2581629f0 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts @@ -373,9 +373,9 @@ describe('When calling package policy', () => { it('should rename the agentless agent policy to sync with the package policy name if agentless is enabled', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: true }, + } as any); mockAgentPolicy({ supports_agentless: true, @@ -392,11 +392,11 @@ describe('When calling package policy', () => { { force: true } ); }); - it('should not rename the agentless agent policy if agentless is not enabled', async () => { + it('should not rename the agentless agent policy if agentless is not enabled in cloud environment', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: false } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: false }, + } as any); mockAgentPolicy({ supports_agentless: true, @@ -409,9 +409,6 @@ describe('When calling package policy', () => { }); it('should not rename the agentless agent policy if cloud is not enabled', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: false } as any); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); mockAgentPolicy({ supports_agentless: true, @@ -424,9 +421,9 @@ describe('When calling package policy', () => { }); it('should not rename the agentless agent policy if the package policy name has not changed', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: true }, + } as any); mockAgentPolicy({ supports_agentless: true, @@ -440,9 +437,9 @@ describe('When calling package policy', () => { }); it('should not rename the agentless agent policy if the agent policy does not support agentless', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: true }, + } as any); mockAgentPolicy({ supports_agentless: false, diff --git a/x-pack/plugins/fleet/server/services/agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policy.test.ts index 2c2c747681887f..628be3ec2b2d57 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.test.ts @@ -348,10 +348,10 @@ describe('Agent policy', () => { }); it('should create a policy with is_managed true if agentless feature flag is set and in cloud env', async () => { - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: true }, + } as any); const soClient = getAgentPolicyCreateMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -384,12 +384,38 @@ describe('Agent policy', () => { }); it('should throw error when attempting to create policy with supports_agentless true on cloud environment that does not support the agentless feature', async () => { + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: false }, + } as any); + + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isCloudEnabled: true, isServerlessEnabled: false } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await expect( + agentPolicyService.create(soClient, esClient, { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).rejects.toThrowError( + new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless and cloud environments that support the agentless feature' + ) + ); + }); + + it('should throw error when attempting to create policy with supports_agentless true on serverless environment that does not support the agentless feature', async () => { jest .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + .mockReturnValue({ agentless: false } as any); + jest .spyOn(appContextService, 'getCloud') - .mockReturnValue({ isCloudEnabled: false, isServerlessEnabled: false } as any); + .mockReturnValue({ isCloudEnabled: false, isServerlessEnabled: true } as any); const soClient = getAgentPolicyCreateMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -1121,9 +1147,9 @@ describe('Agent policy', () => { }); it('should not throw AgentPolicyInvalidError if support_agentless is defined in stateful', async () => { - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { enabled: true }, + } as any); jest .spyOn(appContextService, 'getCloud') .mockReturnValue({ isServerlessEnabled: false, isCloudEnabled: true } as any); diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts index 376b652ecb1638..dc057fd962c9b5 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts @@ -219,8 +219,9 @@ describe('Agentless Agent service', () => { const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; jest.spyOn(appContextService, 'getConfig').mockReturnValue({ agentless: { + enabled: true, api: { - url: 'http://api.agentless.com/api/v1/ess', + url: 'http://api.agentless.com', tls: { certificate: '/path/to/cert', key: '/path/to/key', diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts index 2e97ab335a8a4d..21d3a6c8df73dc 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts @@ -22,6 +22,7 @@ import { appContextService } from '../app_context'; import { listEnrollmentApiKeys } from '../api_keys'; import { listFleetServerHosts } from '../fleet_server_host'; +import { prependAgentlessApiBasePathToEndpoint } from '../utils/agentless'; class AgentlessAgentService { public async createAgentlessAgent( @@ -69,7 +70,7 @@ class AgentlessAgentService { ); const requestConfig = { - url: `${agentlessConfig.api.url}/deployments`, + url: prependAgentlessApiBasePathToEndpoint(agentlessConfig, '/deployments'), data: { policy_id: policyId, fleet_url: fleetUrl, diff --git a/x-pack/plugins/fleet/server/services/utils/agentless.test.ts b/x-pack/plugins/fleet/server/services/utils/agentless.test.ts index 9c941a2d8d7924..4a1bbdd5f7d845 100644 --- a/x-pack/plugins/fleet/server/services/utils/agentless.test.ts +++ b/x-pack/plugins/fleet/server/services/utils/agentless.test.ts @@ -13,6 +13,7 @@ import { isAgentlessCloudEnabled, isAgentlessEnabled, isAgentlessServerlessEnabled, + prependAgentlessApiBasePathToEndpoint, } from './agentless'; jest.mock('../app_context'); @@ -23,28 +24,37 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ })); describe('isAgentlessCloudEnabled', () => { + afterEach(() => { + jest.clearAllMocks(); + }); it('should return false if cloud is not enabled', () => { - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: false } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: false, + }, + } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: false } as any); expect(isAgentlessCloudEnabled()).toBe(false); }); it('should return false if cloud is enabled but agentless is not', () => { - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: false } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: false, + }, + } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); expect(isAgentlessCloudEnabled()).toBe(false); }); it('should return true if cloud is enabled and agentless is enabled', () => { - jest - .spyOn(appContextService, 'getExperimentalFeatures') - .mockReturnValue({ agentless: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + }, + } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); expect(isAgentlessCloudEnabled()).toBe(true); @@ -52,6 +62,10 @@ describe('isAgentlessCloudEnabled', () => { }); describe('isAgentlessServerlessEnabled', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('should return false if serverless is not enabled', () => { jest .spyOn(appContextService, 'getExperimentalFeatures') @@ -83,6 +97,10 @@ describe('isAgentlessServerlessEnabled', () => { }); describe('isAgentlessEnabled', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('should return false if cloud and serverless are not enabled', () => { jest .spyOn(appContextService, 'getExperimentalFeatures') @@ -140,3 +158,34 @@ describe('isAgentlessEnabled', () => { expect(isAgentlessEnabled()).toBe(true); }); }); +describe('prependAgentlessApiBasePathToEndpoint', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should prepend the agentless api base path to the endpoint', () => { + const agentlessConfig = { + api: { + url: 'https://agentless-api.com', + }, + } as any; + const endpoint = '/deployments'; + + expect(prependAgentlessApiBasePathToEndpoint(agentlessConfig, endpoint)).toBe( + 'https://agentless-api.com/api/v1/ess/deployments' + ); + }); + + it('should prepend the agentless api base path to the endpoint with a dynamic path', () => { + const agentlessConfig = { + api: { + url: 'https://agentless-api.com', + }, + } as any; + const endpoint = '/deployments/123'; + + expect(prependAgentlessApiBasePathToEndpoint(agentlessConfig, endpoint)).toBe( + 'https://agentless-api.com/api/v1/ess/deployments/123' + ); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/utils/agentless.ts b/x-pack/plugins/fleet/server/services/utils/agentless.ts index 97a9dcbf5f505e..d54ea2bb3d00b5 100644 --- a/x-pack/plugins/fleet/server/services/utils/agentless.ts +++ b/x-pack/plugins/fleet/server/services/utils/agentless.ts @@ -6,12 +6,11 @@ */ import { appContextService } from '..'; +import type { FleetConfigType } from '../../config'; export const isAgentlessCloudEnabled = () => { const cloudSetup = appContextService.getCloud(); - return Boolean( - cloudSetup?.isCloudEnabled && appContextService.getExperimentalFeatures().agentless - ); + return Boolean(cloudSetup?.isCloudEnabled && appContextService.getConfig()?.agentless?.enabled); }; export const isAgentlessServerlessEnabled = () => { const cloudSetup = appContextService.getCloud(); @@ -22,3 +21,14 @@ export const isAgentlessServerlessEnabled = () => { export const isAgentlessEnabled = () => { return isAgentlessCloudEnabled() || isAgentlessServerlessEnabled(); }; + +const AGENTLESS_API_BASE_PATH = '/api/v1/ess'; + +type AgentlessApiEndpoints = '/deployments' | `/deployments/${string}`; + +export const prependAgentlessApiBasePathToEndpoint = ( + agentlessConfig: FleetConfigType['agentless'], + endpoint: AgentlessApiEndpoints +) => { + return `${agentlessConfig.api.url}${AGENTLESS_API_BASE_PATH}${endpoint}`; +}; diff --git a/x-pack/test/cloud_security_posture_functional/agentless/create_agent.ts b/x-pack/test/cloud_security_posture_functional/agentless/create_agent.ts index aa1a079262cba1..b4a72d355c68d3 100644 --- a/x-pack/test/cloud_security_posture_functional/agentless/create_agent.ts +++ b/x-pack/test/cloud_security_posture_functional/agentless/create_agent.ts @@ -31,11 +31,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { before(async () => { cisIntegration = pageObjects.cisAddIntegration; - mockApiServer = await mockAgentlessApiService.listen(8089); // Start the usage api mock server on port 8081 + mockApiServer = mockAgentlessApiService.listen(8089); // Start the usage api mock server on port 8089 }); after(async () => { - await await pageObjects.cspSecurity.logout(); + await pageObjects.cspSecurity.logout(); mockApiServer.close(); }); diff --git a/x-pack/test/cloud_security_posture_functional/config.agentless.ts b/x-pack/test/cloud_security_posture_functional/config.agentless.ts index 459c814b6e08cb..341ef6a9905b73 100644 --- a/x-pack/test/cloud_security_posture_functional/config.agentless.ts +++ b/x-pack/test/cloud_security_posture_functional/config.agentless.ts @@ -24,8 +24,8 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), `--xpack.fleet.agents.fleet_server.hosts=["https://ftr.kibana:8220"]`, `--xpack.fleet.internal.fleetServerStandalone=true`, - `--xpack.fleet.enableExperimental.0=agentless`, - `--xpack.fleet.agentless.api.url=http://localhost:8089/agentless-api/api/v1/ess`, + `--xpack.fleet.agentless.enabled=true`, + `--xpack.fleet.agentless.api.url=http://localhost:8089/agentless-api`, `--xpack.fleet.agentless.api.tls.certificate=${KBN_CERT_PATH}`, `--xpack.fleet.agentless.api.tls.key=${KBN_KEY_PATH}`, `--xpack.fleet.agentless.api.tls.ca=${CA_CERT_PATH}`, diff --git a/x-pack/test/fleet_api_integration/config.base.ts b/x-pack/test/fleet_api_integration/config.base.ts index cc689e1f3f5369..8e11dc1c5aa520 100644 --- a/x-pack/test/fleet_api_integration/config.base.ts +++ b/x-pack/test/fleet_api_integration/config.base.ts @@ -91,9 +91,9 @@ export default async function ({ readConfigFile, log }: FtrConfigProviderContext 'enableStrictKQLValidation', 'subfeaturePrivileges', 'enablePackagesStateMachine', - 'agentless', ])}`, `--xpack.cloud.id='123456789'`, + `--xpack.fleet.agentless.enabled=true`, `--xpack.fleet.agentless.api.url=https://api.agentless.url/api/v1/ess`, `--xpack.fleet.agentless.api.tls.certificate=./config/node.crt`, `--xpack.fleet.agentless.api.tls.key=./config/node.key`, From a429807170478923eb1885a0b387e6a65e2a897c Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:05:50 +1000 Subject: [PATCH 22/92] [api-docs] 2024-08-14 Daily api_docs build (#190473) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/799 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.devdocs.json | 2 + api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 128 +++- api_docs/fleet.mdx | 4 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.devdocs.json | 34 + api_docs/kbn_apm_synthtrace.mdx | 4 +- .../kbn_apm_synthtrace_client.devdocs.json | 19 +- api_docs/kbn_apm_synthtrace_client.mdx | 4 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.devdocs.json | 30 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...t_management_favorites_public.devdocs.json | 702 ++++++++++++++++++ ...bn_content_management_favorites_public.mdx | 36 + ...t_management_favorites_server.devdocs.json | 145 ++++ ...bn_content_management_favorites_server.mdx | 33 + ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...agement_table_list_view_table.devdocs.json | 23 + ...ntent_management_table_list_view_table.mdx | 4 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 16 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.devdocs.json | 45 ++ api_docs/kbn_entities_schema.mdx | 4 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.devdocs.json | 149 +++- api_docs/kbn_ml_url_state.mdx | 4 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 4 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- ...bn_security_solution_features.devdocs.json | 29 +- api_docs/kbn_security_solution_features.mdx | 4 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.devdocs.json | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.devdocs.json | 10 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 26 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 32 +- api_docs/rule_registry.mdx | 4 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 731 files changed, 2119 insertions(+), 786 deletions(-) create mode 100644 api_docs/kbn_content_management_favorites_public.devdocs.json create mode 100644 api_docs/kbn_content_management_favorites_public.mdx create mode 100644 api_docs/kbn_content_management_favorites_server.devdocs.json create mode 100644 api_docs/kbn_content_management_favorites_server.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 376cae63309881..4469afa2e8508b 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 5ba3be3fdddea6..3902e52ecbae42 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 83538a8be72a99..28730ac0fb9d32 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-08-13 +date: 2024-08-14 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 dc65359c5a5121..ef7c9b68cf194d 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-08-13 +date: 2024-08-14 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 c21ee2adb5977a..994f67e3baca65 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index de97ed081bb605..c2616561d2e209 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-08-13 +date: 2024-08-14 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 8d479f60979505..3364fd5aceb7b8 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index ce091df4face9b..cf9cfbc61ab0c5 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-08-13 +date: 2024-08-14 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 eccc05133d19e9..d1080dcd63eafc 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-08-13 +date: 2024-08-14 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 3a9b5928b10a85..1bdb61ee19099b 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-08-13 +date: 2024-08-14 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 1c0657b61bff43..1e07dc29979193 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-08-13 +date: 2024-08-14 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 aef73f9c2f7d46..913da46da385d0 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-08-13 +date: 2024-08-14 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 86fa27e8c1eeb9..ac7bc60b14c8c1 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-08-13 +date: 2024-08-14 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 7f58833be2f7e7..11dac530992bcd 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-08-13 +date: 2024-08-14 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 4bf7861489f30a..7a1fbd6d6ed536 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-08-13 +date: 2024-08-14 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 7339bfac3b5324..cd7880b96c7785 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-08-13 +date: 2024-08-14 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 786cde845545e6..2f3d003ebb2089 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-08-13 +date: 2024-08-14 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 2888b9a1a5d1bd..5cbf9631fc557b 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-08-13 +date: 2024-08-14 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 d2bf7df6aabdbe..865fee25ddf295 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-08-13 +date: 2024-08-14 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 f7972270d0906a..1c04186ae091ec 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -6615,6 +6615,8 @@ "section": "def-public.HasSaveNotification", "text": "HasSaveNotification" }, + " & ", + "PublishesReload", "> & { asyncResetUnsavedChanges: () => Promise; autoApplySelections$: ", { "pluginId": "@kbn/presentation-publishing", diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 9e148bae9c74d7..9ed4d84ac7ed79 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 0dbcac8e3bec1e..6c37cab99adeae 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index bdec93ab7029d8..1b781897b7a2b5 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-08-13 +date: 2024-08-14 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 380a7d97f38ae8..a5de868b7733dd 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-08-13 +date: 2024-08-14 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 5d863188f7515c..2722cc2f0be5bf 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index a2ca69f6adac75..d31fb3025796f3 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 43ac14a2244541..43d20508552ba5 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-08-13 +date: 2024-08-14 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 2ad63474152787..50938b38570028 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-08-13 +date: 2024-08-14 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 96e8bb71bd72f1..3d2a1f8171a4a0 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-08-13 +date: 2024-08-14 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 72961d68285e40..7f47158264a192 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-08-13 +date: 2024-08-14 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 d18a8290dec454..46c6de156af562 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-08-13 +date: 2024-08-14 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 f9aa15e86f9e7f..9fa05ec9eadd09 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-08-13 +date: 2024-08-14 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 e6f74c9090c850..03b29b8db86268 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-08-13 +date: 2024-08-14 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 0e60971c4aad25..d8b1f0d27e8755 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-08-13 +date: 2024-08-14 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 58740a94a8b1af..7e748eaead0cff 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index e1313157fc4298..79cc9134de2168 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index c62e1fcad04280..1767ab186d53f2 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 0f758fff0cedd2..f6bf395ae0f341 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-08-13 +date: 2024-08-14 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 a6229dc26ee4c2..5669ab1d8aebc5 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-08-13 +date: 2024-08-14 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 96ca93547b4ff5..4253d0232c85f7 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 632d98a437919e..0f95045f9a5972 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 293c820e3902f2..447643e07670f6 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-08-13 +date: 2024-08-14 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 ded8151082441c..434019e1b72519 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index c701319d815d62..384d0b43d54217 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-08-13 +date: 2024-08-14 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 760dd758bf879b..bdd40b0f1f7ab1 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-08-13 +date: 2024-08-14 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 cb93739528eaac..5cedbfc206f65d 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-08-13 +date: 2024-08-14 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 5a6e174bdabd31..b257354955e3d3 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 3996eaff903881..d7e0a6263c7a5f 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 36bc7eb0b03f7b..dcbe4bae12c0da 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index a0f07816ca255e..adffb55eaff37f 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 599c03ce444865..69266588556977 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index ff97001c178b15..53ebfc4ae29f1a 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index c0b3024d72b2f3..4aa5aab4d538a2 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-08-13 +date: 2024-08-14 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 3d4f05cb34940a..2d3df4b949804f 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-08-13 +date: 2024-08-14 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 fc0fc9eed9b2ce..78f84fc0c67103 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index 5864abef22ee19..f68b3e9956140d 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-08-13 +date: 2024-08-14 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 236e56c0beedb3..f82eaf68f5ff06 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-08-13 +date: 2024-08-14 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 9ac2ce647f34a8..72b23787c35400 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-08-13 +date: 2024-08-14 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 1e48f53073f588..d169d5f0fe2880 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-08-13 +date: 2024-08-14 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 ec55c303986b6b..475949de9d6194 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-08-13 +date: 2024-08-14 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 85318c7729d93d..3997fd35d64668 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-08-13 +date: 2024-08-14 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 b4ff3e068eb843..924596f823b2af 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-08-13 +date: 2024-08-14 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 8ec9d0d2f13813..ddeedf5126ac55 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-08-13 +date: 2024-08-14 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 8eb6a404182d55..ba0f2ae59177a7 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-08-13 +date: 2024-08-14 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 1c2763abe7a90c..f8ee49181b7fc9 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-08-13 +date: 2024-08-14 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 0db176891591a6..24c67acb3a07ef 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-08-13 +date: 2024-08-14 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 6af24bd56e4df6..805de1dcdd1954 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-08-13 +date: 2024-08-14 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 1442420c769239..243328c151d672 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-08-13 +date: 2024-08-14 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 0b1e03168df16f..98528c56580279 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-08-13 +date: 2024-08-14 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 701ba590ee0de0..3eaeb9b360dade 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-08-13 +date: 2024-08-14 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 f5a8b1e9d588c0..08c9556b096bf1 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-08-13 +date: 2024-08-14 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 a5a80403a9bab5..db574772206aa9 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 6849becd68478a..4ae8167b5294fa 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 96cf3d35541726..d8fddfcfb3567a 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-08-13 +date: 2024-08-14 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 f431f3d76190a7..bbf1f5456821c2 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-08-13 +date: 2024-08-14 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 41326b48ca9ec8..e7efa01e0b597f 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-08-13 +date: 2024-08-14 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 54f1b165671544..26e0c62d97f404 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -1608,6 +1608,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "fleet", + "id": "def-public.NewPackagePolicy.output_id", + "type": "CompoundType", + "tags": [], + "label": "output_id", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fleet", "id": "def-public.NewPackagePolicy.package", @@ -2908,7 +2922,7 @@ "The updated Integration Policy to be merged back and included in the API call" ], "signature": [ - "{ id?: string | number | undefined; name?: string | undefined; description?: string | undefined; namespace?: string | undefined; enabled?: boolean | undefined; is_managed?: boolean | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; package?: ", + "{ id?: string | number | undefined; name?: string | undefined; description?: string | undefined; namespace?: string | undefined; enabled?: boolean | undefined; is_managed?: boolean | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; output_id?: string | null | undefined; package?: ", { "pluginId": "fleet", "scope": "common", @@ -11683,6 +11697,98 @@ ], "returnComment": [] }, + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll", + "type": "Function", + "tags": [], + "label": "removeOutputFromAll", + "description": [ + "\nRemove an output from all package policies that are using it, and replace the output by the default ones." + ], + "signature": [ + "(soClient: ", + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "server", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-server.SavedObjectsClientContract", + "text": "SavedObjectsClientContract" + }, + ", esClient: ", + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "server", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-server.ElasticsearchClient", + "text": "ElasticsearchClient" + }, + ", outputId: string) => Promise" + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll.$1", + "type": "Object", + "tags": [], + "label": "soClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-saved-objects-api-server", + "scope": "server", + "docId": "kibKbnCoreSavedObjectsApiServerPluginApi", + "section": "def-server.SavedObjectsClientContract", + "text": "SavedObjectsClientContract" + } + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll.$2", + "type": "Object", + "tags": [], + "label": "esClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-elasticsearch-server", + "scope": "server", + "docId": "kibKbnCoreElasticsearchServerPluginApi", + "section": "def-server.ElasticsearchClient", + "text": "ElasticsearchClient" + } + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "fleet", + "id": "def-server.PackagePolicyClient.removeOutputFromAll.$3", + "type": "string", + "tags": [], + "label": "outputId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "fleet", "id": "def-server.PackagePolicyClient.fetchAllItemIds", @@ -16133,7 +16239,7 @@ "section": "def-common.PackagePolicyPackage", "text": "PackagePolicyPackage" }, - " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }>, soClient: ", + " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; output_id?: string | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }>, soClient: ", { "pluginId": "@kbn/core-saved-objects-api-server", "scope": "server", @@ -16189,7 +16295,7 @@ "section": "def-common.PackagePolicyPackage", "text": "PackagePolicyPackage" }, - " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }>" + " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; output_id?: string | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }>" ], "path": "x-pack/plugins/fleet/server/types/extensions.ts", "deprecated": false, @@ -23646,6 +23752,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "fleet", + "id": "def-common.NewPackagePolicy.output_id", + "type": "CompoundType", + "tags": [], + "label": "output_id", + "description": [], + "signature": [ + "string | null | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/package_policy.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "fleet", "id": "def-common.NewPackagePolicy.package", @@ -27678,7 +27798,7 @@ "section": "def-common.PackagePolicyPackage", "text": "PackagePolicyPackage" }, - " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }[]" + " | undefined; policy_id?: string | undefined; policy_ids?: string[] | undefined; output_id?: string | undefined; statusCode?: number | undefined; body?: { message: string; } | undefined; }[]" ], "path": "x-pack/plugins/fleet/common/types/rest_spec/package_policy.ts", "deprecated": false, diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index cf22b14ad2050e..5b87506863f5f5 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1351 | 5 | 1229 | 74 | +| 1357 | 5 | 1234 | 74 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 3afb22a11f62f3..969241c90eeac6 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-08-13 +date: 2024-08-14 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 4653bc0915eeb3..0f5d29c7fcf999 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-08-13 +date: 2024-08-14 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 3d64f3f540188d..2eb5aeea15cf6a 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-08-13 +date: 2024-08-14 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 97ac2017c59e16..3db08e9aaab26b 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-08-13 +date: 2024-08-14 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 73b45d99f05d07..b1ae10d14a1292 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 6fef9bea3945b6..64cf1e62d4b1cf 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 9faa6ec278d77a..b22fd063c90d3e 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index fcf10fc4624f2e..92ef577ade8a95 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-08-13 +date: 2024-08-14 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 645d0f025cb1f0..ff80df769a6413 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-08-13 +date: 2024-08-14 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 154fd95d522d6f..17c37334896f61 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 078b906e7e5b7a..100c3cc2d1d50c 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 618ed41885dc7b..15fe7a0a1a0087 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 130dd073cb09d7..011097d14e40c7 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 2ded9a82ea8cf1..0a293531d288de 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index cdc2792fa40abc..6945fca8517fda 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-08-13 +date: 2024-08-14 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 ed5ebcf25f5573..d825c18507e057 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-08-13 +date: 2024-08-14 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 542918da9f1a0f..a7cf39daf17e9a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index ed57937b0cf5ba..cf190be4996239 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 3a0c74bbc0964c..9ce12851d693c4 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 1137cf9c64c686..c29dfeff9b5a1b 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index 9e1ee306f1d93d..b9d1c3e3c4a54b 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index f2c8c1dc72404a..ff4c8e52f74323 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-08-13 +date: 2024-08-14 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 510c7ea5cb2e8c..c0f51ae3b546a2 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index a0657b7db873b1..f76d9fe54a2bca 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 59e2c1ab0f7955..ce8c8702492a0a 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 6cdcf9603462db..05f194fc71c74c 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-08-13 +date: 2024-08-14 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 24eb89c0d47c8a..03a590c496c4b5 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 98a1bc2b75fa00..8e5199c3c97718 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index d3182382f1f423..cd255e8aba3290 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 43b48226ba025c..c5e02ed95ee2f9 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.devdocs.json b/api_docs/kbn_apm_synthtrace.devdocs.json index 26ccc25ade7178..d1fa4a2a3ee91c 100644 --- a/api_docs/kbn_apm_synthtrace.devdocs.json +++ b/api_docs/kbn_apm_synthtrace.devdocs.json @@ -704,6 +704,40 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.LogsSynthtraceEsClient.createIndexTemplate", + "type": "Function", + "tags": [], + "label": "createIndexTemplate", + "description": [], + "signature": [ + "(name: ", + "IndexTemplateName", + ") => Promise" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.LogsSynthtraceEsClient.createIndexTemplate.$1", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "IndexTemplateName" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/logs/logs_synthtrace_es_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] } ], "initialIsOpen": false diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 048a7a3a98561b..5afe53bce34add 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 49 | 0 | 49 | 8 | +| 51 | 0 | 51 | 9 | ## Server diff --git a/api_docs/kbn_apm_synthtrace_client.devdocs.json b/api_docs/kbn_apm_synthtrace_client.devdocs.json index 2c1979907d9827..d7755119aa2c24 100644 --- a/api_docs/kbn_apm_synthtrace_client.devdocs.json +++ b/api_docs/kbn_apm_synthtrace_client.devdocs.json @@ -3158,13 +3158,28 @@ "label": "create", "description": [], "signature": [ - "() => Log" + "(logsOptions?: LogsOptions) => Log" ], "path": "packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts", "deprecated": false, "trackAdoption": false, "returnComment": [], - "children": [] + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace-client", + "id": "def-common.log.create.$1", + "type": "Object", + "tags": [], + "label": "logsOptions", + "description": [], + "signature": [ + "LogsOptions" + ], + "path": "packages/kbn-apm-synthtrace-client/src/lib/logs/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "initialIsOpen": false diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 46d2e3a0ac5a5f..ba486da2e413e3 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 200 | 0 | 200 | 31 | +| 201 | 0 | 201 | 31 | ## Common diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 20c1ba84b26262..28855d2d82fb5b 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index bd98b9b341dadf..700f89e83d28a6 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index dae824e8ed83b3..6ba33f6911c822 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index d93729dcb0a34d..868cd848f99ae4 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-08-13 +date: 2024-08-14 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 96cf71f3c69159..5c971fb508c8c1 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-08-13 +date: 2024-08-14 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 534145519e1e5b..182bea37822380 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-08-13 +date: 2024-08-14 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 ee902bf913cffb..f787c0fcab79e1 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-08-13 +date: 2024-08-14 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 b2db8826d9d43d..d36f034425ff9c 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-08-13 +date: 2024-08-14 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 aa481e25ff4db8..545c880b21b335 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-08-13 +date: 2024-08-14 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 456a532903c352..f273d7e884bc7d 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-08-13 +date: 2024-08-14 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 9c178f608fef15..5eeca824aae90b 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-08-13 +date: 2024-08-14 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 e94dc6e2ba9b6b..95aaccf8a209ec 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-08-13 +date: 2024-08-14 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 0aca1331424f3d..89b97e15d61c45 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-08-13 +date: 2024-08-14 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 6320631423b761..f16268fc691b90 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-08-13 +date: 2024-08-14 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 be96f8e305ea07..1ddfd772fbe606 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-08-13 +date: 2024-08-14 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 0c1d7541e3e9f1..f841b4f1dedaed 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-08-13 +date: 2024-08-14 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 e02b9efb02cae7..c009e2996c45f8 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-08-13 +date: 2024-08-14 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 092cbc21241293..975989cb17a702 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-08-13 +date: 2024-08-14 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 d6aba34b8969ca..0537d907829c2e 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-08-13 +date: 2024-08-14 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 a3c9b92a919407..422c9dc3ecd3e9 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-08-13 +date: 2024-08-14 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 fd4d2a83a3d11a..d65a147f530a2a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.devdocs.json b/api_docs/kbn_config_schema.devdocs.json index bf268d7f43e1ec..409941bbe1c88e 100644 --- a/api_docs/kbn_config_schema.devdocs.json +++ b/api_docs/kbn_config_schema.devdocs.json @@ -1056,7 +1056,7 @@ { "parentPluginId": "@kbn/config-schema", "id": "def-common.Type.internalSchema", - "type": "Object", + "type": "CompoundType", "tags": [ "type" ], @@ -1066,6 +1066,28 @@ ], "signature": [ "AnySchema", + " | ", + "ArraySchema", + " | ", + "AlternativesSchema", + " | ", + "BinarySchema", + " | ", + "BooleanSchema", + " | ", + "DateSchema", + " | ", + "FunctionSchema", + " | ", + "NumberSchema", + " | ", + "ObjectSchema", + " | ", + "StringSchema", + " | ", + "LinkSchema", + " | ", + "SymbolSchema", "" ], "path": "packages/kbn-config-schema/src/types/type.ts", @@ -1089,12 +1111,12 @@ { "parentPluginId": "@kbn/config-schema", "id": "def-common.Type.Unnamed.$1", - "type": "Object", + "type": "CompoundType", "tags": [], "label": "schema", "description": [], "signature": [ - "AnySchema", + "Schema", "" ], "path": "packages/kbn-config-schema/src/types/type.ts", @@ -1268,7 +1290,7 @@ "description": [], "signature": [ "() => ", - "AnySchema", + "Schema", "" ], "path": "packages/kbn-config-schema/src/types/type.ts", diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index bfb0e14c27cb79..f0af22686cb55e 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-08-13 +date: 2024-08-14 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 2d18ef4ddc5a3e..1a6d0496fb185b 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-08-13 +date: 2024-08-14 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_favorites_public.devdocs.json b/api_docs/kbn_content_management_favorites_public.devdocs.json new file mode 100644 index 00000000000000..9d7837ee1cfd21 --- /dev/null +++ b/api_docs/kbn_content_management_favorites_public.devdocs.json @@ -0,0 +1,702 @@ +{ + "id": "@kbn/content-management-favorites-public", + "client": { + "classes": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient", + "type": "Class", + "tags": [], + "label": "FavoritesClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-favorites-public", + "scope": "public", + "docId": "kibKbnContentManagementFavoritesPublicPluginApi", + "section": "def-public.FavoritesClient", + "text": "FavoritesClient" + }, + " implements ", + { + "pluginId": "@kbn/content-management-favorites-public", + "scope": "public", + "docId": "kibKbnContentManagementFavoritesPublicPluginApi", + "section": "def-public.FavoritesClientPublic", + "text": "FavoritesClientPublic" + } + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.Unnamed.$1", + "type": "string", + "tags": [], + "label": "favoriteObjectType", + "description": [], + "signature": [ + "string" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "deps", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.Unnamed.$2.http", + "type": "Object", + "tags": [], + "label": "http", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-http-browser", + "scope": "public", + "docId": "kibKbnCoreHttpBrowserPluginApi", + "section": "def-public.HttpSetup", + "text": "HttpSetup" + } + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.getFavorites", + "type": "Function", + "tags": [], + "label": "getFavorites", + "description": [], + "signature": [ + "() => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.addFavorite", + "type": "Function", + "tags": [], + "label": "addFavorite", + "description": [], + "signature": [ + "({ id }: { id: string; }) => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.addFavorite.$1", + "type": "Object", + "tags": [], + "label": "{ id }", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.addFavorite.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.removeFavorite", + "type": "Function", + "tags": [], + "label": "removeFavorite", + "description": [], + "signature": [ + "({ id }: { id: string; }) => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.removeFavorite.$1", + "type": "Object", + "tags": [], + "label": "{ id }", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.removeFavorite.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClient.getFavoriteType", + "type": "Function", + "tags": [], + "label": "getFavoriteType", + "description": [], + "signature": [ + "() => string" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "functions": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.cssFavoriteHoverWithinEuiTableRow", + "type": "Function", + "tags": [], + "label": "cssFavoriteHoverWithinEuiTableRow", + "description": [ + "\nCSS to apply to euiTable to show the favorite button on hover or when active" + ], + "signature": [ + "(euiTheme: ", + "EuiThemeComputed", + "<{}>) => ", + "SerializedStyles" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.cssFavoriteHoverWithinEuiTableRow.$1", + "type": "CompoundType", + "tags": [], + "label": "euiTheme", + "description": [], + "signature": [ + "EuiThemeComputed", + "<{}>" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoriteButton", + "type": "Function", + "tags": [], + "label": "FavoriteButton", + "description": [], + "signature": [ + "({ id, className }: ", + { + "pluginId": "@kbn/content-management-favorites-public", + "scope": "public", + "docId": "kibKbnContentManagementFavoritesPublicPluginApi", + "section": "def-public.FavoriteButtonProps", + "text": "FavoriteButtonProps" + }, + ") => JSX.Element | null" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoriteButton.$1", + "type": "Object", + "tags": [], + "label": "{ id, className }", + "description": [], + "signature": [ + { + "pluginId": "@kbn/content-management-favorites-public", + "scope": "public", + "docId": "kibKbnContentManagementFavoritesPublicPluginApi", + "section": "def-public.FavoriteButtonProps", + "text": "FavoriteButtonProps" + } + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesContextProvider", + "type": "Function", + "tags": [], + "label": "FavoritesContextProvider", + "description": [], + "signature": [ + "({ favoritesClient, notifyError, children, }: React.PropsWithChildren) => JSX.Element" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_context.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesContextProvider.$1", + "type": "CompoundType", + "tags": [], + "label": "{\n favoritesClient,\n notifyError,\n children,\n}", + "description": [], + "signature": [ + "React.PropsWithChildren" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_context.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesEmptyState", + "type": "Function", + "tags": [], + "label": "FavoritesEmptyState", + "description": [], + "signature": [ + "({ emptyStateType, entityNamePlural, entityName, }: { emptyStateType: \"noItems\" | \"noMatchingItems\"; entityNamePlural?: string | undefined; entityName?: string | undefined; }) => JSX.Element" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorites_empty_state.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesEmptyState.$1", + "type": "Object", + "tags": [], + "label": "{\n emptyStateType = 'noItems',\n entityNamePlural = i18n.translate('contentManagement.favorites.defaultEntityNamePlural', {\n defaultMessage: 'items',\n }),\n entityName = i18n.translate('contentManagement.favorites.defaultEntityName', {\n defaultMessage: 'item',\n }),\n}", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/components/favorites_empty_state.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesEmptyState.$1.emptyStateType", + "type": "CompoundType", + "tags": [], + "label": "emptyStateType", + "description": [], + "signature": [ + "\"noItems\" | \"noMatchingItems\"" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorites_empty_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesEmptyState.$1.entityNamePlural", + "type": "string", + "tags": [], + "label": "entityNamePlural", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorites_empty_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesEmptyState.$1.entityName", + "type": "string", + "tags": [], + "label": "entityName", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorites_empty_state.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.useFavorites", + "type": "Function", + "tags": [], + "label": "useFavorites", + "description": [], + "signature": [ + "({ enabled }?: { enabled?: boolean | undefined; }) => ", + "UseQueryResult", + "<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ", unknown>" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_query.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.useFavorites.$1", + "type": "Object", + "tags": [], + "label": "{ enabled = true }", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_query.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.useFavorites.$1.enabled", + "type": "CompoundType", + "tags": [], + "label": "enabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_query.tsx", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoriteButtonProps", + "type": "Interface", + "tags": [], + "label": "FavoriteButtonProps", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoriteButtonProps.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoriteButtonProps.className", + "type": "string", + "tags": [], + "label": "className", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/favorites/favorites_public/src/components/favorite_button.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic", + "type": "Interface", + "tags": [], + "label": "FavoritesClientPublic", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.getFavorites", + "type": "Function", + "tags": [], + "label": "getFavorites", + "description": [], + "signature": [ + "() => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.addFavorite", + "type": "Function", + "tags": [], + "label": "addFavorite", + "description": [], + "signature": [ + "({ id }: { id: string; }) => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.addFavorite.$1", + "type": "Object", + "tags": [], + "label": "{ id }", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.addFavorite.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.removeFavorite", + "type": "Function", + "tags": [], + "label": "removeFavorite", + "description": [], + "signature": [ + "({ id }: { id: string; }) => Promise<", + { + "pluginId": "@kbn/content-management-favorites-server", + "scope": "server", + "docId": "kibKbnContentManagementFavoritesServerPluginApi", + "section": "def-server.GetFavoritesResponse", + "text": "GetFavoritesResponse" + }, + ">" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.removeFavorite.$1", + "type": "Object", + "tags": [], + "label": "{ id }", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.removeFavorite.$1.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [] + }, + { + "parentPluginId": "@kbn/content-management-favorites-public", + "id": "def-public.FavoritesClientPublic.getFavoriteType", + "type": "Function", + "tags": [], + "label": "getFavoriteType", + "description": [], + "signature": [ + "() => string" + ], + "path": "packages/content-management/favorites/favorites_public/src/favorites_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx new file mode 100644 index 00000000000000..386db5e5499f06 --- /dev/null +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -0,0 +1,36 @@ +--- +#### +#### 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: kibKbnContentManagementFavoritesPublicPluginApi +slug: /kibana-dev-docs/api/kbn-content-management-favorites-public +title: "@kbn/content-management-favorites-public" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/content-management-favorites-public plugin +date: 2024-08-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] +--- +import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 39 | 0 | 38 | 0 | + +## Client + +### Functions + + +### Classes + + +### Interfaces + + diff --git a/api_docs/kbn_content_management_favorites_server.devdocs.json b/api_docs/kbn_content_management_favorites_server.devdocs.json new file mode 100644 index 00000000000000..2ddd581cc7caa2 --- /dev/null +++ b/api_docs/kbn_content_management_favorites_server.devdocs.json @@ -0,0 +1,145 @@ +{ + "id": "@kbn/content-management-favorites-server", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.registerFavorites", + "type": "Function", + "tags": [], + "label": "registerFavorites", + "description": [], + "signature": [ + "({ logger, core }: { core: ", + { + "pluginId": "@kbn/core-lifecycle-server", + "scope": "server", + "docId": "kibKbnCoreLifecycleServerPluginApi", + "section": "def-server.CoreSetup", + "text": "CoreSetup" + }, + "; logger: ", + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + }, + "; }) => void" + ], + "path": "packages/content-management/favorites/favorites_server/src/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.registerFavorites.$1", + "type": "Object", + "tags": [], + "label": "{ logger, core }", + "description": [], + "path": "packages/content-management/favorites/favorites_server/src/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.registerFavorites.$1.core", + "type": "Object", + "tags": [], + "label": "core", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-lifecycle-server", + "scope": "server", + "docId": "kibKbnCoreLifecycleServerPluginApi", + "section": "def-server.CoreSetup", + "text": "CoreSetup" + }, + "" + ], + "path": "packages/content-management/favorites/favorites_server/src/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.registerFavorites.$1.logger", + "type": "Object", + "tags": [], + "label": "logger", + "description": [], + "signature": [ + { + "pluginId": "@kbn/logging", + "scope": "common", + "docId": "kibKbnLoggingPluginApi", + "section": "def-common.Logger", + "text": "Logger" + } + ], + "path": "packages/content-management/favorites/favorites_server/src/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.GetFavoritesResponse", + "type": "Interface", + "tags": [], + "label": "GetFavoritesResponse", + "description": [], + "path": "packages/content-management/favorites/favorites_server/src/favorites_routes.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/content-management-favorites-server", + "id": "def-server.GetFavoritesResponse.favoriteIds", + "type": "Array", + "tags": [], + "label": "favoriteIds", + "description": [], + "signature": [ + "string[]" + ], + "path": "packages/content-management/favorites/favorites_server/src/favorites_routes.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx new file mode 100644 index 00000000000000..e040ecd7e63412 --- /dev/null +++ b/api_docs/kbn_content_management_favorites_server.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: kibKbnContentManagementFavoritesServerPluginApi +slug: /kibana-dev-docs/api/kbn-content-management-favorites-server +title: "@kbn/content-management-favorites-server" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/content-management-favorites-server plugin +date: 2024-08-14 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] +--- +import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; + + + +Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 6 | 0 | 6 | 0 | + +## Server + +### Functions + + +### Interfaces + + 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 1169d45d35f327..e48b3e26661433 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-08-13 +date: 2024-08-14 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 5369bd27e1c9bc..f4b9decbc851cb 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-08-13 +date: 2024-08-14 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 79ab293f3e5a6b..bcb522f8a92a2c 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-08-13 +date: 2024-08-14 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.devdocs.json b/api_docs/kbn_content_management_table_list_view_table.devdocs.json index 62a0a06a9bdd32..4159e15e024475 100644 --- a/api_docs/kbn_content_management_table_list_view_table.devdocs.json +++ b/api_docs/kbn_content_management_table_list_view_table.devdocs.json @@ -325,6 +325,29 @@ "trackAdoption": false } ] + }, + { + "parentPluginId": "@kbn/content-management-table-list-view-table", + "id": "def-public.TableListViewKibanaDependencies.favorites", + "type": "Object", + "tags": [], + "label": "favorites", + "description": [ + "\nThe favorites client to enable the favorites feature." + ], + "signature": [ + { + "pluginId": "@kbn/content-management-favorites-public", + "scope": "public", + "docId": "kibKbnContentManagementFavoritesPublicPluginApi", + "section": "def-public.FavoritesClientPublic", + "text": "FavoritesClientPublic" + }, + " | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/services.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false 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 c26cfd260e21a1..b7ea73b69039c1 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 49 | 0 | 33 | 3 | +| 50 | 0 | 33 | 3 | ## Client diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index f6d19803316c20..44f736994f0c8a 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index c94d244872be43..0d4f902971d1da 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-08-13 +date: 2024-08-14 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 be420264c5a57e..e4ad35b4fd80b5 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-08-13 +date: 2024-08-14 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 b10005daba4ba2..29dfa47a7a0051 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-08-13 +date: 2024-08-14 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 324802bc0b7d64..79e2e94a469cf4 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-08-13 +date: 2024-08-14 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 af52877a69a8aa..833722768ab417 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-08-13 +date: 2024-08-14 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 76ca2cb51b4ca2..dad7a733b93778 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-08-13 +date: 2024-08-14 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 734c564f9c7b42..b8b89e6d381bec 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-08-13 +date: 2024-08-14 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 b7fe1816900ca1..202e7c21775b02 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-08-13 +date: 2024-08-14 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 f67becd25697c5..995ec4f0b75d10 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-08-13 +date: 2024-08-14 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 ca61572cd06cca..47736149cf1d24 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-08-13 +date: 2024-08-14 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 3ef1c708d06153..eeff041b831639 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-08-13 +date: 2024-08-14 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 2376b136fbcfcd..918b4897c1c82f 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-08-13 +date: 2024-08-14 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 5383f1b4c2a390..32df345b857a7f 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-08-13 +date: 2024-08-14 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 2c940027278ed5..d5aef7fee726a3 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-08-13 +date: 2024-08-14 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 8a69dbbc38169b..1c9738541c2757 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-08-13 +date: 2024-08-14 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 1bf3f3f2a9a974..1584ffcd7379b9 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-08-13 +date: 2024-08-14 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 b307253dacc98b..25eae5c1c4c16c 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-08-13 +date: 2024-08-14 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 94c3fd6edbbe33..ebc51615d9e8e4 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-08-13 +date: 2024-08-14 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 d83ad3a9635b84..df1235c5105f83 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-08-13 +date: 2024-08-14 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 56868728c76630..1022a8f5d48f28 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-08-13 +date: 2024-08-14 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 b3ac4cb0ed24b1..6141fe740a194c 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-08-13 +date: 2024-08-14 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 ad0c4ccb4d47f7..08632fba94c164 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-08-13 +date: 2024-08-14 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 adbadae65dcf30..a129ab5dc1f499 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-08-13 +date: 2024-08-14 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 fec37d30512fa9..cd6d96f92af9b2 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-08-13 +date: 2024-08-14 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 88e7c1dd66f086..4517d9a92da865 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-08-13 +date: 2024-08-14 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 92d611ac1ae1e7..d7671e366d0cc5 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-08-13 +date: 2024-08-14 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 c78fa715a805ab..d5b7d7a8cbcfb4 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-08-13 +date: 2024-08-14 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 829ece52c2ffd7..72a8aee0893e94 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-08-13 +date: 2024-08-14 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 ab092edf05e981..17478f45865353 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-08-13 +date: 2024-08-14 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 31024628376899..91ae8c25d31599 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-08-13 +date: 2024-08-14 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 48c2992125ea2a..1d088c96b46efb 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-08-13 +date: 2024-08-14 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 97f7c02fdb4858..3085393b972d98 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-08-13 +date: 2024-08-14 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 886f6ec68b1669..6df41573214d3d 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-08-13 +date: 2024-08-14 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 5f8f961b0bddcb..419860d3edd0ec 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-08-13 +date: 2024-08-14 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 49d336af1c95c4..c96b55d4eeb8ef 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-08-13 +date: 2024-08-14 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 adba87eccbc24e..d36424f8390be2 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-08-13 +date: 2024-08-14 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 4a87bf68b7e15a..4437cc885cc118 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-08-13 +date: 2024-08-14 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 3a58b33389d3bb..e3e90d7e6dc454 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-08-13 +date: 2024-08-14 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 e871f173424cad..e4c0e68bc150c3 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-08-13 +date: 2024-08-14 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 06c32e4c8d3cb6..3e312d0285c39e 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-08-13 +date: 2024-08-14 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 f33965e2c26e1d..59c581155479a0 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-08-13 +date: 2024-08-14 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 65980f0f2328ed..9d3f6025521e28 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-08-13 +date: 2024-08-14 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 e4f99058797a52..2a06b64c257ad7 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-08-13 +date: 2024-08-14 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 c05a164248f740..300f2e8c35d818 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-08-13 +date: 2024-08-14 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 9370059001d6a0..e6a23c3d779c94 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-08-13 +date: 2024-08-14 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 98a478c7c23782..a1784310cea1c6 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-08-13 +date: 2024-08-14 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 9ae0e73f8f2bc6..c6127eea237e9f 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-08-13 +date: 2024-08-14 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 e8c0cc581eaec0..fa12213bdc9ec1 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-08-13 +date: 2024-08-14 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 4837d9d2b45c9e..687b453d68012d 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-08-13 +date: 2024-08-14 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 1b2482574ce83c..1d3c14efd9e256 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-08-13 +date: 2024-08-14 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 fc0b4d9bae024a..610549aac909aa 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-08-13 +date: 2024-08-14 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 1a62c026525cfd..82a78960e36d02 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-08-13 +date: 2024-08-14 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 d7d3211501ace5..0ba664d6f4b613 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-08-13 +date: 2024-08-14 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 9b72d67c10b66d..c3414513cc3fe4 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-08-13 +date: 2024-08-14 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 a85ba35ceb70f7..8949dd69d12deb 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-08-13 +date: 2024-08-14 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 763074f6a7dbee..c8861c20020f02 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-08-13 +date: 2024-08-14 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 3455462bce96fa..17b957f5f90cef 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-08-13 +date: 2024-08-14 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 231c15570f3fc3..6fc8034ebbe8cd 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-08-13 +date: 2024-08-14 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 7c96aa26fbdabf..920c9d63e00e15 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-08-13 +date: 2024-08-14 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 78723341ccb820..62d89d074e84fa 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-08-13 +date: 2024-08-14 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 56f6f1acd58859..e3c1893c81ad3d 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-08-13 +date: 2024-08-14 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 378f84cf0730a4..8677378bbeadbf 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-08-13 +date: 2024-08-14 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 8a5444d376acb0..5581c3377785a0 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-08-13 +date: 2024-08-14 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 c7c9fde2d95152..6bc52a068c6c0e 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-08-13 +date: 2024-08-14 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 fc94c591769605..fe95460dde0039 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-08-13 +date: 2024-08-14 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 3f01ff71c8c35e..3093cbbc4078d2 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-08-13 +date: 2024-08-14 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 9338818e39293e..eb10dce094e623 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-08-13 +date: 2024-08-14 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 646ff4e7cf1307..e5929c5f55ac9b 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-08-13 +date: 2024-08-14 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 b2455165b85270..30b19ede4a9c96 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-08-13 +date: 2024-08-14 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 9e6d054eae56db..3c916b4e485320 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-08-13 +date: 2024-08-14 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 cc5185b0ceb818..9c76bd94dbc444 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -3698,6 +3698,10 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/routes/legacy/list_action_types.ts" }, + { + "plugin": "@kbn/content-management-favorites-server", + "path": "packages/content-management/favorites/favorites_server/src/favorites_routes.ts" + }, { "plugin": "share", "path": "src/plugins/share/server/url_service/http/short_urls/register_get_route.ts" @@ -6360,6 +6364,14 @@ "plugin": "actions", "path": "x-pack/plugins/actions/server/routes/get_global_execution_kpi.ts" }, + { + "plugin": "@kbn/content-management-favorites-server", + "path": "packages/content-management/favorites/favorites_server/src/favorites_routes.ts" + }, + { + "plugin": "@kbn/content-management-favorites-server", + "path": "packages/content-management/favorites/favorites_server/src/favorites_routes.ts" + }, { "plugin": "contentManagement", "path": "src/plugins/content_management/server/rpc/routes/routes.ts" @@ -7384,10 +7396,6 @@ "plugin": "contentManagement", "path": "src/plugins/content_management/server/plugin.test.ts" }, - { - "plugin": "contentManagement", - "path": "src/plugins/content_management/server/plugin.test.ts" - }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/server/routes/preview_scripted_field.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 454e27dd989ec8..e0fe8c084cf7ef 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-08-13 +date: 2024-08-14 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 6bca3cec91dd5b..55dfd59543221b 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-08-13 +date: 2024-08-14 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 0a5bb5b8668580..6cc6a9ec278a4a 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-08-13 +date: 2024-08-14 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 9b529d5e61c90a..4c12007e55a766 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-08-13 +date: 2024-08-14 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 d14289cd2f0b9e..d0d12389c7178d 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-08-13 +date: 2024-08-14 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 501a63ab0b81d3..ce2686c649a3ac 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-08-13 +date: 2024-08-14 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 9bde7aeb989bcb..b783cc41940864 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-08-13 +date: 2024-08-14 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 1561b5ae613364..5728e3cc005f63 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-08-13 +date: 2024-08-14 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 f30aa23213eb9b..bb20be08ad4c8e 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-08-13 +date: 2024-08-14 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 c92240965c8a01..547ffdd69eca26 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-08-13 +date: 2024-08-14 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 32a5bd62e9ea1e..d0edef79a76b26 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-08-13 +date: 2024-08-14 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 c37343354d95e6..7d77d5e24fb6f1 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-08-13 +date: 2024-08-14 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 f58209823d2a00..5fdbc8055d3b48 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-08-13 +date: 2024-08-14 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 b144eef1a6ea0e..191a32521fc660 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-08-13 +date: 2024-08-14 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 100635dcdeb686..399da03b2b6574 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-08-13 +date: 2024-08-14 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 161bf511477e09..fc06e2b33f6d8a 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-08-13 +date: 2024-08-14 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 acf081afd65816..6be785521f4b14 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-08-13 +date: 2024-08-14 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 6425469eaa51b0..5fbda638427ff8 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-08-13 +date: 2024-08-14 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 95ba2dea606548..7df6828c40885f 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-08-13 +date: 2024-08-14 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 e5aea7db502a51..b409ba8d206f3a 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-08-13 +date: 2024-08-14 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 d6575061d23226..d61be66e9d4a58 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-08-13 +date: 2024-08-14 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 24e1a3b7ec3afe..a0ff22b30f19db 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-08-13 +date: 2024-08-14 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 06b7f6d63f75e4..530de0043c591f 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-08-13 +date: 2024-08-14 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 123c9cfd0e669d..8e98ac9abf9eda 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-08-13 +date: 2024-08-14 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 b6d81db6726a03..31c4059faaf8c9 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-08-13 +date: 2024-08-14 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 a540b585b85544..5a08ad6e8c54b5 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-08-13 +date: 2024-08-14 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 8496f68d59dc04..02784c7ce719d5 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-08-13 +date: 2024-08-14 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 b72f508c3482cb..c267b3c51d2aa3 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-08-13 +date: 2024-08-14 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 513f2fe5d48139..7a5e9bf191bcea 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-08-13 +date: 2024-08-14 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 8eb69e23d84b46..80d3af1a45f69e 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-08-13 +date: 2024-08-14 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 72401fa521683b..736b1ed0c9a2ac 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-08-13 +date: 2024-08-14 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 013d6853afe9bd..afc2ed420002e3 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-08-13 +date: 2024-08-14 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 b3c9990dc89d9f..2f5c05145c957e 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-08-13 +date: 2024-08-14 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 57e645d0ac1c6a..3ffe1a9932e380 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-08-13 +date: 2024-08-14 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 d2b7194698d723..c2ffa734b753d9 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-08-13 +date: 2024-08-14 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 ca9a39a8ae3af0..331f91c4bf7f49 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-08-13 +date: 2024-08-14 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 e656d8c02d3fd0..e91da1f10ac6cf 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-08-13 +date: 2024-08-14 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 a57ee698049e2e..f19bee48cd072e 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-08-13 +date: 2024-08-14 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 a760f2570d319d..4dda3179e08d84 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-08-13 +date: 2024-08-14 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 9c5613e4c6f3b8..e43c863367b038 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-08-13 +date: 2024-08-14 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 3ada523d295f9d..7126f822719ac3 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-08-13 +date: 2024-08-14 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 8eb0068159a473..60ca129133b247 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-08-13 +date: 2024-08-14 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 1f50c5380f86a4..24a9342d5a6781 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-08-13 +date: 2024-08-14 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 e57684f238b1ee..10160a2967e716 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-08-13 +date: 2024-08-14 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 9af53f2ca4446f..69b558602c8861 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-08-13 +date: 2024-08-14 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 43cde1bc253510..cf3e1c0866b29e 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-08-13 +date: 2024-08-14 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 f2f62cea816c17..0b0a7d5bd13c83 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-08-13 +date: 2024-08-14 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 3b2901fba55c7e..309c558ce9318b 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-08-13 +date: 2024-08-14 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 24649238555564..a609abf7602e7c 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-08-13 +date: 2024-08-14 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 cbf4110956c7a3..e708581e009af7 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-08-13 +date: 2024-08-14 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 fb9d0a1e2864ee..5ef725ee9ab40b 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-08-13 +date: 2024-08-14 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 c256183580c98d..0fa8a985d4dd81 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-08-13 +date: 2024-08-14 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 ab4bfcd5132fc2..b85f34fceaa18e 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-08-13 +date: 2024-08-14 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 32adc2847e7ce3..c82f9fb065933f 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-08-13 +date: 2024-08-14 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 d94162c91f7b64..c7bb08a67399c7 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-08-13 +date: 2024-08-14 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 1cef778cb8ac58..f2545251537ae7 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-08-13 +date: 2024-08-14 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 d88bca74f2e4a7..781d2095018b48 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-08-13 +date: 2024-08-14 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 baf9abcda34f43..79d015f2c125d8 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-08-13 +date: 2024-08-14 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 6161a810dc7608..028db3c5261fbb 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-08-13 +date: 2024-08-14 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 5650b47721c316..ce791980c09edc 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index b58f4a9b18f352..594679420732f7 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-08-13 +date: 2024-08-14 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 73ee7b3225f99c..ae4e0f437aabd2 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-08-13 +date: 2024-08-14 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 37b4a5e17e15dc..b53eb72fa03b53 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-08-13 +date: 2024-08-14 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 68b5bd587cdd57..933e6ec6c02dfa 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index e31700ac67a3fa..d84d2e403efcac 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 32ee071a053f28..b3968ed953bce7 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index f259fc7665ddf8..d0d0854b6e6d43 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index a714b77455f1f5..d626994ebfcc12 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index f4cf4b9a177166..299cc88feb6013 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index e0a1572bc5a530..5688d6ea29bbf1 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 127e1923fb7344..98e8ffa3b3d975 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 3334c22eb97e7d..f1871608d728f2 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-08-13 +date: 2024-08-14 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 38ff6e4cbfae34..49a5aebb95f108 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-08-13 +date: 2024-08-14 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 f030118ebec76b..2dee59e6983f34 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-08-13 +date: 2024-08-14 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 3fb30c8bc77047..402dcbfc2d2810 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-08-13 +date: 2024-08-14 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 509f07e997215a..587624d5a1bc5d 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-08-13 +date: 2024-08-14 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 7ca2adf366272a..3addae91cc20b8 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-08-13 +date: 2024-08-14 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 9e2ff19a7d0b60..de5e8575ef6b38 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-08-13 +date: 2024-08-14 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 05149aa98d4dd7..56a2d343acb6e2 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 59273e2d9b0d9a..947791ceb6caeb 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-08-13 +date: 2024-08-14 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 bb3bdd6e7511f9..62af46d086f928 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-08-13 +date: 2024-08-14 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 5cbb5993e2ed86..e39e2c5a2e491e 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-08-13 +date: 2024-08-14 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 92b0d2347b7723..96d4e4b50ba954 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-08-13 +date: 2024-08-14 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 0d1b1cca82fa60..100b3d39141dde 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-08-13 +date: 2024-08-14 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 609ea7ae47e43c..a0ade194dc49f9 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-08-13 +date: 2024-08-14 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 166d80f3487fb8..b760ba42d3f7b2 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-08-13 +date: 2024-08-14 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 50d8a3111f8565..fb17694a3bbf49 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-08-13 +date: 2024-08-14 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 57971b668ba1a3..3b9167822ecce0 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-08-13 +date: 2024-08-14 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 345a4c47a9e5fa..73be4ba662ba39 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-08-13 +date: 2024-08-14 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 0be932141af21a..27b8b39f222102 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-08-13 +date: 2024-08-14 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 d5694598379a42..9321c709598020 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-08-13 +date: 2024-08-14 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 3ad37f27820cfb..4597e28f87b8a2 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-08-13 +date: 2024-08-14 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 add7721e4acd71..8d0afabeaaac23 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-08-13 +date: 2024-08-14 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 96425600d436f1..e8bf5cbe3661c1 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 730fff8139ebec..696f252dad7e70 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 513cb7fa82b5fb..0ffdc2a4452477 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index df5812d5a1ca99..ebae6b16abbd7e 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 48c6efb46861dc..b515d4a51064fa 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index c1fb04e3ff2a5c..fcc903e1258367 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index bf74375d939a05..069dfd96179282 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 60b1cbf6dc364f..ff9423e85ef3b5 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index ca63b32a13e88c..3a5896d7b93542 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 01fb3562ed8db7..8342a8b987325c 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-08-13 +date: 2024-08-14 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 14c7e16e2f50b1..f3138f5bd215bc 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-08-13 +date: 2024-08-14 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 5ff6efb8f47ba7..4a2bbd73cb4cdf 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-08-13 +date: 2024-08-14 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 3d587a90914db5..e87adb37489504 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-08-13 +date: 2024-08-14 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 b9b134888c6fc8..d7df137332a953 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-08-13 +date: 2024-08-14 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 5780a8e006b210..a692461e615d68 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-08-13 +date: 2024-08-14 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 416fce221a550d..ae8832af213d28 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-08-13 +date: 2024-08-14 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 51a652693d3fcb..cfe809c8edf57d 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-08-13 +date: 2024-08-14 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 53343bb44cd184..b54eccd484701f 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-08-13 +date: 2024-08-14 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 b4bcbcfcca4e82..0d88da1c80548b 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-08-13 +date: 2024-08-14 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 340be6a423fe5f..dc589862d72780 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-08-13 +date: 2024-08-14 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 2a5f5161e0c1a8..c6abd45474915b 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-08-13 +date: 2024-08-14 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 755f7fb0a4c3e7..94c60229a108b2 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 3895391e07aaf3..873c5768789b48 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 983687cc473b4f..c76d3bcb8d2f70 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-08-13 +date: 2024-08-14 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 d83f373770c4ad..d05ec31a86b8c2 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-08-13 +date: 2024-08-14 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 e5048161c0914f..ade73e0c6af2f8 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-08-13 +date: 2024-08-14 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 1b84d351fcf3fb..a4fd365ef9d00e 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 66021cce05cba9..c1d7721c058300 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 62a2f49c9b08d0..fe310f0fde92ee 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index a96c52d6749005..a4baea4b5f4485 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-08-13 +date: 2024-08-14 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 68bbb081224fd7..64249431ef31a6 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-08-13 +date: 2024-08-14 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 eaf9f2ab824064..e235a1bc75cc2a 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-08-13 +date: 2024-08-14 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 e00cb006fe341e..8c8b9d31738088 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-08-13 +date: 2024-08-14 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 58ba8b182a9c0c..42528ac8c24e78 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-08-13 +date: 2024-08-14 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 e686df0c03e686..2e43f5d9656807 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-08-13 +date: 2024-08-14 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 05c299e2af3a73..3b1ac9bf8ae1bf 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-08-13 +date: 2024-08-14 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 613ccfb9d97d68..fe3dac4a5c7a28 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-08-13 +date: 2024-08-14 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 73bdd6f3fe45b4..53dccec4d6cda0 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-08-13 +date: 2024-08-14 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 5ee137bd46c50f..ec6492ec707676 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-08-13 +date: 2024-08-14 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 da728207f9fc76..94d6ea6b5ce0d5 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-08-13 +date: 2024-08-14 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 95901d9f55ea96..578a627c5084b0 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-08-13 +date: 2024-08-14 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 80274482552ef9..0e07b9e495a0d2 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-08-13 +date: 2024-08-14 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 5567ea6a5bce71..90ebb41f3b151a 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-08-13 +date: 2024-08-14 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 b1b1b3c78ef95d..acf97f7bfa45a8 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-08-13 +date: 2024-08-14 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 560b8133c3559b..8bd9ca40cfd94b 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-08-13 +date: 2024-08-14 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 a161eac32e14b5..a0687d3a26f68a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.devdocs.json b/api_docs/kbn_entities_schema.devdocs.json index 2d1ad602d26cc1..29fa10784d55be 100644 --- a/api_docs/kbn_entities_schema.devdocs.json +++ b/api_docs/kbn_entities_schema.devdocs.json @@ -135,6 +135,36 @@ } ], "misc": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.CreateEntityDefinitionQuery", + "type": "Type", + "tags": [], + "label": "CreateEntityDefinitionQuery", + "description": [], + "signature": [ + "{ installOnly: boolean; }" + ], + "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.DeleteEntityDefinitionQuery", + "type": "Type", + "tags": [], + "label": "DeleteEntityDefinitionQuery", + "description": [], + "signature": [ + "{ deleteData?: boolean | undefined; }" + ], + "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/delete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/entities-schema", "id": "def-common.ENTITY_BASE_PREFIX", @@ -343,6 +373,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.createEntityDefinitionQuerySchema", + "type": "Object", + "tags": [], + "label": "createEntityDefinitionQuerySchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ installOnly: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { installOnly: boolean; }, { installOnly?: boolean | undefined; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/entities-schema", "id": "def-common.deleteEntityDefinitionParamsSchema", diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 6e73310b002c1c..b1d666abb44933 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entiti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 34 | 0 | 34 | 0 | +| 37 | 0 | 37 | 0 | ## Common diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index bdf16473979b7f..ecfa0afae08604 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-08-13 +date: 2024-08-14 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 aa4d1a3038bdd1..66fd1bb3ef5c19 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-08-13 +date: 2024-08-14 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 3526ac30fa8cac..2ba3d435e777db 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-08-13 +date: 2024-08-14 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 94f278abcd8b64..33a923dbb31570 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-08-13 +date: 2024-08-14 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 312242bb631026..35a129281b3b87 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-08-13 +date: 2024-08-14 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 3c95cfb656934f..b82e944d5faaba 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 942fb1e78105c0..a8e7f0fce6851d 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 64819884703876..0b75ef3a77bea3 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 9c4af05a18969d..fb68172942ca56 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -3193,7 +3193,7 @@ "label": "type", "description": [], "signature": [ - "\"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\" | \"unsupported\"" + "\"boolean\" | \"geo_point\" | \"geo_shape\" | \"ip\" | \"keyword\" | \"text\" | \"date\" | \"date_nanos\" | \"version\" | \"integer\" | \"long\" | \"double\" | \"unsigned_long\" | \"cartesian_point\" | \"cartesian_shape\" | \"counter_integer\" | \"counter_long\" | \"counter_double\" | \"unsupported\"" ], "path": "packages/kbn-esql-validation-autocomplete/src/validation/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 17b7f5339a54e5..21c9216cbfbc81 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index cdc6a56c30418c..a16d216be6c134 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-08-13 +date: 2024-08-14 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 c2a3d051d1433a..3204e428681631 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-08-13 +date: 2024-08-14 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 09ed95d586d208..d56616e3ecaa32 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-08-13 +date: 2024-08-14 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 10252a25783aa8..bc313f154c9f5a 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-08-13 +date: 2024-08-14 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 44627f484752be..c203cd6f22e540 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-08-13 +date: 2024-08-14 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 062468566b7ccb..cdc5ae55aa8012 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-08-13 +date: 2024-08-14 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 684ee4a7e953c2..4041820fc7153d 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-08-13 +date: 2024-08-14 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 4b515071f16e98..bc8b91a80912d5 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-08-13 +date: 2024-08-14 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 6d6798db77b899..82d05814b2dc9a 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-08-13 +date: 2024-08-14 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 f91f44f1a0f1ac..b7c1c0af278260 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-08-13 +date: 2024-08-14 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 2e0bcf419ed65c..48cd8f137bdd3f 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-08-13 +date: 2024-08-14 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 01c6d07e0cd179..8ed89fa6dd4382 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index ed4e11bf3417e3..d2acb9209bb614 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index c06c8e4dd8a499..6665438d1c2753 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-08-13 +date: 2024-08-14 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 fd3824c2b92a8c..48da095ff7b4b3 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-08-13 +date: 2024-08-14 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 6fc3388a3d03ea..9e97fc3ba1d41d 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-08-13 +date: 2024-08-14 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 6a59919415a708..06d1fd3a3ef3ab 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-08-13 +date: 2024-08-14 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 99f96a82d28cb5..eb6e11bd76a63d 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-08-13 +date: 2024-08-14 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 1f67e02b17f2d3..44309a5750ce3e 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-08-13 +date: 2024-08-14 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 08ef5c393fabcc..f7cbd3987539db 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-08-13 +date: 2024-08-14 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 2fafd6c475c703..08216c7621cc1c 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-08-13 +date: 2024-08-14 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 542b1a60c3348c..f2264ca1e1e314 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index e9a08e6208a1e7..771b2912e6c0cc 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index a24c9fc3077028..dab3035263a520 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index f997865a18c406..8ef1c088c6e7e9 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-08-13 +date: 2024-08-14 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 43da73eb913f9e..9c90055b34b5ad 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-08-13 +date: 2024-08-14 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 cf8e4bccf0e87d..d06281dc19aded 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index efe60ae06a16aa..d533e064f37a56 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 9d60deb8b07b8c..9e3cfc4efd94fa 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-08-13 +date: 2024-08-14 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 b7a40994721782..697757bc88cb07 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-08-13 +date: 2024-08-14 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 2f1f56b336798d..d64519963a0344 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 80762f93aef462..0198a01e2e27a3 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index c4b9b49fa7f2dc..ab96c35093dbd0 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-08-13 +date: 2024-08-14 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 c8cc838c2406f7..c3265f1d515747 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-08-13 +date: 2024-08-14 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 77c658e2ad0040..f29816c569193f 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-08-13 +date: 2024-08-14 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 c92327dea11099..328aef9a3566bd 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-08-13 +date: 2024-08-14 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 df46900a272fea..783dd15ac1006d 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-08-13 +date: 2024-08-14 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 a5270c073e49c6..bd5c61e68fa97b 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-08-13 +date: 2024-08-14 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 83ec892633314e..5e80347ea0c322 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-08-13 +date: 2024-08-14 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 33af1fbf89db12..e3ee959b3a4ddb 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-08-13 +date: 2024-08-14 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 30b4ff4ed628ca..1f9b68430c31b9 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-08-13 +date: 2024-08-14 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 4bfbf337a9ba67..76b82be2f036d5 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-08-13 +date: 2024-08-14 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 879d90104c5b05..94635e3b14d3f3 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-08-13 +date: 2024-08-14 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 aedf774a4a3978..703837874f3a05 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-08-13 +date: 2024-08-14 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 49bda8512cc4fe..db88ad99ee4c1f 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-08-13 +date: 2024-08-14 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 b68e3607f47a31..dfe4a7a2b56e59 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-08-13 +date: 2024-08-14 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 ad62a70dbe9cae..73e8487c00fb3b 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-08-13 +date: 2024-08-14 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 436c3eb3376f91..09d4dd628c6cc2 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-08-13 +date: 2024-08-14 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 3ba9be22f4bf81..54c48c77e2a43a 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-08-13 +date: 2024-08-14 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 382a0bf579349e..3b27a22bd6abe7 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-08-13 +date: 2024-08-14 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 c5a6c06c431a45..45a58c28052279 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-08-13 +date: 2024-08-14 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 ebb73aaf8de946..e82100942cff7a 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-08-13 +date: 2024-08-14 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 5c475de623e2b8..e6b149a8ae2998 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-08-13 +date: 2024-08-14 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 744f9f5947cfb6..92dbbf615331ed 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-08-13 +date: 2024-08-14 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 4e841ab61c601c..70873594351b2d 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-08-13 +date: 2024-08-14 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 bfe278ae2a5cc2..b8226eeb31aa8b 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-08-13 +date: 2024-08-14 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 b740895a5e25f6..5fa5476ef7dccb 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-08-13 +date: 2024-08-14 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 82bf3471692bcb..5c9f98df7f504e 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-08-13 +date: 2024-08-14 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 63cf1fe68d00be..9ee5245037d965 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-08-13 +date: 2024-08-14 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 2a0b223ba0aaa7..efde0b3d53975e 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-08-13 +date: 2024-08-14 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 5e4971ca287fa0..eadd86e183a296 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-08-13 +date: 2024-08-14 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 4c2fa8bb6fc1af..2b122bb24520d4 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-08-13 +date: 2024-08-14 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 4a19e697546f2b..da71df7117b89d 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-08-13 +date: 2024-08-14 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 3957a946390cef..c725e889899ca5 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-08-13 +date: 2024-08-14 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 90207c1a887ea7..28c42340b4a0bc 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-08-13 +date: 2024-08-14 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 0214f06d10c917..5371dd08dae607 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-08-13 +date: 2024-08-14 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 408dbb02745701..43294d5b5f9b9a 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-08-13 +date: 2024-08-14 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 e4ddde67b49ea0..0538067f84edec 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-08-13 +date: 2024-08-14 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 c81c6fc97f29ef..27ae3e1da67a9e 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-08-13 +date: 2024-08-14 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 6dc361edf75924..60ab878e80d06b 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-08-13 +date: 2024-08-14 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 18b78b10f466d9..e642d012d1e6bf 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-08-13 +date: 2024-08-14 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 0590f2d12339a1..b9802f749dd789 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-08-13 +date: 2024-08-14 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 a6bafab1e8ecc5..dcdf9607444daf 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-08-13 +date: 2024-08-14 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 e41e9085a801e8..d88298647f02e0 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-08-13 +date: 2024-08-14 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 59cb72a78ee260..a0fce172f186ad 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-08-13 +date: 2024-08-14 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 12e87b0e860693..16b5658911ca1d 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 25fa65b77b8b61..c9d7b9b728a358 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index d20c81e8b52b50..eee2c16b3b5e17 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-08-13 +date: 2024-08-14 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 b462b6f6d95dac..f209e0f35fe873 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-08-13 +date: 2024-08-14 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.devdocs.json b/api_docs/kbn_ml_url_state.devdocs.json index b95b497f7b6916..23d6834de272ab 100644 --- a/api_docs/kbn_ml_url_state.devdocs.json +++ b/api_docs/kbn_ml_url_state.devdocs.json @@ -350,7 +350,15 @@ "\nHook for managing the URL state of the page." ], "signature": [ - "(pageKey: T[\"pageKey\"], defaultState?: T[\"pageUrlState\"] | undefined) => [T[\"pageUrlState\"], (update: Partial, replaceState?: boolean | undefined) => void, ", + "(pageKey: T[\"pageKey\"], defaultState?: T[\"pageUrlState\"] | undefined) => [T[\"pageUrlState\"], (update: Partial, replaceState?: boolean | undefined) => void, ", { "pluginId": "@kbn/ml-url-state", "scope": "common", @@ -492,6 +500,145 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState", + "type": "Interface", + "tags": [], + "label": "ListingPageUrlState", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.pageSize", + "type": "number", + "tags": [], + "label": "pageSize", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.pageIndex", + "type": "number", + "tags": [], + "label": "pageIndex", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.sortField", + "type": "string", + "tags": [], + "label": "sortField", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.sortDirection", + "type": "string", + "tags": [], + "label": "sortDirection", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.queryText", + "type": "string", + "tags": [], + "label": "queryText", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.showPerPageOptions", + "type": "CompoundType", + "tags": [], + "label": "showPerPageOptions", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.ListingPageUrlState.showAll", + "type": "CompoundType", + "tags": [], + "label": "showAll", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.PageUrlState", + "type": "Interface", + "tags": [], + "label": "PageUrlState", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.PageUrlState.pageKey", + "type": "string", + "tags": [], + "label": "pageKey", + "description": [], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/ml-url-state", + "id": "def-common.PageUrlState.pageUrlState", + "type": "Uncategorized", + "tags": [], + "label": "pageUrlState", + "description": [], + "signature": [ + "object" + ], + "path": "x-pack/packages/ml/url_state/src/url_state.tsx", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false } ], "enums": [], diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index ea777a6bcd088a..ec8cc0b5b229d3 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 31 | 1 | 24 | 1 | +| 42 | 1 | 35 | 1 | ## Common diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 3e505e4ce78eaf..42b4b0eb36c5d9 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-08-13 +date: 2024-08-14 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 0cfc722c68e409..77f0f3e059fa67 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-08-13 +date: 2024-08-14 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 03a9ab4ab50fe2..48f88ad91dc83e 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-08-13 +date: 2024-08-14 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 6d4067f6fac405..f9bc13b08521e8 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index c48c9828b0f603..9f2c79b66ffca4 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index e6edc7dc25c2af..78334265b8785d 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-08-13 +date: 2024-08-14 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 9cda74e583c1b4..52d60a7b0c0fcc 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-08-13 +date: 2024-08-14 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 94f9953d717351..3768a52c138b93 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-08-13 +date: 2024-08-14 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 d7e7f5e94d3048..c1e693425c72fd 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-08-13 +date: 2024-08-14 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 5d67c98d359689..4b3fed916e3399 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-08-13 +date: 2024-08-14 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 13bb2ea518ca0f..bca62a0e44c790 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-08-13 +date: 2024-08-14 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 634c1d153c8153..6884b462d49184 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-08-13 +date: 2024-08-14 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 330f40bfb3e778..73d1e03ba4fe0b 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-08-13 +date: 2024-08-14 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 e434a94037a4be..8fc05e2a106f9c 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-08-13 +date: 2024-08-14 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 26c39990ca54a3..3d003900842837 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-08-13 +date: 2024-08-14 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 ff568fcdf02eed..dff5ce53da2a25 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-08-13 +date: 2024-08-14 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 94408a7af1001e..80f0b9ada7b804 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-08-13 +date: 2024-08-14 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 270776b8fabf2c..9b042fdfa01f21 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index fdd2efd8c8d0ef..f26dcf01b90b79 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.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 | |-------------------|-----------|------------------------|-----------------| -| 216 | 0 | 181 | 5 | +| 216 | 0 | 181 | 6 | ## Client diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 729647568d8e68..ef1461090a1624 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-08-13 +date: 2024-08-14 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 498ff2f870429e..3a4e5facb195da 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-08-13 +date: 2024-08-14 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 c17e751f500338..b4db182346dcc3 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index e3d9e8920d92f2..663f33328e9661 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 592dc014fc2fda..dbee79a200bfa2 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-08-13 +date: 2024-08-14 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 3bf289fb2ed82c..21393fb1bbffa7 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-08-13 +date: 2024-08-14 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 561b10585fa8b1..3620fb16659f23 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-08-13 +date: 2024-08-14 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 17336b7a8f98c4..370029428d1446 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-08-13 +date: 2024-08-14 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 47ab9e60bdebb5..79f459b09077ab 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-08-13 +date: 2024-08-14 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 ac60fdcf8e7416..4ed4ebd48f412a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 126b8f0919b48b..34fb928683ba7a 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 060d8761345cf3..f850f06b140406 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-08-13 +date: 2024-08-14 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 5566802ac6748a..f9b1708b8fbd65 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-08-13 +date: 2024-08-14 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 f8cb696a319289..b92ddbf5afe190 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-08-13 +date: 2024-08-14 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 c757eb3ba899d1..be831af64c0338 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-08-13 +date: 2024-08-14 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 59f86676b8a9d1..cbb1be25f5c459 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index ee69fd33b2b4cc..68f45ab666d18b 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 70380b6cd67231..d262b929ea70c7 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-08-13 +date: 2024-08-14 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 0cf0f2491c02a3..badbf0d56efe43 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-08-13 +date: 2024-08-14 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 6bb1d6772bb2d3..0675d9a7a5f55d 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-08-13 +date: 2024-08-14 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 50ae6200ce5129..71dfafe2de7ef3 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-08-13 +date: 2024-08-14 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 06ea6298a69d10..21364a0070dbbb 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-08-13 +date: 2024-08-14 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 1fac7557296977..a98e70ed320225 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-08-13 +date: 2024-08-14 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 55525836e6b7da..0b0f1972e456d2 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-08-13 +date: 2024-08-14 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 405dbe6048a443..20398726244f33 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-08-13 +date: 2024-08-14 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 bf7451ec001b07..c5e44903dcba27 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-08-13 +date: 2024-08-14 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 27d597db32db89..1f60f48b68fc10 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index d9aa178c58a6ab..8833e8ad8f42b8 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 0f11ee14b9bcc4..0207c052f3bf28 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index f7cae1f21d76bb..77327e9ffc837d 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 562442c5b045bb..1e4761be96b862 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 9eabe63a5d7a7c..501b39252edffd 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-08-13 +date: 2024-08-14 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 80db1cdc5647d3..681362ff12970a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 4ab1dd9ca6ff05..f467633000031e 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 092391055dfd81..836d9c0c77b172 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-08-13 +date: 2024-08-14 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 45715ff0da9623..c9507c1afe5e00 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-08-13 +date: 2024-08-14 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 895bb6e23f5cd3..d479a2e60045c9 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-08-13 +date: 2024-08-14 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 00f3200d26053f..56522a7e4b7468 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-08-13 +date: 2024-08-14 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 b9f221ffeaa372..643755f85ecec4 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-08-13 +date: 2024-08-14 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 11383f58d2d0f1..4f8df22d09e8b0 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index b618a3da908c23..9d7d0419e87de3 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index f7ed62820f260a..31dd3ce433fd55 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index fc09d475ae9338..7b107a0561b2ba 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 1ef88b3993daba..2446680a0ac7fe 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-08-13 +date: 2024-08-14 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 4f27989abd9181..ba64ff37f7114e 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-08-13 +date: 2024-08-14 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 0d6b0ce9f2831f..5ac79e29f801d0 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-08-13 +date: 2024-08-14 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 8b1d34276a6d3e..8cb38d693b5988 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-08-13 +date: 2024-08-14 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_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index a851b6ff3eadee..6571c64bcf177c 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.devdocs.json b/api_docs/kbn_security_solution_features.devdocs.json index 2d455423f1ffd7..e0e229df45a397 100644 --- a/api_docs/kbn_security_solution_features.devdocs.json +++ b/api_docs/kbn_security_solution_features.devdocs.json @@ -221,7 +221,9 @@ " | ", "ProductFeatureCasesKey", " | ", - "ProductFeatureAssistantKey" + "ProductFeatureAssistantKey", + " | ", + "ProductFeatureAttackDiscoveryKey" ], "path": "x-pack/packages/security-solution/features/src/product_features_keys.ts", "deprecated": false, @@ -301,6 +303,31 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/security-solution-features", + "id": "def-common.ProductFeaturesAttackDiscoveryConfig", + "type": "Type", + "tags": [], + "label": "ProductFeaturesAttackDiscoveryConfig", + "description": [], + "signature": [ + "Map<", + "ProductFeatureAttackDiscoveryKey", + ", ", + { + "pluginId": "@kbn/security-solution-features", + "scope": "common", + "docId": "kibKbnSecuritySolutionFeaturesPluginApi", + "section": "def-common.ProductFeatureKibanaConfig", + "text": "ProductFeatureKibanaConfig" + }, + ">" + ], + "path": "x-pack/packages/security-solution/features/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/security-solution-features", "id": "def-common.ProductFeaturesCasesConfig", diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index ca6c124d57880f..ee34f2615387b5 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-threat-hunting-explore](https://github.com/orgs/elast | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 14 | 0 | 14 | 6 | +| 15 | 0 | 15 | 7 | ## Common diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index c600b9cc68bd36..d9cd293372f441 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-08-13 +date: 2024-08-14 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 8823433314c288..1f3129ecb1c8dd 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-08-13 +date: 2024-08-14 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 364347119eaa84..916c02489043ed 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-08-13 +date: 2024-08-14 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 9232c579a46f51..eae4ecc692e762 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-08-13 +date: 2024-08-14 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 2d103f506aba8a..e389ce4bf36af9 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-08-13 +date: 2024-08-14 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 6eb26dee432056..3e35d8a1ed095a 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-08-13 +date: 2024-08-14 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 926070beb9299f..007a3a4d78df0e 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-08-13 +date: 2024-08-14 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 fed6b030a59ca7..54d439d87bf77a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 89b8086dc48727..5198750974cfba 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-08-13 +date: 2024-08-14 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 e0350cdc6e2053..da8a8fa7a449ab 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-08-13 +date: 2024-08-14 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 1ea4f01ffeae21..31670e37a59b0f 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-08-13 +date: 2024-08-14 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 be6baed4d200ff..1c9d3bdf700d09 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-08-13 +date: 2024-08-14 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 2879d680bb4f97..ff5bf580681bb3 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-08-13 +date: 2024-08-14 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 6701c0fb50eae6..a949349d9f9958 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-08-13 +date: 2024-08-14 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 9491d896550c34..eac9f4a558a298 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-08-13 +date: 2024-08-14 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 1b6a63cff95782..320bcd4c66f04e 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-08-13 +date: 2024-08-14 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 d5bae56d218df0..56d65a8d56103f 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-08-13 +date: 2024-08-14 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 962cce61626075..5044452d0088a7 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-08-13 +date: 2024-08-14 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 f16d3259243bfe..13850320795ab1 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-08-13 +date: 2024-08-14 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 4325a3c236a305..d11a7928549dba 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-08-13 +date: 2024-08-14 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 67713c32ecc0f4..aecd39fd64e43b 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-08-13 +date: 2024-08-14 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 7b1afbe14fd5ed..bd3158eb90c7f7 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index e1cb9181782e36..367bdd85f95498 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 55cae997a02bb7..dcd94174422f4e 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 9e1f6fd6c8b83e..3c21b08f5a75ca 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-08-13 +date: 2024-08-14 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 e31492c0f03981..fb9b0e392995d1 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-08-13 +date: 2024-08-14 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 5ff38e0f7e541e..b950eb5869cc51 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-08-13 +date: 2024-08-14 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 a9ce7979f8cbdf..b95e0c42d5d460 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-08-13 +date: 2024-08-14 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 ab061c3bda9d48..5413cc31c8f9f1 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-08-13 +date: 2024-08-14 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 3b9f91cec010d3..6126004bbd438e 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-08-13 +date: 2024-08-14 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 8094b1ae544670..5a8234ff4195a2 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-08-13 +date: 2024-08-14 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 d7d0259fd6adc2..f5bd1bf8836436 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-08-13 +date: 2024-08-14 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 67ad9a86b9a3fc..604dc3903d1f49 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-08-13 +date: 2024-08-14 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 d678b5def7da1a..ddbbd8dbd4f297 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-08-13 +date: 2024-08-14 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 88b952d28af484..445b6932f3b7e9 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-08-13 +date: 2024-08-14 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 275aba9cd1fe15..c547be6fe638ca 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-08-13 +date: 2024-08-14 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 2fca574453f6c1..ad6c1940a4e217 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-08-13 +date: 2024-08-14 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 58119e326bd44b..c410601c2af9a3 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-08-13 +date: 2024-08-14 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 c73e3499e2f8b9..7a7e485a3d3e8a 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-08-13 +date: 2024-08-14 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 8c6bb079344da1..2faac2f5355b48 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-08-13 +date: 2024-08-14 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 3835a3c5d5da0e..d14acd773cb077 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-08-13 +date: 2024-08-14 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 bad71ff9d92df9..547810f95b1b8f 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-08-13 +date: 2024-08-14 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 76cd05d42c0544..fd1c431ae821ff 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-08-13 +date: 2024-08-14 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 ef5f0e8d56a0b8..82a4e0f413f5cb 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-08-13 +date: 2024-08-14 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 0ef7f4b06ecc72..1529a702dfc455 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-08-13 +date: 2024-08-14 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 78151af2cbdad0..41a43c334db453 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-08-13 +date: 2024-08-14 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 0f620da40aec42..de87c62815d239 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-08-13 +date: 2024-08-14 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 184789f1a0a5cd..c55c977414d1c1 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-08-13 +date: 2024-08-14 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 9b5fe440fd2ff4..f5aaadf4f1cb13 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-08-13 +date: 2024-08-14 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 b525cbcd953f29..dff807049fe549 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-08-13 +date: 2024-08-14 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 ed6736a4eb8950..25bbf954cc7af3 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-08-13 +date: 2024-08-14 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 c18311285c0987..e1f24c9024c45a 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-08-13 +date: 2024-08-14 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 e880bbd4ffbbbf..35ad45b95954db 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-08-13 +date: 2024-08-14 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 5088220949ff83..2bcb3c16995c71 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-08-13 +date: 2024-08-14 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 21c25fd468c1c6..49288419edce55 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-08-13 +date: 2024-08-14 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 38644737955d03..0102c137a72bd0 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-08-13 +date: 2024-08-14 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 2693a0396f414d..10c189c22ceaee 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-08-13 +date: 2024-08-14 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 4af4a5273402c1..f4149f6bc3679b 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-08-13 +date: 2024-08-14 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 63d2f8d1e93986..4509b07dd2fc51 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-08-13 +date: 2024-08-14 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 64dd18d4516e7c..65b15a063534e2 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-08-13 +date: 2024-08-14 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 4fd0f4a8b5e9b8..cee4d8d8850ba5 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-08-13 +date: 2024-08-14 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 15efbf8ba70878..08b8715810d6f1 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-08-13 +date: 2024-08-14 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 d05b5fe0bdc5f6..1938287553b7cf 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-08-13 +date: 2024-08-14 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 0a9c9e69657d1c..dade6465124b47 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-08-13 +date: 2024-08-14 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 70aa720f79dbe4..79d3ecd074d85b 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-08-13 +date: 2024-08-14 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 2b9203447027c5..43603b3020bc01 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-08-13 +date: 2024-08-14 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 2fba70866d1d04..3414102617bffc 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-08-13 +date: 2024-08-14 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 8ed6aff8c0101c..7e2618ee417ec5 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 607d97923ce0ef..dbaddea46e649b 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 97be1dec2c3ed9..83e4497c395883 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-08-13 +date: 2024-08-14 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 0a8476ce9b2a53..b30eea970a3a74 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-08-13 +date: 2024-08-14 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 1fb29e48df7a5b..ef9177554746f4 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-08-13 +date: 2024-08-14 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 25051d9c402a2e..4d40daae012e41 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-08-13 +date: 2024-08-14 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 5ba6aef8449c16..0c95c06505a612 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-08-13 +date: 2024-08-14 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 a8cffc915af91a..b0eece95b5e758 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-08-13 +date: 2024-08-14 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 a68585cd0a1ec9..40e60ce87e3b07 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 08127126de1988..3a96a8463870d5 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index ad1aa9c4e7ca84..a50e0035b3a2d1 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 042c5aa7b952ef..8201490daab9ba 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-08-13 +date: 2024-08-14 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 3d0d0aae856568..d46b9c99fa4a0f 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-08-13 +date: 2024-08-14 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 1f818361d4460d..ee180469a79152 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-08-13 +date: 2024-08-14 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 4df4ca6070c729..6a126af88e462a 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-08-13 +date: 2024-08-14 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 0ad381590d82e2..df25e09fcb9e9e 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-08-13 +date: 2024-08-14 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 e50a8486e0ef24..e8ef0b0b9ebd16 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-08-13 +date: 2024-08-14 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 c748e44405b1fd..b5ce959a3d15ca 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-08-13 +date: 2024-08-14 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 5c40b14c2f1c59..dcfdadd00e949c 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-08-13 +date: 2024-08-14 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 3f76184409218e..ce8ae069f7bda5 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.devdocs.json b/api_docs/kbn_try_in_console.devdocs.json index 272e1b8129dce9..a414e8b39ec765 100644 --- a/api_docs/kbn_try_in_console.devdocs.json +++ b/api_docs/kbn_try_in_console.devdocs.json @@ -40,7 +40,7 @@ "id": "def-common.TryInConsoleButton.$1", "type": "Object", "tags": [], - "label": "{\n request,\n application,\n consolePlugin,\n sharePlugin,\n content = TRY_IN_CONSOLE,\n showIcon = true,\n type = 'emptyButton',\n}", + "label": "{\n request,\n application,\n consolePlugin,\n sharePlugin,\n content = RUN_IN_CONSOLE,\n showIcon = true,\n type = 'emptyButton',\n}", "description": [], "signature": [ "TryInConsoleButtonProps" diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index ce7ae41a936525..6996d6da824d4f 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index a523d76de8db80..479cff0639d1bc 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-08-13 +date: 2024-08-14 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 ca309079834fc3..488609f209637f 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-08-13 +date: 2024-08-14 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 bac7dce74e9ec2..bcbf28259756a4 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-08-13 +date: 2024-08-14 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 05f3f6f83c7f94..e430073b32f3ac 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-08-13 +date: 2024-08-14 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 703003a99f72a0..5fba11cd6a1887 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-08-13 +date: 2024-08-14 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 f66aaf6f0ba313..2f03a453e98633 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-08-13 +date: 2024-08-14 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 4adac97cd3f37e..be355c4d7ebc8e 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-08-13 +date: 2024-08-14 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 9b647cb4d297e3..227f77886c449b 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-08-13 +date: 2024-08-14 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 df1470bb16e46b..b0e54060613180 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 23ae1600a6861f..2378098486b8ec 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 5743e26f765194..dbf104ca4f1b26 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-08-13 +date: 2024-08-14 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 b2ede4e7643e87..15c44c7eda717a 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-08-13 +date: 2024-08-14 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 894b9fbde9beee..8f32fdcd050093 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-08-13 +date: 2024-08-14 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 bcc5e4633c040b..41d75d44fc2c09 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-08-13 +date: 2024-08-14 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 021cb393cc1330..fcdab6709e0dd0 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-08-13 +date: 2024-08-14 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 f4a04c12917d36..08bbd10042d9fb 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-08-13 +date: 2024-08-14 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 ff345dccb6ee6b..db526a5658fa42 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-08-13 +date: 2024-08-14 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 08d86836732092..bbce3610fa9459 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-08-13 +date: 2024-08-14 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 fe6f02c0bc232e..24910c34dacd47 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 37a1f6b4131c44..da43fb6e59087a 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 71b4195879588a..5f609f765bdeb3 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-08-13 +date: 2024-08-14 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 06865bc0f1bc80..e37968d4c5fa1f 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-08-13 +date: 2024-08-14 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 ba8efcd7f5aec9..1cd639b3d19a40 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-08-13 +date: 2024-08-14 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 d1223dce63497a..296776c3993960 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-08-13 +date: 2024-08-14 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 0a58a43b46c486..8b671fd8a0b94a 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 9063175dfeaced..c1b64152806050 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-08-13 +date: 2024-08-14 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 42e42a39bd04e1..08595341b48c91 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-08-13 +date: 2024-08-14 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 7f908233af0927..2e02f738f5e844 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-08-13 +date: 2024-08-14 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 e17650fa5118d0..b65516af0cf09d 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-08-13 +date: 2024-08-14 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 69d38d8dbeedc4..8f5a6ba94519e2 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-08-13 +date: 2024-08-14 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 1583c709a76b86..bd2323183577d7 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 8a82c527957958..a37785a3c9014e 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 92a32972763c27..3ac7db4875060c 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index f031fc1784893e..1cc808ad300f4d 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-08-13 +date: 2024-08-14 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 0b6ec624af3314..2f322ddb7995bd 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 4efdbab6d8241d..1abba28b7668e9 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 175ce071011a25..2e22653c7320d2 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.devdocs.json b/api_docs/metrics_data_access.devdocs.json index 786c41c3180748..e4bb3a666e6b95 100644 --- a/api_docs/metrics_data_access.devdocs.json +++ b/api_docs/metrics_data_access.devdocs.json @@ -745,7 +745,7 @@ "label": "hostSnapshotMetricTypes", "description": [], "signature": [ - "(\"memory\" | \"logRate\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"cpuTotal\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\")[]" + "(\"memory\" | \"logRate\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"cpuV2\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\")[]" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/index.ts", "deprecated": false, @@ -1522,7 +1522,7 @@ "label": "SnapshotMetricType", "description": [], "signature": [ - "\"count\" | \"memory\" | \"custom\" | \"logRate\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"cpuTotal\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" + "\"count\" | \"memory\" | \"custom\" | \"logRate\" | \"rx\" | \"normalizedLoad1m\" | \"memoryFree\" | \"tx\" | \"cpu\" | \"s3BucketSize\" | \"s3NumberOfObjects\" | \"s3TotalRequests\" | \"s3UploadBytes\" | \"s3DownloadBytes\" | \"cpuV2\" | \"diskLatency\" | \"diskSpaceUsage\" | \"load\" | \"memoryTotal\" | \"rxV2\" | \"txV2\" | \"diskIOReadBytes\" | \"diskIOWriteBytes\" | \"rdsLatency\" | \"rdsConnections\" | \"rdsQueriesExecuted\" | \"rdsActiveTransactions\" | \"sqsMessagesVisible\" | \"sqsMessagesDelayed\" | \"sqsMessagesEmpty\" | \"sqsMessagesSent\" | \"sqsOldestMessage\"" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, @@ -2066,10 +2066,10 @@ }, { "parentPluginId": "metricsDataAccess", - "id": "def-common.SnapshotMetricTypeKeys.cpuTotal", + "id": "def-common.SnapshotMetricTypeKeys.cpuV2", "type": "Uncategorized", "tags": [], - "label": "cpuTotal", + "label": "cpuV2", "description": [], "signature": [ "null" @@ -2510,7 +2510,7 @@ "description": [], "signature": [ "KeyofC", - "<{ count: null; cpuTotal: null; cpu: null; diskLatency: null; diskSpaceUsage: null; load: null; memory: null; memoryFree: null; memoryTotal: null; normalizedLoad1m: null; tx: null; rx: null; txV2: null; rxV2: null; logRate: null; diskIOReadBytes: null; diskIOWriteBytes: null; s3TotalRequests: null; s3NumberOfObjects: null; s3BucketSize: null; s3DownloadBytes: null; s3UploadBytes: null; rdsConnections: null; rdsQueriesExecuted: null; rdsActiveTransactions: null; rdsLatency: null; sqsMessagesVisible: null; sqsMessagesDelayed: null; sqsMessagesSent: null; sqsMessagesEmpty: null; sqsOldestMessage: null; custom: null; }>" + "<{ count: null; cpuV2: null; cpu: null; diskLatency: null; diskSpaceUsage: null; load: null; memory: null; memoryFree: null; memoryTotal: null; normalizedLoad1m: null; tx: null; rx: null; txV2: null; rxV2: null; logRate: null; diskIOReadBytes: null; diskIOWriteBytes: null; s3TotalRequests: null; s3NumberOfObjects: null; s3BucketSize: null; s3DownloadBytes: null; s3UploadBytes: null; rdsConnections: null; rdsQueriesExecuted: null; rdsActiveTransactions: null; rdsLatency: null; sqsMessagesVisible: null; sqsMessagesDelayed: null; sqsMessagesSent: null; sqsMessagesEmpty: null; sqsOldestMessage: null; custom: null; }>" ], "path": "x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/types.ts", "deprecated": false, diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index e3737d7c4700c2..c6ad47665033db 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-08-13 +date: 2024-08-14 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 0b43721cc248d7..e92257dc819674 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-08-13 +date: 2024-08-14 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 9ea43f964d9a2c..573b351ea388fd 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-08-13 +date: 2024-08-14 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 465d4e46f6f174..3831427b38728c 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-08-13 +date: 2024-08-14 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 20c634c7002d53..da5915f123d026 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-08-13 +date: 2024-08-14 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 110ea9762b72fe..5910723645fd80 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-08-13 +date: 2024-08-14 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 a5ae95b1197006..8d4c25b512f058 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-08-13 +date: 2024-08-14 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 bfd28f52a8be58..dc4bd53393d0ce 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-08-13 +date: 2024-08-14 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 3419aad60f055c..10a56ce8df9b54 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 5be2a8fa0d37af..1ff83b5149b557 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 9bbec0085989c8..cc14a02153800d 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 859b13e85eda40..138a51511b08f8 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 1e7d8058cbe210..e82be12f9baa0c 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index d1ef5a755dbd55..3269484d26d142 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-08-13 +date: 2024-08-14 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 978688e8b0ec31..198fd05e4287b4 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-08-13 +date: 2024-08-14 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 df171eada6dc8d..8a5b74d2721321 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index c9e03ea3711bd2..1527a3db32af79 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 33a9b6cd92bba0..b98199db50b25b 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index bb7668283a9693..9b371cbcb31329 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 830 | 706 | 45 | +| 832 | 708 | 45 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 52174 | 241 | 39111 | 1915 | +| 52242 | 241 | 39176 | 1918 | ## Plugin Directory @@ -102,7 +102,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 84 | 0 | 84 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1351 | 5 | 1229 | 74 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1357 | 5 | 1234 | 74 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -166,7 +166,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 23 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 9 | 0 | 2 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 21 | 0 | 21 | 0 | -| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 287 | 0 | 250 | 11 | +| | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 285 | 0 | 248 | 11 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 24 | 0 | 19 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 132 | 2 | 121 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 25 | 0 | 25 | 0 | @@ -254,8 +254,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 18 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 4 | 0 | 4 | 0 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 49 | 0 | 49 | 8 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 200 | 0 | 200 | 31 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 51 | 0 | 51 | 9 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 201 | 0 | 201 | 31 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 316 | 0 | 315 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 11 | 0 | 11 | 0 | | | [@elastic/security-defend-workflows](https://github.com/orgs/elastic/teams/security-defend-workflows) | - | 3 | 0 | 3 | 0 | @@ -279,10 +279,12 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 2 | 143 | 20 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 8 | 4 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 39 | 0 | 38 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | | | [@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) | - | 10 | 0 | 10 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 33 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 50 | 0 | 33 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 30 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 195 | 1 | 128 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 0 | 0 | @@ -493,7 +495,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 354 | 0 | 328 | 0 | -| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 34 | 0 | 34 | 0 | +| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 37 | 0 | 37 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 55 | 0 | 40 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 6 | 0 | @@ -582,7 +584,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 34 | 0 | 0 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 44 | 0 | 38 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 18 | 0 | 18 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 31 | 1 | 24 | 1 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 42 | 1 | 35 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 22 | 0 | 16 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 123 | 0 | 123 | 3 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 55 | 1 | 50 | 0 | @@ -601,7 +603,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 1 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 88 | 0 | 76 | 0 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 216 | 0 | 181 | 5 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 216 | 0 | 181 | 6 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 168 | 0 | 55 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 13 | 0 | 7 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 9 | 0 | @@ -650,7 +652,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 51 | 0 | 25 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 275 | 1 | 154 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 6 | 0 | 0 | 0 | -| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 14 | 0 | 14 | 6 | +| | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 15 | 0 | 15 | 7 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 54 | 0 | 49 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 30 | 0 | 24 | 0 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 2 | 0 | 0 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index a554fe61df7e77..e04c4b8da4fbc4 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-08-13 +date: 2024-08-14 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 2875c6c2b9c0c3..6b58ce6a4ab9ab 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-08-13 +date: 2024-08-14 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 269a448850401f..5452cbbe4a3ad9 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-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index ed0ae757281dff..29baa2b90ca31b 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-08-13 +date: 2024-08-14 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 514993f0b9cfa0..e53d58a5facce6 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-08-13 +date: 2024-08-14 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 c6aab03f1f1651..30d6d5213274b1 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-08-13 +date: 2024-08-14 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 f3ffced39c19fd..10531c28494518 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-08-13 +date: 2024-08-14 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 d7cec6f063cb34..02bf20ed950909 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -3667,7 +3667,7 @@ "label": "alertWithPersistence", "description": [], "signature": [ - "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined) => Promise<", + "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -3737,20 +3737,6 @@ "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "ruleRegistry", - "id": "def-server.PersistenceServices.alertWithPersistence.$5", - "type": "Object", - "tags": [], - "label": "currentTimeOverride", - "description": [], - "signature": [ - "Date | undefined" - ], - "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", - "deprecated": false, - "trackAdoption": false } ] }, @@ -4431,7 +4417,7 @@ "label": "PersistenceAlertService", "description": [], "signature": [ - "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined) => Promise<", + "(alerts: { _id: string; _source: T; }[], refresh: boolean | \"wait_for\", maxAlerts?: number | undefined, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -4501,20 +4487,6 @@ "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "ruleRegistry", - "id": "def-server.PersistenceAlertService.$5", - "type": "Object", - "tags": [], - "label": "currentTimeOverride", - "description": [], - "signature": [ - "Date | undefined" - ], - "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 42c8d55fc60818..625b1bf3b84651 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.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 | |-------------------|-----------|------------------------|-----------------| -| 287 | 0 | 250 | 11 | +| 285 | 0 | 248 | 11 | ## Server diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index ae920bf0f15a29..0ecbf90f8cbd16 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 9a794746eb83b8..7c7de3d2552385 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 715d30b0cbe245..250405ae508fd0 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index d26e1f0292ad23..3e3254cfec41e4 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 5a1a6a64a24ea8..66d0948141ad73 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 0c07f3adfd0e2e..ecec466a995a51 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 2a9f3669955e19..318d6c464a62a1 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index a4121aefd3358b..b52cb6ce599517 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 9f8dc75f17aad6..2c2a2c7641112e 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index bd19aa55abd6b6..82f9a59b0db56b 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 80df0fedb5e2af..89ad92ad515b96 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 2728c9196a81c3..c0c701bc2cb29a 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 3d3a32166ed77a..ce6429f5306d8d 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index fbaffaec14068d..d88d9deced80e8 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index a6a217423e3fd0..9d0917c56bf321 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 5acac10822e126..f9722f893a3ae3 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 2bd5cb29cef932..c89f5bf4c1360e 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 1961c8f5683d9d..c5735055289b45 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 83f2677ec74523..57e0f47313731b 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index ab70b1e4514697..6eab40e7890514 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index ab39c9fc109b4d..0b6c069e85fd7e 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 261d94a9df0ab3..f54b19caea4ee3 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index d7e8d6cafc929c..322c59f57f2d98 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 091030d7d7a38e..0221692963d0b4 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index ce02f0d28a74ea..20094174e9b8ac 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 0f54ee0036b1c0..0f44754daca7fe 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index d72d989b5fd448..5485764131ceb3 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 77cbb0a24c16ad..3a20f3a8b842c5 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 6a255ee59ffabd..bd810be492ac27 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 0cb8ceb47f5445..17e7aa6929bc0c 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 1741ba236a2dc3..3f41cb48619fc1 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index aa14e75a6fd870..938485f9a68771 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index b0fb3e8ffa6ca7..fa377cfc207652 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index b011ba2c46dafe..7313ec0ef205b8 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 07b01c990d5de9..b97f72b1613894 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 8f00c131b07120..c918b146818b3b 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 3dcf15f8204cf7..67504e1a17d6f8 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 29e13d21a8b7b8..b2cc8beb5a8afd 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index b067c8636e508b..d896799e4685da 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 88a653ec65d2aa..9d9351b586415c 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 1947de6ede30f9..a5d1345782325a 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 1a38c6b461d21d..3520b2b3e94cb1 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 8077b3465f7e22..f6147dd75ebcf4 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index a075e1b08edee4..27d03ba36cfea0 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index f59a5d3f8b1c70..bf5256bc53648a 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index cb6a028e85c3d8..39938068cca571 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index ab71d0badeb6c3..92205d35c44c79 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index e35b838324ef62..aa2d08b86f98c3 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 8fa4e9c0420eaa..0761b8a1124b55 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index d532c58ab10ec3..5e233ac6d91a59 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 381ef3bcc69259..10f405d5d6ed94 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index a884fc7a1fd114..f07c0f1137e201 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 3315c425c2e9df..d6a7e55130ba36 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 85ecf8f3a25772..506ec4e0506adc 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 9c17b4e586d303..e5b2f89b6e9b5a 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index cb7057ef1dd9fe..5cea6e77cec8a5 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 661e5c609541d5..6616b980c7ad31 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 2a68cc14ed7132..72a8bbd8b19bd5 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-08-13 +date: 2024-08-14 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From be26e461166eca446a9bf4af4be687b77843b4da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 14 Aug 2024 08:10:48 +0200 Subject: [PATCH 23/92] [Obs AI Assistant] Use internal user when fetching connectors (#190462) Closes https://github.com/elastic/kibana/issues/187921 The Obs AI Assistant calls the endpoint `GET _connector` to get a list of connector indices. This works for admin users but not for users with limited privileges like users with the `editor` role. Currently an error is thrown but never caught. This causes the kibana server to crash during development. In prod this problem means that users cannot retrieve connector indices, and thus fallback to querying `search-*`. This PR fixes it by using the internal user to call `GET _connector`. Additional context: https://elastic.slack.com/archives/C05J7LXR5DE/p1723560268104559 --- .../service/knowledge_base_service/index.ts | 3 +- .../recall_from_connectors.ts | 37 ++++++++++++------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts index 4de6c776661704..6c62cce3ebdb74 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/index.ts @@ -389,7 +389,7 @@ export class KnowledgeBaseService { categories?: string[]; user?: { name: string }; namespace: string; - esClient: { asCurrentUser: ElasticsearchClient }; + esClient: { asCurrentUser: ElasticsearchClient; asInternalUser: ElasticsearchClient }; uiSettingsClient: IUiSettingsClient; }): Promise<{ entries: RecalledEntry[]; @@ -417,6 +417,7 @@ export class KnowledgeBaseService { uiSettingsClient, queries, modelId, + logger: this.dependencies.logger, }).catch((error) => { this.dependencies.logger.debug('Error getting data from search indices'); this.dependencies.logger.debug(error); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/recall_from_connectors.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/recall_from_connectors.ts index 34c8a6208d655e..27c133e7b88d08 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/recall_from_connectors.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/knowledge_base_service/recall_from_connectors.ts @@ -8,6 +8,7 @@ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { IUiSettingsClient } from '@kbn/core-ui-settings-server'; import { isEmpty } from 'lodash'; +import type { Logger } from '@kbn/logging'; import { RecalledEntry } from '.'; import { aiAssistantSearchConnectorIndexPattern } from '../../../common'; @@ -16,15 +17,17 @@ export async function recallFromConnectors({ esClient, uiSettingsClient, modelId, + logger, }: { queries: Array<{ text: string; boost?: number }>; - esClient: { asCurrentUser: ElasticsearchClient }; + esClient: { asCurrentUser: ElasticsearchClient; asInternalUser: ElasticsearchClient }; uiSettingsClient: IUiSettingsClient; modelId: string; + logger: Logger; }): Promise { const ML_INFERENCE_PREFIX = 'ml.inference.'; - - const connectorIndices = await getConnectorIndices(esClient, uiSettingsClient); + const connectorIndices = await getConnectorIndices(esClient, uiSettingsClient, logger); + logger.debug(`Found connector indices: ${connectorIndices}`); const fieldCaps = await esClient.asCurrentUser.fieldCaps({ index: connectorIndices, @@ -96,17 +99,25 @@ export async function recallFromConnectors({ } async function getConnectorIndices( - esClient: { asCurrentUser: ElasticsearchClient }, - uiSettingsClient: IUiSettingsClient + esClient: { asCurrentUser: ElasticsearchClient; asInternalUser: ElasticsearchClient }, + uiSettingsClient: IUiSettingsClient, + logger: Logger ) { // improve performance by running this in parallel with the `uiSettingsClient` request - const responsePromise = esClient.asCurrentUser.transport.request({ - method: 'GET', - path: '_connector', - querystring: { - filter_path: 'results.index_name', - }, - }); + const responsePromise = esClient.asInternalUser.transport + .request<{ + results?: Array<{ index_name: string }>; + }>({ + method: 'GET', + path: '_connector', + querystring: { + filter_path: 'results.index_name', + }, + }) + .catch((e) => { + logger.warn(`Failed to fetch connector indices due to ${e.message}`); + return { results: [] }; + }); const customSearchConnectorIndex = await uiSettingsClient.get( aiAssistantSearchConnectorIndexPattern @@ -116,7 +127,7 @@ async function getConnectorIndices( return customSearchConnectorIndex.split(','); } - const response = (await responsePromise) as { results?: Array<{ index_name: string }> }; + const response = await responsePromise; const connectorIndices = response.results?.map((result) => result.index_name); // preserve backwards compatibility with 8.14 (may not be needed in the future) From e73f68867b60041364722bf548cb22a5edbad1e7 Mon Sep 17 00:00:00 2001 From: Alex Szabo Date: Wed, 14 Aug 2024 08:56:44 +0200 Subject: [PATCH 24/92] skip flaky test: https://github.com/elastic/kibana/issues/186996 (#190475) ## Summary Manually skipping test from https://github.com/elastic/kibana/issues/186996 - it's going to stay flaky, as it's depending on the `new Date()`s hitting the same second. --- .../public/components/update_status.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/threat_intelligence/public/components/update_status.test.tsx b/x-pack/plugins/threat_intelligence/public/components/update_status.test.tsx index 3ca6c01360b37f..26f5e4b1002648 100644 --- a/x-pack/plugins/threat_intelligence/public/components/update_status.test.tsx +++ b/x-pack/plugins/threat_intelligence/public/components/update_status.test.tsx @@ -11,7 +11,8 @@ import { TestProvidersComponent } from '../mocks/test_providers'; import { UpdateStatus } from './update_status'; describe('', () => { - it('should render Updated now', () => { + // Flaky: https://github.com/elastic/kibana/issues/186996 + it.skip('should render Updated now', () => { const result = render(, { wrapper: TestProvidersComponent, }); From 5fd68e4147eda71fd159b37c71d0ad613ee4bd06 Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Wed, 14 Aug 2024 09:37:03 +0200 Subject: [PATCH 25/92] [eem] add service_summary to builtin service definition (#190240) --- .../server/lib/entities/built_in/services.ts | 9 +++++++-- .../lib/entities/install_entity_definition.test.ts | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/built_in/services.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/built_in/services.ts index c733860793ca18..87b876249f33fb 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/built_in/services.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/built_in/services.ts @@ -20,14 +20,19 @@ const serviceTransactionFilter = (additionalFilters: string[] = []) => { export const builtInServicesFromLogsEntityDefinition: EntityDefinition = entityDefinitionSchema.parse({ - version: '0.1.0', + version: '1.0.0', id: `${BUILT_IN_ID_PREFIX}services_from_ecs_data`, name: 'Services from ECS data', description: 'This definition extracts service entities from common data streams by looking for the ECS field service.name', type: 'service', managed: true, - indexPatterns: ['logs-*', 'filebeat*', 'metrics-apm.service_transaction.1m*'], + indexPatterns: [ + 'logs-*', + 'filebeat*', + 'metrics-apm.service_transaction.1m*', + 'metrics-apm.service_summary.1m*', + ], history: { timestampField: '@timestamp', interval: '1m', diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts index 80bea34d2ed02b..2a5bc3b01f938d 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts @@ -52,7 +52,7 @@ const assertHasCreatedDefinition = ( id: generateHistoryIngestPipelineId(builtInServicesFromLogsEntityDefinition), processors: expect.anything(), _meta: { - definitionVersion: '0.1.0', + definitionVersion: '1.0.0', managed: true, }, }); @@ -60,7 +60,7 @@ const assertHasCreatedDefinition = ( id: generateLatestIngestPipelineId(builtInServicesFromLogsEntityDefinition), processors: expect.anything(), _meta: { - definitionVersion: '0.1.0', + definitionVersion: '1.0.0', managed: true, }, }); From 833409dd2780fb01f21e360060373cd6421639a8 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:43:46 +0200 Subject: [PATCH 26/92] [Lens] fix flaky jest tests (#190409) ## Summary Fixes https://github.com/elastic/kibana/issues/179854 fixes https://github.com/elastic/kibana/issues/179853 Instead of debugging the original issue, I rewrote the rest of the tests from this file to testing library. The issue broke on 8.14, but just twice over the span of 6 months, so I'd not backport (unless in the future it causes more problems in 8.14) --- .../datasources/common/field_item.test.tsx | 546 +++++++----------- 1 file changed, 214 insertions(+), 332 deletions(-) diff --git a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx index 1a0dce938cea6a..8e9477731d91c1 100644 --- a/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx +++ b/x-pack/plugins/lens/public/datasources/common/field_item.test.tsx @@ -5,42 +5,104 @@ * 2.0. */ -import React, { ReactElement } from 'react'; -import { ReactWrapper } from 'enzyme'; +import React from 'react'; import { act } from 'react-dom/test-utils'; import { uiActionsPluginMock } from '@kbn/ui-actions-plugin/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; import { DataView, DataViewField } from '@kbn/data-views-plugin/common'; -import * as loadFieldStatsModule from '@kbn/unified-field-list/src/services/field_stats'; -import { FieldStats, FieldPopoverFooter } from '@kbn/unified-field-list'; -import { render, screen } from '@testing-library/react'; +import { loadFieldStats } from '@kbn/unified-field-list/src/services/field_stats'; +import { fireEvent, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { EuiLoadingSpinner, EuiPopover } from '@elastic/eui'; import { InnerFieldItem, FieldItemIndexPatternFieldProps } from './field_item'; import { coreMock } from '@kbn/core/public/mocks'; -import { mountWithIntl } from '@kbn/test-jest-helpers'; import { fieldFormatsServiceMock } from '@kbn/field-formats-plugin/public/mocks'; import { IndexPattern } from '../../types'; import { chartPluginMock } from '@kbn/charts-plugin/public/mocks'; import { documentField } from '../form_based/document_field'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; jest.mock('@kbn/unified-field-list/src/services/field_stats', () => ({ loadFieldStats: jest.fn().mockResolvedValue({}), })); -const clickField = async (wrapper: ReactWrapper, field?: string) => { - await act(async () => { - await wrapper - .find(`[data-test-subj="lnsFieldListPanelField-${field}"] .kbnFieldButton__button`) - .simulate('click'); - }); -}; +const corePluginMock = coreMock.createStart(); + +const indexPattern = { + id: '1', + title: 'my-fake-index-pattern', + timeFieldName: 'timestamp', + fields: [ + { + name: 'timestamp', + displayName: 'timestamp', + type: 'date', + aggregatable: true, + searchable: true, + }, + { + name: 'bytes', + displayName: 'bytes', + type: 'number', + aggregatable: true, + searchable: true, + }, + { + name: 'memory', + displayName: 'memory', + type: 'number', + aggregatable: true, + searchable: true, + }, + { + name: 'unsupported', + displayName: 'unsupported', + type: 'geo', + aggregatable: true, + searchable: true, + }, + { + name: 'source', + displayName: 'source', + type: 'string', + aggregatable: true, + searchable: true, + }, + { + name: 'ip_range', + displayName: 'ip_range', + type: 'ip_range', + aggregatable: true, + searchable: true, + }, + { + name: 'geo.coordinates', + displayName: 'geo.coordinates', + type: 'geo_shape', + aggregatable: true, + searchable: true, + }, + documentField, + ], + isTimeBased: jest.fn(), +} as unknown as IndexPattern; + +const dataView = { + ...indexPattern, + getFormatterForField: jest.fn(() => ({ + convert: jest.fn((s: unknown) => JSON.stringify(s)), + })), +} as unknown as DataView; + +const dataViewsMock = dataViewPluginMocks.createStartContract(); const mockedServices = { data: dataPluginMock.createStartContract(), - dataViews: dataViewPluginMocks.createStartContract(), + dataViews: { + ...dataViewsMock, + get: jest.fn().mockResolvedValue(dataView), + }, fieldFormats: fieldFormatsServiceMock.createStartContract(), charts: chartPluginMock.createSetupContract(), uiActions: uiActionsPluginMock.createStartContract(), @@ -59,198 +121,100 @@ const mockedServices = { discover: { save: true, saveQuery: true, show: true }, }, }, + core: corePluginMock, }; -const InnerFieldItemWrapper: React.FC = (props) => { - return ( - - - - ); +const defaultProps: FieldItemIndexPatternFieldProps = { + indexPattern, + highlight: '', + dateRange: { + fromDate: 'now-7d', + toDate: 'now', + }, + query: { query: '', language: 'lucene' }, + filters: [], + field: { + name: 'bytes', + displayName: 'bytes', + type: 'number', + aggregatable: true, + searchable: true, + }, + exists: true, + groupIndex: 0, + itemIndex: 0, + dropOntoWorkspace: () => {}, + hasSuggestionForField: () => false, }; -async function getComponent(props: FieldItemIndexPatternFieldProps) { - const instance = await mountWithIntl(); - // wait for lazy modules - await new Promise((resolve) => setTimeout(resolve, 0)); - await instance.update(); - return instance; -} - describe('Lens Field Item', () => { - let defaultProps: FieldItemIndexPatternFieldProps; - let indexPattern: IndexPattern; - let dataView: DataView; - beforeEach(() => { - indexPattern = { - id: '1', - title: 'my-fake-index-pattern', - timeFieldName: 'timestamp', - fields: [ - { - name: 'timestamp', - displayName: 'timestamp', - type: 'date', - aggregatable: true, - searchable: true, - }, - { - name: 'bytes', - displayName: 'bytes', - type: 'number', - aggregatable: true, - searchable: true, - }, - { - name: 'memory', - displayName: 'memory', - type: 'number', - aggregatable: true, - searchable: true, - }, - { - name: 'unsupported', - displayName: 'unsupported', - type: 'geo', - aggregatable: true, - searchable: true, - }, - { - name: 'source', - displayName: 'source', - type: 'string', - aggregatable: true, - searchable: true, - }, - { - name: 'ip_range', - displayName: 'ip_range', - type: 'ip_range', - aggregatable: true, - searchable: true, - }, - { - name: 'geo.coordinates', - displayName: 'geo.coordinates', - type: 'geo_shape', - aggregatable: true, - searchable: true, - }, - documentField, - ], - isTimeBased: jest.fn(), - } as unknown as IndexPattern; - - defaultProps = { - indexPattern, - highlight: '', - dateRange: { - fromDate: 'now-7d', - toDate: 'now', - }, - query: { query: '', language: 'lucene' }, - filters: [], - field: { - name: 'bytes', - displayName: 'bytes', - type: 'number', - aggregatable: true, - searchable: true, - }, - exists: true, - groupIndex: 0, - itemIndex: 0, - dropOntoWorkspace: () => {}, - hasSuggestionForField: () => false, + (loadFieldStats as jest.Mock).mockClear(); + }); + + const renderFieldItem = (props?: Partial) => { + const Wrapper: React.FC<{ + children: React.ReactNode; + }> = ({ children }) => { + return ( + + + + {children} + + + ); }; - dataView = { - ...indexPattern, - getFormatterForField: jest.fn(() => ({ - convert: jest.fn((s: unknown) => JSON.stringify(s)), - })), - } as unknown as DataView; + const rtlRender = render(, { wrapper: Wrapper }); + return { ...rtlRender }; + }; - (mockedServices.dataViews.get as jest.Mock).mockImplementation(() => { - return Promise.resolve(dataView); - }); - }); + const clickField = async (fieldname: string) => { + userEvent.click(screen.getByTestId(`field-${fieldname}-showDetails`)); + await act(() => new Promise((resolve) => setTimeout(resolve, 0))); + }; - beforeEach(() => { - (loadFieldStatsModule.loadFieldStats as jest.Mock).mockReset(); - (loadFieldStatsModule.loadFieldStats as jest.Mock).mockImplementation(() => - Promise.resolve({}) - ); - }); + const getFieldNode = (index = 0) => { + return screen.getAllByTestId('lnsFieldListPanelField')[index]; + }; + + const queryProgressBar = () => screen.queryByRole('progressbar', { name: 'Loading' }); + + const queryFieldStats = () => screen.queryByTestId('unifiedFieldStats-buttonGroup'); it('should display displayName of a field', async () => { - render(); - expect(screen.getAllByTestId('lnsFieldListPanelField')[0]).toHaveTextContent('bytes'); + renderFieldItem(); + expect(getFieldNode()).toHaveTextContent('bytes'); }); it('should show gauge icon for gauge fields', async () => { - render( - - ); + renderFieldItem({ field: { ...defaultProps.field, timeSeriesMetric: 'gauge' } }); expect(screen.getByText('Gauge metric')).toBeInTheDocument(); }); it('should render edit field button if callback is set', async () => { const editFieldSpy = jest.fn(); - const wrapper = await getComponent({ - ...defaultProps, - editField: editFieldSpy, - hideDetails: true, - }); - await clickField(wrapper, 'bytes'); - await wrapper.update(); - const popoverContent = wrapper.find(EuiPopover).prop('children'); - act(() => { - mountWithIntl( - - {popoverContent as ReactElement} - - ) - .find('[data-test-subj="fieldPopoverHeader_editField-bytes"]') - .first() - .simulate('click'); - }); + renderFieldItem({ editField: editFieldSpy, hideDetails: true }); + await clickField('bytes'); + fireEvent.click(screen.getByRole('button', { name: 'Edit data view field' })); expect(editFieldSpy).toHaveBeenCalledWith('bytes'); }); it('should not render edit field button for document field', async () => { - const editFieldSpy = jest.fn(); - const wrapper = await getComponent({ - ...defaultProps, - field: documentField, - editField: editFieldSpy, - hideDetails: true, - }); - await clickField(wrapper, documentField.name); - await wrapper.update(); - const popoverContent = wrapper.find(EuiPopover).prop('children'); - expect( - mountWithIntl( - - {popoverContent as ReactElement} - - ) - .find('[data-test-subj="fieldPopoverHeader_editField-bytes"]') - .exists() - ).toBeFalsy(); + renderFieldItem({ field: documentField }); + await clickField(documentField.name); + expect(screen.queryByRole('button', { name: 'Edit data view field' })).not.toBeInTheDocument(); }); it('should pass add filter callback and pass result to filter manager', async () => { - let resolveFunction: (arg: unknown) => void; - - (loadFieldStatsModule.loadFieldStats as jest.Mock).mockImplementation(() => { - return new Promise((resolve) => { - resolveFunction = resolve; - }); + (loadFieldStats as jest.Mock).mockResolvedValueOnce({ + totalDocuments: 4633, + sampledDocuments: 4633, + sampledValues: 4633, + topValues: { + buckets: [{ count: 147, key: 'abc' }], + }, }); const field = { @@ -261,31 +225,9 @@ describe('Lens Field Item', () => { searchable: true, filterable: true, }; - - const editFieldSpy = jest.fn(); - const wrapper = await getComponent({ - ...defaultProps, - field, - editField: editFieldSpy, - }); - - await clickField(wrapper, field.name); - await wrapper.update(); - - await act(async () => { - resolveFunction!({ - totalDocuments: 4633, - sampledDocuments: 4633, - sampledValues: 4633, - topValues: { - buckets: [{ count: 147, key: 'abc' }], - }, - }); - }); - - await wrapper.update(); - - wrapper.find(`[data-test-subj="plus-${field.name}-abc"]`).first().simulate('click'); + renderFieldItem({ field }); + await clickField('test'); + userEvent.click(screen.getByRole('button', { name: 'Filter for test: ""abc""' })); expect(mockedServices.data.query.filterManager.addFilters).toHaveBeenCalledWith([ expect.objectContaining({ query: { match_phrase: { test: 'abc' } } }), @@ -294,21 +236,23 @@ describe('Lens Field Item', () => { it('should request field stats every time the button is clicked', async () => { const dataViewField = new DataViewField(defaultProps.field); - let resolveFunction: (arg: unknown) => void; - - (loadFieldStatsModule.loadFieldStats as jest.Mock).mockImplementation(() => { - return new Promise((resolve) => { - resolveFunction = resolve; - }); + (loadFieldStats as jest.Mock).mockResolvedValueOnce({ + totalDocuments: 4633, + sampledDocuments: 4633, + sampledValues: 4633, + histogram: { + buckets: [{ count: 705, key: 0 }], + }, + topValues: { + buckets: [{ count: 147, key: 0 }], + }, }); - const wrapper = await getComponent(defaultProps); - - await clickField(wrapper, 'bytes'); + const { rerender } = renderFieldItem(); - await wrapper.update(); + await clickField('bytes'); - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalledWith({ + expect(loadFieldStats).toHaveBeenCalledWith({ abortController: new AbortController(), services: { data: mockedServices.data }, dataView, @@ -324,66 +268,33 @@ describe('Lens Field Item', () => { toDate: 'now', field: dataViewField, }); + expect(queryFieldStats()).toBeInTheDocument(); + // closing the popover by clicking the button again + await clickField('bytes'); - expect(wrapper.find(EuiPopover).prop('isOpen')).toEqual(true); - - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(1); - - await act(async () => { - resolveFunction!({ - totalDocuments: 4633, - sampledDocuments: 4633, - sampledValues: 4633, - histogram: { - buckets: [{ count: 705, key: 0 }], - }, - topValues: { - buckets: [{ count: 147, key: 0 }], - }, - }); - }); - - await wrapper.update(); - - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); - - await clickField(wrapper, 'bytes'); - - await wrapper.update(); - - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalledTimes(1); - - act(() => { - const closePopover = wrapper.find(EuiPopover).prop('closePopover'); - - closePopover(); - }); - - await wrapper.update(); + expect(loadFieldStats).toHaveBeenCalledTimes(1); + expect(queryFieldStats()).not.toBeInTheDocument(); - expect(wrapper.find(EuiPopover).prop('isOpen')).toEqual(false); - - act(() => { - wrapper.setProps({ - dateRange: { - fromDate: 'now-14d', - toDate: 'now-7d', + const newContextProps: Pick< + FieldItemIndexPatternFieldProps, + 'dateRange' | 'query' | 'filters' + > = { + dateRange: { + fromDate: 'now-14d', + toDate: 'now-7d', + }, + query: { query: 'geo.src : "US"', language: 'kuery' }, + filters: [ + { + query: { match: { phrase: { 'geo.dest': 'US' } } }, }, - query: { query: 'geo.src : "US"', language: 'kuery' }, - filters: [ - { - query: { match: { phrase: { 'geo.dest': 'US' } } }, - }, - ], - }); - }); - - await clickField(wrapper, 'bytes'); - - await wrapper.update(); + ] as unknown as FieldItemIndexPatternFieldProps['filters'], + }; + rerender(); + await clickField('bytes'); - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalledTimes(2); - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenLastCalledWith({ + expect(loadFieldStats).toHaveBeenCalledTimes(2); + expect(loadFieldStats).toHaveBeenLastCalledWith({ abortController: new AbortController(), services: { data: mockedServices.data }, dataView, @@ -412,24 +323,15 @@ describe('Lens Field Item', () => { }); it('should not request field stats for document field', async () => { - const wrapper = await getComponent({ - ...defaultProps, - field: documentField, - }); - - await clickField(wrapper, documentField.name); - - await wrapper.update(); - - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalled(); - expect(wrapper.find(EuiPopover).prop('isOpen')).toEqual(true); - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); - expect(wrapper.find(FieldStats).text()).toBe('Analysis is not available for this field.'); + renderFieldItem({ field: documentField }); + await clickField(documentField.name); + expect(loadFieldStats).toHaveBeenCalled(); + expect(queryProgressBar()).not.toBeInTheDocument(); + expect(screen.getByText('Analysis is not available for this field.')).toBeInTheDocument(); }); it('should not request field stats for range fields', async () => { - const wrapper = await getComponent({ - ...defaultProps, + renderFieldItem({ field: { name: 'ip_range', displayName: 'ip_range', @@ -439,20 +341,14 @@ describe('Lens Field Item', () => { }, }); - await clickField(wrapper, 'ip_range'); - - await wrapper.update(); - - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalled(); - expect(wrapper.find(EuiPopover).prop('isOpen')).toEqual(true); - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); - expect(wrapper.find(FieldStats).text()).toBe('Analysis is not available for this field.'); - expect(wrapper.find(FieldPopoverFooter).exists()).toBeFalsy(); + await clickField('ip_range'); + expect(loadFieldStats).toHaveBeenCalled(); + expect(queryProgressBar()).not.toBeInTheDocument(); + expect(screen.getByText('Analysis is not available for this field.')).toBeInTheDocument(); }); it('should request examples for geo fields and render Visualize button', async () => { - const wrapper = await getComponent({ - ...defaultProps, + renderFieldItem({ field: { name: 'geo.coordinates', displayName: 'geo.coordinates', @@ -461,46 +357,32 @@ describe('Lens Field Item', () => { searchable: true, }, }); + await clickField('geo.coordinates'); + expect(loadFieldStats).toHaveBeenCalled(); - await clickField(wrapper, 'geo.coordinates'); - - await wrapper.update(); - - expect(loadFieldStatsModule.loadFieldStats).toHaveBeenCalled(); - expect(wrapper.find(EuiPopover).prop('isOpen')).toEqual(true); - expect(wrapper.find(EuiLoadingSpinner)).toHaveLength(0); - expect(wrapper.find(FieldStats).text()).toBe( + expect(queryProgressBar()).not.toBeInTheDocument(); + expect(screen.getByTestId('lnsFieldListPanel-missingFieldStats')).toHaveTextContent( 'Lens is unable to create visualizations with this field because it does not contain data. To create a visualization, drag and drop a different field.' ); - expect(wrapper.find(FieldPopoverFooter).exists()).toBeTruthy(); }); - const clickFieldRtl = async (fieldname: string) => { - userEvent.click(screen.getByTestId(`field-${fieldname}-showDetails`)); - await act(() => new Promise((resolve) => setTimeout(resolve, 0))); - }; it('should display Explore in discover button', async () => { - render(); - await clickFieldRtl('bytes'); - expect( - screen.getAllByTestId('lnsFieldListPanel-exploreInDiscover-bytes')[0] - ).toBeInTheDocument(); + renderFieldItem(); + await clickField('bytes'); + expect(screen.getByTestId('lnsFieldListPanel-exploreInDiscover-bytes')).toBeInTheDocument(); }); it('should not display Explore in discover button for a geo_point field', async () => { - render( - - ); - await clickFieldRtl('geo_point'); + renderFieldItem({ + field: { + name: 'geo_point', + displayName: 'geo_point', + type: 'geo_point', + aggregatable: true, + searchable: true, + }, + }); + await clickField('geo_point'); expect( screen.queryByTestId('lnsFieldListPanel-exploreInDiscover-geo_point') ).not.toBeInTheDocument(); @@ -521,9 +403,9 @@ describe('Lens Field Item', () => {
); - await clickFieldRtl('bytes'); + await clickField('bytes'); expect( - screen.getAllByTestId('lnsFieldListPanel-exploreInDiscover-bytes')[0] - ).toBeInTheDocument(); + screen.queryByTestId('lnsFieldListPanel-exploreInDiscover-bytes') + ).not.toBeInTheDocument(); }); }); From c0c5a51b253e315816c18b970b9d4e68d7e89a4a Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:46:51 +0200 Subject: [PATCH 27/92] [Lens] unskip flaky test (#190415) ## Summary Fixes https://github.com/elastic/kibana/issues/180231 --- .../apps/lens/group4/show_underlying_data_dashboard.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts index 965474919e6fae..e8d37ef426525e 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts @@ -131,6 +131,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await browser.switchToWindow(discoverWindowHandle); await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); await retry.waitFor('filter count to be correct', async () => { const filterCount = await filterBarService.getFilterCount(); From 0692302fd75633eb0769545a94f6e30ccc4dd9df Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 14 Aug 2024 09:52:10 +0200 Subject: [PATCH 28/92] [Synthetics] Use saved objects finder API to fetch objects (#190169) ## Summary Use saved objects finder API to fetch objects !! --- .../add_monitor/add_monitor_api.ts | 1 - .../bulk_cruds/add_monitor_bulk.ts | 11 +-- .../bulk_cruds/edit_monitor_bulk.ts | 9 +- .../routes/monitor_cruds/edit_monitor.ts | 1 - .../monitor_cruds/monitor_validation.ts | 6 +- .../synthetics_service/get_all_locations.ts | 8 +- .../synthetics_private_location.test.ts | 1 + .../synthetics_private_location.ts | 25 ++--- .../normalizers/common_fields.ts | 8 +- .../project_monitor_formatter.ts | 93 +++++++++++-------- .../synthetics_monitor_client.test.ts | 18 +--- .../synthetics_monitor_client.ts | 8 +- 12 files changed, 90 insertions(+), 99 deletions(-) diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts index 9362efe5f656e7..1c38e093237e18 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/add_monitor/add_monitor_api.ts @@ -81,7 +81,6 @@ export class AddEditMonitorAPI { const syncErrorsPromise = syntheticsMonitorClient.addMonitors( [{ monitor: monitorWithNamespace as MonitorFields, id: newMonitorId }], - savedObjectsClient, this.allPrivateLocations ?? [], spaceId ); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts index 8fa1b52e576e77..b6a090165382bf 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/add_monitor_bulk.ts @@ -10,7 +10,6 @@ import { SavedObjectsBulkResponse } from '@kbn/core-saved-objects-api-server'; import { v4 as uuidV4 } from 'uuid'; import { NewPackagePolicy } from '@kbn/fleet-plugin/common'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; -import { PrivateLocationAttributes } from '../../../runtime_types/private_locations'; import { SyntheticsServerSetup } from '../../../types'; import { RouteContext } from '../../types'; import { formatTelemetryEvent, sendTelemetryEvents } from '../../telemetry/monitor_upgrade_sender'; @@ -23,6 +22,7 @@ import { MonitorFields, ServiceLocationErrors, SyntheticsMonitor, + type SyntheticsPrivateLocations, } from '../../../../common/runtime_types'; export const createNewSavedObjectMonitorBulk = async ({ @@ -60,7 +60,7 @@ export const syncNewMonitorBulk = async ({ }: { routeContext: RouteContext; normalizedMonitors: SyntheticsMonitor[]; - privateLocations: PrivateLocationAttributes[]; + privateLocations: SyntheticsPrivateLocations; spaceId: string; }) => { const { server, savedObjectsClient, syntheticsMonitorClient } = routeContext; @@ -85,12 +85,7 @@ export const syncNewMonitorBulk = async ({ monitorsToCreate, soClient: savedObjectsClient, }), - syntheticsMonitorClient.addMonitors( - monitorsToCreate, - savedObjectsClient, - privateLocations, - spaceId - ), + syntheticsMonitorClient.addMonitors(monitorsToCreate, privateLocations, spaceId), ]); let failedMonitors: FailedMonitorConfig[] = []; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts index 99ab5538b3d68b..833e0203e3817b 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/bulk_cruds/edit_monitor_bulk.ts @@ -6,7 +6,6 @@ */ import { SavedObject, SavedObjectsUpdateResponse } from '@kbn/core/server'; import { SavedObjectError } from '@kbn/core-saved-objects-common'; -import { PrivateLocationAttributes } from '../../../runtime_types/private_locations'; import { RouteContext } from '../../types'; import { syntheticsMonitorType } from '../../../../common/types/saved_objects'; import { FailedPolicyUpdate } from '../../../synthetics_service/private_location/synthetics_private_location'; @@ -17,6 +16,7 @@ import { MonitorFields, SyntheticsMonitor, SyntheticsMonitorWithSecretsAttributes, + type SyntheticsPrivateLocations, } from '../../../../common/runtime_types'; import { formatTelemetryUpdateEvent, @@ -25,7 +25,7 @@ import { // Simplify return promise type and type it with runtime_types -interface MonitorConfigUpdate { +export interface MonitorConfigUpdate { normalizedMonitor: SyntheticsMonitor; monitorWithRevision: SyntheticsMonitorWithSecretsAttributes; previousMonitor: SavedObject; @@ -59,7 +59,7 @@ async function syncUpdatedMonitors({ routeContext, monitorsToUpdate, }: { - privateLocations: PrivateLocationAttributes[]; + privateLocations: SyntheticsPrivateLocations; spaceId: string; routeContext: RouteContext; monitorsToUpdate: MonitorConfigUpdate[]; @@ -78,7 +78,6 @@ async function syncUpdatedMonitors({ previousMonitor, decryptedPreviousMonitor, })), - routeContext, privateLocations, spaceId ); @@ -92,7 +91,7 @@ export const syncEditedMonitorBulk = async ({ }: { monitorsToUpdate: MonitorConfigUpdate[]; routeContext: RouteContext; - privateLocations: PrivateLocationAttributes[]; + privateLocations: SyntheticsPrivateLocations; spaceId: string; }) => { const { server } = routeContext; diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts index e48985ba30fa51..b2871f6a9accb6 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/edit_monitor.ts @@ -248,7 +248,6 @@ export const syncEditedMonitor = async ({ decryptedPreviousMonitor, }, ], - routeContext, allPrivateLocations, spaceId ); diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/monitor_validation.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/monitor_validation.ts index ab5c2c089adb62..ee4ccb7b7bf3e9 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/monitor_validation.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/monitor_cruds/monitor_validation.ts @@ -14,7 +14,6 @@ import { schema } from '@kbn/config-schema'; import { AlertConfigSchema } from '../../../common/runtime_types/monitor_management/alert_config_schema'; import { CreateMonitorPayLoad } from './add_monitor/add_monitor_api'; import { flattenAndFormatObject } from '../../synthetics_service/project_monitor/normalizers/common_fields'; -import { PrivateLocationAttributes } from '../../runtime_types/private_locations'; import { BrowserFieldsCodec, CodeEditorMode, @@ -29,6 +28,7 @@ import { ProjectMonitor, ProjectMonitorCodec, SyntheticsMonitor, + type SyntheticsPrivateLocations, TCPFieldsCodec, } from '../../../common/runtime_types'; @@ -338,7 +338,7 @@ const validateJSON = (jsonString: string | any) => { export function validateProjectMonitor( monitorFields: ProjectMonitor, publicLocations: Locations, - privateLocations: PrivateLocationAttributes[] + privateLocations: SyntheticsPrivateLocations ): ValidationResult { const locationsError = validateLocation(monitorFields, publicLocations, privateLocations); // Cast it to ICMPCodec to satisfy typing. During runtime, correct codec will be used to decode. @@ -370,7 +370,7 @@ export function validateProjectMonitor( export function validateLocation( monitorFields: ProjectMonitor, publicLocations: Locations, - privateLocations: PrivateLocationAttributes[] + privateLocations: SyntheticsPrivateLocations ) { const hasPublicLocationsConfigured = (monitorFields.locations || []).length > 0; const hasPrivateLocationsConfigured = (monitorFields.privateLocations || []).length > 0; diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_all_locations.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_all_locations.ts index d28ce4955edc99..c24b28c00ca99d 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_all_locations.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/get_all_locations.ts @@ -34,14 +34,12 @@ export async function getAllLocations({ ), getServicePublicLocations(server, syntheticsMonitorClient), ]); + const pvtLocations = toClientContract({ locations: privateLocations }, agentPolicies); return { publicLocations, - privateLocations, + privateLocations: pvtLocations, throttling, - allLocations: [ - ...publicLocations, - ...toClientContract({ locations: privateLocations }, agentPolicies), - ], + allLocations: [...publicLocations, ...pvtLocations], }; } catch (e) { server.logger.error(e); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts index 1517c2927b94db..21ed8e9021e14f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.test.ts @@ -70,6 +70,7 @@ describe('SyntheticsPrivateLocation', () => { get: jest.fn().mockReturnValue({}), buildPackagePolicyFromPackage: mockBuildPackagePolicy, bulkCreate: jest.fn(), + getByIDs: jest.fn(), }, }, spaces: { diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts index 75b3bc6d8baaa4..52bb0eefcb84e8 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/private_location/synthetics_private_location.ts @@ -21,7 +21,9 @@ import { ConfigKey, HeartbeatConfig, MonitorFields, + PrivateLocation, SourceType, + type SyntheticsPrivateLocations, } from '../../../common/runtime_types'; import { stringifyString } from '../formatters/private_formatters/formatting_utils'; import { PrivateLocationAttributes } from '../../runtime_types/private_locations'; @@ -69,7 +71,7 @@ export class SyntheticsPrivateLocation { async generateNewPolicy( config: HeartbeatConfig, - privateLocation: PrivateLocationAttributes, + privateLocation: PrivateLocation, newPolicyTemplate: NewPackagePolicy, spaceId: string, globalParams: Record, @@ -132,7 +134,7 @@ export class SyntheticsPrivateLocation { async createPackagePolicies( configs: PrivateConfig[], - privateLocations: PrivateLocationAttributes[], + privateLocations: SyntheticsPrivateLocations, spaceId: string, testRunId?: string, runOnce?: boolean @@ -253,25 +255,26 @@ export class SyntheticsPrivateLocation { async editMonitors( configs: Array<{ config: HeartbeatConfig; globalParams: Record }>, - allPrivateLocations: PrivateLocationAttributes[], + allPrivateLocations: SyntheticsPrivateLocations, spaceId: string ) { if (configs.length === 0) { return {}; } - const newPolicyTemplate = await this.buildNewPolicy(); + const [newPolicyTemplate, existingPolicies] = await Promise.all([ + this.buildNewPolicy(), + this.getExistingPolicies( + configs.map(({ config }) => config), + allPrivateLocations, + spaceId + ), + ]); const policiesToUpdate: NewPackagePolicyWithId[] = []; const policiesToCreate: NewPackagePolicyWithId[] = []; const policiesToDelete: string[] = []; - const existingPolicies = await this.getExistingPolicies( - configs.map(({ config }) => config), - allPrivateLocations, - spaceId - ); - for (const { config, globalParams } of configs) { const { locations } = config; @@ -340,7 +343,7 @@ export class SyntheticsPrivateLocation { async getExistingPolicies( configs: HeartbeatConfig[], - allPrivateLocations: PrivateLocationAttributes[], + allPrivateLocations: SyntheticsPrivateLocations, spaceId: string ) { const soClient = this.server.coreStart.savedObjects.createInternalRepository(); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts index b6e02e93b672c9..d657ad376b38d0 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/normalizers/common_fields.ts @@ -8,7 +8,6 @@ import { omit, uniqBy } from 'lodash'; import { i18n } from '@kbn/i18n'; import { isValidNamespace } from '@kbn/fleet-plugin/common'; -import { PrivateLocationAttributes } from '../../../runtime_types/private_locations'; import { formatLocation } from '../../../../common/utils/location_formatter'; import { BrowserFields, @@ -20,6 +19,7 @@ import { ScheduleUnit, SourceType, MonitorFields, + type SyntheticsPrivateLocations, } from '../../../../common/runtime_types'; import { DEFAULT_FIELDS } from '../../../../common/constants/monitor_defaults'; import { DEFAULT_COMMON_FIELDS } from '../../../../common/constants/monitor_defaults'; @@ -27,7 +27,7 @@ import { formatKibanaNamespace } from '../../formatters/private_formatters'; export interface NormalizedProjectProps { locations: Locations; - privateLocations: PrivateLocationAttributes[]; + privateLocations: SyntheticsPrivateLocations; monitor: ProjectMonitor; projectId: string; namespace: string; @@ -196,7 +196,7 @@ export const getMonitorLocations = ({ locations?: string[]; privateLocations?: string[]; }; - allPrivateLocations: PrivateLocationAttributes[]; + allPrivateLocations: SyntheticsPrivateLocations; allPublicLocations: Locations; }) => { const invalidPublicLocations: string[] = []; @@ -331,7 +331,7 @@ const getInvalidLocationError = ( invalidPublic: string[], invalidPrivate: string[], allPublicLocations: Locations, - allPrivateLocations: PrivateLocationAttributes[] + allPrivateLocations: SyntheticsPrivateLocations ) => { const availablePublicMsg = allPublicLocations.length === 0 diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts index 9a6640e066d4c9..fd59e7a0ec40ab 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/project_monitor/project_monitor_formatter.ts @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import pMap from 'p-map'; import { SavedObjectsUpdateResponse, SavedObjectsClientContract, @@ -12,15 +11,18 @@ import { } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { EncryptedSavedObjectsClient } from '@kbn/encrypted-saved-objects-plugin/server'; +import { getKqlFilter } from '../../routes/common'; import { InvalidLocationError } from './normalizers/common_fields'; -import { PrivateLocationAttributes } from '../../runtime_types/private_locations'; import { SyntheticsServerSetup } from '../../types'; import { RouteContext } from '../../routes/types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { getAllLocations } from '../get_all_locations'; import { syncNewMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/add_monitor_bulk'; import { SyntheticsMonitorClient } from '../synthetics_monitor/synthetics_monitor_client'; -import { syncEditedMonitorBulk } from '../../routes/monitor_cruds/bulk_cruds/edit_monitor_bulk'; +import { + MonitorConfigUpdate, + syncEditedMonitorBulk, +} from '../../routes/monitor_cruds/bulk_cruds/edit_monitor_bulk'; import { ConfigKey, SyntheticsMonitorWithSecretsAttributes, @@ -30,6 +32,7 @@ import { Locations, SyntheticsMonitor, MonitorFields, + type SyntheticsPrivateLocations, } from '../../../common/runtime_types'; import { formatSecrets, normalizeSecrets } from '../utils/secrets'; import { @@ -60,7 +63,7 @@ export class ProjectMonitorFormatter { private projectId: string; private spaceId: string; private publicLocations: Locations; - private privateLocations: PrivateLocationAttributes[]; + private privateLocations: SyntheticsPrivateLocations; private savedObjectsClient: SavedObjectsClientContract; private encryptedSavedObjectsClient: EncryptedSavedObjectsClient; private monitors: ProjectMonitor[] = []; @@ -183,7 +186,7 @@ export class ProjectMonitorFormatter { }: { monitor: ProjectMonitor; publicLocations: Locations; - privateLocations: PrivateLocationAttributes[]; + privateLocations: SyntheticsPrivateLocations; }) => { try { const { normalizedFields: normalizedMonitor, errors } = normalizeProjectMonitor({ @@ -333,18 +336,27 @@ export class ProjectMonitorFormatter { private getDecryptedMonitors = async ( monitors: Array> ) => { - return await pMap( - monitors, - async (monitor) => - this.encryptedSavedObjectsClient.getDecryptedAsInternalUser( - syntheticsMonitorType, - monitor.id, - { - namespace: monitor.namespaces?.[0], - } - ), - { concurrency: 500 } - ); + const configIds = monitors.map((monitor) => monitor.attributes[ConfigKey.CONFIG_ID]); + const monitorFilter = getKqlFilter({ field: ConfigKey.CONFIG_ID, values: configIds }); + const finder = + await this.encryptedSavedObjectsClient.createPointInTimeFinderDecryptedAsInternalUser( + { + search: monitorFilter, + type: syntheticsMonitorType, + perPage: 500, + namespaces: [this.spaceId], + } + ); + + const decryptedMonitors: Array> = + []; + for await (const result of finder.find()) { + decryptedMonitors.push(...result.saved_objects); + } + + finder.close().catch(() => {}); + + return decryptedMonitors; }; private updateMonitorsBulk = async ( @@ -372,29 +384,30 @@ export class ProjectMonitorFormatter { monitors.map((m) => m.previousMonitor) ); - const monitorsToUpdate = []; - - for (let i = 0; i < decryptedPreviousMonitors.length; i++) { - const decryptedPreviousMonitor = decryptedPreviousMonitors[i]; - const previousMonitor = monitors[i].previousMonitor; - const normalizedMonitor = monitors[i].monitor; - - const { - attributes: { [ConfigKey.REVISION]: _, ...normalizedPreviousMonitorAttributes }, - } = normalizeSecrets(decryptedPreviousMonitor); - - const monitorWithRevision = formatSecrets({ - ...normalizedPreviousMonitorAttributes, - ...normalizedMonitor, - revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1, - }); - monitorsToUpdate.push({ - normalizedMonitor, - previousMonitor, - monitorWithRevision, - decryptedPreviousMonitor, - }); - } + const monitorsToUpdate: MonitorConfigUpdate[] = []; + + decryptedPreviousMonitors.forEach((decryptedPreviousMonitor) => { + const monitor = monitors.find((m) => m.previousMonitor.id === decryptedPreviousMonitor.id); + if (monitor) { + const normalizedMonitor = monitor?.monitor; + const previousMonitor = monitor?.previousMonitor; + const { + attributes: { [ConfigKey.REVISION]: _, ...normalizedPrevMonitorAttr }, + } = normalizeSecrets(decryptedPreviousMonitor); + + const monitorWithRevision = formatSecrets({ + ...normalizedPrevMonitorAttr, + ...normalizedMonitor, + revision: (previousMonitor.attributes[ConfigKey.REVISION] || 0) + 1, + }); + monitorsToUpdate.push({ + normalizedMonitor, + previousMonitor, + monitorWithRevision, + decryptedPreviousMonitor, + }); + } + }); const { editedMonitors, failedConfigs } = await syncEditedMonitorBulk({ monitorsToUpdate, diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts index daba0872f3de0c..594621b3b1ab46 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import { loggerMock } from '@kbn/logging-mocks'; -import { KibanaRequest, SavedObjectsClientContract, CoreStart } from '@kbn/core/server'; +import { SavedObjectsClientContract, CoreStart } from '@kbn/core/server'; import { coreMock } from '@kbn/core/server/mocks'; import { SyntheticsMonitorClient } from './synthetics_monitor_client'; import { SyntheticsService } from '../synthetics_service'; @@ -46,7 +46,6 @@ describe('SyntheticsMonitorClient', () => { bulkUpdate: jest.fn(), get: jest.fn(), } as unknown as SavedObjectsClientContract; - const mockRequest = {} as unknown as KibanaRequest; const logger = loggerMock.create(); @@ -130,12 +129,7 @@ describe('SyntheticsMonitorClient', () => { const client = new SyntheticsMonitorClient(syntheticsService, serverMock); client.privateLocationAPI.createPackagePolicies = jest.fn(); - await client.addMonitors( - [{ monitor, id }], - savedObjectsClientMock, - privateLocations, - 'test-space' - ); + await client.addMonitors([{ monitor, id }], privateLocations, 'test-space'); expect(syntheticsService.addConfigs).toHaveBeenCalledTimes(1); expect(client.privateLocationAPI.createPackagePolicies).toHaveBeenCalledTimes(1); @@ -156,10 +150,6 @@ describe('SyntheticsMonitorClient', () => { decryptedPreviousMonitor: previousMonitor, }, ], - { - request: mockRequest, - savedObjectsClient: savedObjectsClientMock, - } as any, privateLocations, 'test-space' ); @@ -188,10 +178,6 @@ describe('SyntheticsMonitorClient', () => { decryptedPreviousMonitor: previousMonitor, }, ], - { - request: mockRequest, - savedObjectsClient: savedObjectsClientMock, - } as any, privateLocations, 'test-space' ); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts index e9fbe8f0ef3b4b..b0f9cd20211b3e 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_monitor/synthetics_monitor_client.ts @@ -6,7 +6,6 @@ */ import { SavedObject, SavedObjectsClientContract, SavedObjectsFindResult } from '@kbn/core/server'; import { EncryptedSavedObjectsPluginStart } from '@kbn/encrypted-saved-objects-plugin/server'; -import { RouteContext } from '../../routes/types'; import { SyntheticsServerSetup } from '../../types'; import { syntheticsMonitorType } from '../../../common/types/saved_objects'; import { normalizeSecrets } from '../utils'; @@ -24,6 +23,7 @@ import { ScheduleUnit, SyntheticsMonitorWithId, SyntheticsMonitorWithSecretsAttributes, + type SyntheticsPrivateLocations, } from '../../../common/runtime_types'; import { ConfigData, @@ -48,8 +48,7 @@ export class SyntheticsMonitorClient { async addMonitors( monitors: Array<{ monitor: MonitorFields; id: string }>, - savedObjectsClient: SavedObjectsClientContract, - allPrivateLocations: PrivateLocationAttributes[], + allPrivateLocations: SyntheticsPrivateLocations, spaceId: string ) { const privateConfigs: PrivateConfig[] = []; @@ -91,8 +90,7 @@ export class SyntheticsMonitorClient { id: string; decryptedPreviousMonitor: SavedObject; }>, - routeContext: RouteContext, - allPrivateLocations: PrivateLocationAttributes[], + allPrivateLocations: SyntheticsPrivateLocations, spaceId: string ) { const privateConfigs: Array<{ config: HeartbeatConfig; globalParams: Record }> = From cfa2deb90a90657a0e6531b2ab45f019e31ea1ff Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Wed, 14 Aug 2024 11:19:34 +0300 Subject: [PATCH 29/92] fix: Home > Project Settings > Integrations- Radio buttons context not coveyed through AT (#190393) Closes: https://github.com/elastic/observability-accessibility/issues/137 ## Description `Home` > `Project Settings` > `Integrations`- Radio buttons (Recommended, Elastic Agent, Beats) do not have context conveyed via screen reader ### Steps to recreate Pre-requisite: Screen reader is activated 1. Navigate to the `Serverless Observability Solution `instance. 2. Click `Project Settings` in lower Left Nav 3. Select `Integrations` 4. Keyboard navigate to the Recommended, Elastic Agent, Beats radio buttons 5. Tab through the list Expected Result: -Screen reader user understands the meaning and context of the radio button options. Actual Result: -Screen reader reads radio buttons but is not provided the context of what they relate to. ### Screens image --- .../sections/epm/components/integration_preference.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx index 4261d32b6b4b5b..629cba228b18d0 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/components/integration_preference.tsx @@ -171,10 +171,11 @@ export const IntegrationPreference = ({ )} - {title} - {title}, + }} options={radios} idSelected={idSelected} onChange={(id, value) => { From b67da823366af8370b3c7fa5dedbf570b079dbbf Mon Sep 17 00:00:00 2001 From: Luke Gmys <11671118+lgestc@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:32:00 +0200 Subject: [PATCH 30/92] [Security Solution] Remove runtime fields from sourcerer data model (#189891) ## Summary Runtime mappings should be obtained from data view spec, we are removing this field from the sourcerer model and all the uses will depend on the embedded spec from now on. --- .../security-solution/data_table/mock/mock_source.ts | 10 ---------- .../public/common/components/events_viewer/index.tsx | 5 +++-- .../public/common/mock/global_state.ts | 3 +-- .../rule_details_ui/pages/rule_details/index.tsx | 11 +++++------ .../detections/components/alerts_table/index.tsx | 9 +++++---- .../timeline_actions/use_add_bulk_to_timeline.tsx | 5 +++-- .../pages/detection_engine/detection_engine.tsx | 6 +++--- .../top_risk_score_contributors_alerts/index.tsx | 5 +++-- .../hooks/use_threat_intelligence_details.test.ts | 1 - .../left/hooks/use_threat_intelligence_details.ts | 2 +- .../shared/hooks/use_event_details.ts | 2 +- .../containers/get_sourcerer_data_view.test.ts | 1 - .../sourcerer/containers/get_sourcerer_data_view.ts | 3 +-- .../public/sourcerer/containers/index.tsx | 1 - .../public/sourcerer/containers/mocks.ts | 3 +-- .../security_solution/public/sourcerer/store/model.ts | 11 ----------- .../timelines/components/timeline/tabs/eql/index.tsx | 5 +++-- .../components/timeline/tabs/pinned/index.tsx | 5 +++-- .../components/timeline/tabs/query/index.tsx | 5 +++-- 19 files changed, 36 insertions(+), 57 deletions(-) diff --git a/x-pack/packages/security-solution/data_table/mock/mock_source.ts b/x-pack/packages/security-solution/data_table/mock/mock_source.ts index 467bbfc01dc512..2260cd7ab831b0 100644 --- a/x-pack/packages/security-solution/data_table/mock/mock_source.ts +++ b/x-pack/packages/security-solution/data_table/mock/mock_source.ts @@ -5,7 +5,6 @@ * 2.0. */ -import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { BrowserFields } from '@kbn/timelines-plugin/common'; export const mockBrowserFields: BrowserFields = { @@ -316,12 +315,3 @@ export const mockBrowserFields: BrowserFields = { }, }, }; - -export const mockRuntimeMappings: MappingRuntimeFields = { - '@a.runtime.field': { - script: { - source: 'emit("Radical dude: " + doc[\'host.name\'].value)', - }, - type: 'keyword', - }, -}; diff --git a/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx b/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx index 80d598679930fb..ea81a232cff52d 100644 --- a/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/events_viewer/index.tsx @@ -33,6 +33,7 @@ import { isEmpty } from 'lodash'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import type { EuiTheme } from '@kbn/kibana-react-plugin/common'; import type { EuiDataGridRowHeightsOptions } from '@elastic/eui'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { ALERTS_TABLE_VIEW_SELECTION_KEY } from '../../../../common/constants'; import type { Sort } from '../../../timelines/components/timeline/body/sort'; import type { @@ -179,7 +180,7 @@ const StatefulEventsViewerComponent: React.FC = ({ const { loading: listsConfigLoading, needsConfiguration: needsListsConfiguration } = useListsConfig(); - const { - sourcererDataView, - runtimeMappings, - loading: isLoadingIndexPattern, - } = useSourcererDataView(SourcererScopeName.detections); + const { sourcererDataView, loading: isLoadingIndexPattern } = useSourcererDataView( + SourcererScopeName.detections + ); const loading = userInfoLoading || listsConfigLoading; const { detailName: ruleId } = useParams<{ @@ -760,7 +759,7 @@ const RuleDetailsPageComponent: React.FC = ({ hasIndexWrite={hasIndexWrite ?? false} loading={loading} renderChildComponent={renderGroupedAlertTable} - runtimeMappings={runtimeMappings} + runtimeMappings={sourcererDataView?.runtimeFieldMap as RunTimeMappings} signalIndexName={signalIndexName} tableId={TableId.alertsOnRuleDetailsPage} to={to} diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx index b556f81523fc5a..b1fe4f939b3783 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx @@ -22,6 +22,7 @@ import { tableDefaults, TableId, } from '@kbn/securitysolution-data-table'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { useGlobalTime } from '../../../common/containers/use_global_time'; import { useLicense } from '../../../common/hooks/use_license'; import { VIEW_SELECTION } from '../../../../common/constants'; @@ -127,7 +128,7 @@ export const AlertsTableComponent: FC = ({ const { browserFields, indexPattern: indexPatterns, - runtimeMappings, + sourcererDataView, } = useSourcererDataView(sourcererScope); const license = useLicense(); @@ -284,7 +285,7 @@ export const AlertsTableComponent: FC = ({ onUpdate: onAlertTableUpdate, cellContext, onLoaded: onLoad, - runtimeMappings, + runtimeMappings: sourcererDataView?.runtimeFieldMap as RunTimeMappings, toolbarVisibility: { showColumnSelector: !isEventRenderedView, showSortSelector: !isEventRenderedView, @@ -301,10 +302,10 @@ export const AlertsTableComponent: FC = ({ finalColumns, finalBrowserFields, onAlertTableUpdate, - runtimeMappings, - isEventRenderedView, cellContext, onLoad, + sourcererDataView?.runtimeFieldMap, + isEventRenderedView, ] ); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx index 8cc2c89b766590..e0e11ad0251b51 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_add_bulk_to_timeline.tsx @@ -12,6 +12,7 @@ import type { Filter } from '@kbn/es-query'; import { getEsQueryConfig } from '@kbn/data-plugin/public'; import type { BulkActionsConfig } from '@kbn/triggers-actions-ui-plugin/public/types'; import { dataTableActions, TableId, tableDefaults } from '@kbn/securitysolution-data-table'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import type { CustomBulkAction } from '../../../../../common/types'; import { combineQueries } from '../../../../common/lib/kuery'; import { useKibana } from '../../../../common/lib/kibana'; @@ -66,8 +67,8 @@ export const useAddBulkToTimelineAction = ({ const { browserFields, dataViewId, - runtimeMappings, indexPattern, + sourcererDataView, // important to get selectedPatterns from useSourcererDataView // in order to include the exclude filters in the search that are not stored in the timeline selectedPatterns, @@ -119,7 +120,7 @@ export const useAddBulkToTimelineAction = ({ sort: timelineQuerySortField, indexNames: selectedPatterns, filterQuery, - runtimeMappings, + runtimeMappings: sourcererDataView?.runtimeFieldMap as RunTimeMappings, limit: Math.min(BULK_ADD_TO_TIMELINE_LIMIT, totalCount), timerangeKind: 'absolute', }); diff --git a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx index e43af8d02dcb05..31116f7c5ecd93 100644 --- a/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx +++ b/x-pack/plugins/security_solution/public/detections/pages/detection_engine/detection_engine.tsx @@ -33,6 +33,7 @@ import { } from '@kbn/securitysolution-data-table'; import { isEqual } from 'lodash'; import type { FilterGroupHandler } from '@kbn/alerts-ui-shared'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { DetectionEngineFilters } from '../../components/detection_engine_filters/detection_engine_filters'; import { FilterByAssigneesPopover } from '../../../common/components/filter_by_assignees_popover/filter_by_assignees_popover'; import type { AssigneesIdsSelection } from '../../../common/components/assignees/types'; @@ -152,7 +153,6 @@ const DetectionEnginePageComponent: React.FC = () const { sourcererDataView, - runtimeMappings, loading: isLoadingIndexPattern, indexPattern, } = useSourcererDataView(SourcererScopeName.detections); @@ -419,7 +419,7 @@ const DetectionEnginePageComponent: React.FC = () alertsDefaultFilters={alertsDefaultFilters} isLoadingIndexPattern={isChartPanelLoading} query={query} - runtimeMappings={runtimeMappings} + runtimeMappings={sourcererDataView?.runtimeFieldMap as RunTimeMappings} signalIndexName={signalIndexName} updateDateRangeCallback={updateDateRangeCallback} /> @@ -435,7 +435,7 @@ const DetectionEnginePageComponent: React.FC = () hasIndexWrite={hasIndexWrite ?? false} loading={isAlertTableLoading} renderChildComponent={renderAlertTable} - runtimeMappings={runtimeMappings} + runtimeMappings={sourcererDataView?.runtimeFieldMap as RunTimeMappings} signalIndexName={signalIndexName} tableId={TableId.alertsOnAlertsPage} to={to} diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx index e7c20fa2f18470..c5c534a6bc3707 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/top_risk_score_contributors_alerts/index.tsx @@ -10,6 +10,7 @@ import { TableId } from '@kbn/securitysolution-data-table'; import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; import type { Filter } from '@kbn/es-query'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { HeaderSection } from '../../../common/components/header_section'; import * as i18n from './translations'; @@ -45,7 +46,7 @@ export const TopRiskScoreContributorsAlerts: React.FC inputsSelectors.globalFiltersQuerySelector(), [] @@ -121,7 +122,7 @@ export const TopRiskScoreContributorsAlerts: React.FC { .mockReturnValue({ isAlert: true } as unknown as GetBasicDataFromDetailsData); jest.mocked(useSourcererDataView).mockReturnValue({ - runtimeMappings: {}, browserFields: {}, dataViewId: '', loading: false, diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts index cba0c25cb25ad8..15c934718981bb 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/hooks/use_threat_intelligence_details.ts @@ -71,7 +71,7 @@ export const useThreatIntelligenceDetails = (): ThreatIntelligenceDetailsResult const [isEventDataLoading, eventData] = useTimelineEventsDetails({ indexName, eventId, - runtimeMappings: sourcererDataView.runtimeMappings as RunTimeMappings, + runtimeMappings: sourcererDataView.sourcererDataView?.runtimeFieldMap as RunTimeMappings, skip: !eventId, }); diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts index a75453d4d2f4d9..b039cc9573f35b 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts +++ b/x-pack/plugins/security_solution/public/flyout/document_details/shared/hooks/use_event_details.ts @@ -87,7 +87,7 @@ export const useEventDetails = ({ useTimelineEventsDetails({ indexName: eventIndex, eventId: eventId ?? '', - runtimeMappings: sourcererDataView.runtimeMappings as RunTimeMappings, + runtimeMappings: sourcererDataView?.sourcererDataView?.runtimeFieldMap as RunTimeMappings, skip: !eventId, }); const getFieldsData = useGetFieldsData(searchHit?.fields); diff --git a/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.test.ts b/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.test.ts index fcf2e864621939..4c336233a4faf5 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.test.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.test.ts @@ -40,7 +40,6 @@ describe('getSourcererDataView', () => { runtimeFieldMap: {}, }, browserFields: {}, - runtimeMappings: {}, }); }); it('should call dataViewsService.get with the correct arguments', async () => { diff --git a/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.ts b/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.ts index a0c6a82e66c487..95a19fbb29fb42 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/containers/get_sourcerer_data_view.ts @@ -7,7 +7,7 @@ import type { DataViewsServicePublic } from '@kbn/data-views-plugin/public/types'; import { ensurePatternFormat } from '../../../common/utils/sourcerer'; -import type { SourcererDataView, RunTimeMappings } from '../store/model'; +import type { SourcererDataView } from '../store/model'; import { getDataViewStateFromIndexFields } from '../../common/containers/source/use_data_view'; export const getSourcererDataView = async ( @@ -29,6 +29,5 @@ export const getSourcererDataView = async ( dataView: dataViewData, browserFields: getDataViewStateFromIndexFields(dataViewData.id ?? '', dataViewData.fields) .browserFields, - runtimeMappings: dataViewData.runtimeFieldMap as RunTimeMappings, }; }; diff --git a/x-pack/plugins/security_solution/public/sourcerer/containers/index.tsx b/x-pack/plugins/security_solution/public/sourcerer/containers/index.tsx index a4ee0815aac975..9765a26e60b0e1 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/containers/index.tsx +++ b/x-pack/plugins/security_solution/public/sourcerer/containers/index.tsx @@ -126,7 +126,6 @@ export const useSourcererDataView = ( }, indicesExist, loading: loading || sourcererDataView.loading, - runtimeMappings: sourcererDataView.runtimeMappings, // all active & inactive patterns in DATA_VIEW patternList: sourcererDataView.title.split(','), // selected patterns in DATA_VIEW including filter diff --git a/x-pack/plugins/security_solution/public/sourcerer/containers/mocks.ts b/x-pack/plugins/security_solution/public/sourcerer/containers/mocks.ts index cdee31b50b6f3b..e3c30a0eb65214 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/containers/mocks.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/containers/mocks.ts @@ -8,7 +8,7 @@ import { mockGlobalState } from '../../common/mock'; import type { SelectedDataView } from '../store/model'; import { initSourcererScope } from '../store/model'; -import { mockBrowserFields, mockRuntimeMappings } from '../../common/containers/source/mock'; +import { mockBrowserFields } from '../../common/containers/source/mock'; export const mockPatterns = [ 'auditbeat-*', @@ -56,6 +56,5 @@ export const mockSourcererScope: SelectedDataView = { indicesExist: true, loading: false, dataViewId: mockGlobalState.sourcerer.defaultDataView.id, - runtimeMappings: mockRuntimeMappings, patternList: mockPatterns, }; diff --git a/x-pack/plugins/security_solution/public/sourcerer/store/model.ts b/x-pack/plugins/security_solution/public/sourcerer/store/model.ts index 6447eff3c1ee7c..6120b3c66cf7e0 100644 --- a/x-pack/plugins/security_solution/public/sourcerer/store/model.ts +++ b/x-pack/plugins/security_solution/public/sourcerer/store/model.ts @@ -72,12 +72,6 @@ export interface SourcererDataView extends KibanaDataView { fields: DataViewSpec['fields'] | undefined; /** set when data view fields are fetched */ loading: boolean; - /** - * @deprecated use sourcererDataView.runtimeMappings - * Needed to pass to search strategy - * Remove once issue resolved: https://github.com/elastic/kibana/issues/111762 - */ - runtimeMappings: RunTimeMappings; /** * @type DataView @kbn/data-views-plugin/common */ @@ -108,10 +102,6 @@ export interface SelectedDataView { * all active & inactive patterns from SourcererDataView['title'] */ patternList: string[]; - /** - * @deprecated use sourcererDataView.runtimeMappings - */ - runtimeMappings: SourcererDataView['runtimeMappings']; /** * @deprecated use sourcererDataView.title or sourcererDataView.matchedIndices * all selected patterns from SourcererScope['selectedPatterns'] */ @@ -165,7 +155,6 @@ export const initDataView: SourcererDataView & { id: string; error?: unknown } = fields: undefined, loading: false, patternList: [], - runtimeMappings: {}, title: '', dataView: undefined, }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx index f4c75235b76df9..e2881c8c244584 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/eql/index.tsx @@ -16,6 +16,7 @@ import type { EuiDataGridControlColumn } from '@elastic/eui'; import { DataLoadingState } from '@kbn/unified-data-table'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { useKibana } from '../../../../../common/lib/kibana'; import { DocumentDetailsLeftPanelKey, @@ -90,8 +91,8 @@ export const EqlTabContentComponent: React.FC = ({ browserFields, dataViewId, loading: loadingSourcerer, - runtimeMappings, selectedPatterns, + sourcererDataView, } = useSourcererDataView(SourcererScopeName.timeline); const { augmentedColumnHeaders, timelineQueryFieldsFromColumns } = useTimelineColumns(columns); @@ -132,7 +133,7 @@ export const EqlTabContentComponent: React.FC = ({ indexNames: selectedPatterns, language: 'eql', limit: !unifiedComponentsInTimelineDisabled ? sampleSize : itemsPerPage, - runtimeMappings, + runtimeMappings: sourcererDataView?.runtimeFieldMap as RunTimeMappings, skip: !canQueryTimeline(), startDate: start, timerangeKind, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx index fe7913aa7acd4d..43632efb3b0ebf 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/pinned/index.tsx @@ -14,6 +14,7 @@ import deepEqual from 'fast-deep-equal'; import type { EuiDataGridControlColumn } from '@elastic/eui'; import { DataLoadingState } from '@kbn/unified-data-table'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { DocumentDetailsLeftPanelKey, DocumentDetailsRightPanelKey, @@ -93,7 +94,7 @@ export const PinnedTabContentComponent: React.FC = ({ browserFields, dataViewId, loading: loadingSourcerer, - runtimeMappings, + sourcererDataView, selectedPatterns, } = useSourcererDataView(SourcererScopeName.timeline); const { setTimelineFullScreen, timelineFullScreen } = useTimelineFullScreen(); @@ -167,7 +168,7 @@ export const PinnedTabContentComponent: React.FC = ({ fields: timelineQueryFields, limit: itemsPerPage, filterQuery, - runtimeMappings, + runtimeMappings: sourcererDataView?.runtimeFieldMap as RunTimeMappings, skip: filterQuery === '', startDate: '', sort: timelineQuerySortField, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx index 823534331b7579..42463e13f24aca 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx @@ -14,6 +14,7 @@ import type { EuiDataGridControlColumn } from '@elastic/eui'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { DataLoadingState } from '@kbn/unified-data-table'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import type { RunTimeMappings } from '@kbn/timelines-plugin/common/search_strategy'; import { DocumentDetailsLeftPanelKey, DocumentDetailsRightPanelKey, @@ -101,10 +102,10 @@ export const QueryTabContentComponent: React.FC = ({ dataViewId, loading: loadingSourcerer, indexPattern, - runtimeMappings, // important to get selectedPatterns from useSourcererDataView // in order to include the exclude filters in the search that are not stored in the timeline selectedPatterns, + sourcererDataView, } = useSourcererDataView(SourcererScopeName.timeline); const { uiSettings, telemetry, timelineDataService } = useKibana().services; @@ -195,7 +196,7 @@ export const QueryTabContentComponent: React.FC = ({ indexNames: selectedPatterns, language: kqlQuery.language, limit: !unifiedComponentsInTimelineDisabled ? sampleSize : itemsPerPage, - runtimeMappings, + runtimeMappings: sourcererDataView?.runtimeFieldMap as RunTimeMappings, skip: !canQueryTimeline, sort: timelineQuerySortField, startDate: start, From ae4d522b52b2c3573c4e276bfd38ecec00d9ff96 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 14 Aug 2024 12:38:53 +0200 Subject: [PATCH 31/92] [Custom threshold] Always pass allowLeadingWildcards as true to the KQL validation in the custom threshold rule API param validation (#190031) Fixes #189072 Related #190029 ## Summary This PR updates the KQL validation on the server side by passing the Kibana leadingWildcard setting as true during validation. This means that even if this configuration is disabled in Kibana, we will still allow saving such a filter in the rule, but it will fail during rule execution. I've created a separate ticket to discuss how to apply the KQL validation correctly during API param validation. ([issue](https://github.com/elastic/kibana/issues/190029)) This fix will solve the following issues: We also have [proper validation on the UI side](https://github.com/elastic/kibana/blob/main/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/validation.tsx#L60,L64) that considers Kibana setting during validation: |Error|Leading wildcard error| |---|---| | ![image](https://github.com/user-attachments/assets/81cfaea6-c932-4184-8f2f-0d06b267a986)|![image](https://github.com/user-attachments/assets/7719813d-ee7b-4eac-b04f-69a867a6dd89)| --- ...rverless_upgrade_and_rollback_checks.test.ts.snap | 12 ++++++------ .../register_custom_threshold_rule_type.ts | 4 ++-- .../server/lib/rules/custom_threshold/utils.test.ts | 12 +++++++++++- .../server/lib/rules/custom_threshold/utils.ts | 8 ++++++-- x-pack/plugins/translations/translations/fr-FR.json | 1 - x-pack/plugins/translations/translations/ja-JP.json | 1 - x-pack/plugins/translations/translations/zh-CN.json | 1 - 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap index 932daa1fed69d5..c84a3565d48f6b 100644 --- a/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap +++ b/x-pack/plugins/alerting/server/integration_tests/__snapshots__/serverless_upgrade_and_rollback_checks.test.ts.snap @@ -5619,12 +5619,6 @@ Object { }, "name": "custom", }, - Object { - "args": Object { - "method": [Function], - }, - "name": "custom", - }, ], "type": "string", }, @@ -5639,6 +5633,12 @@ Object { }, "name": "custom", }, + Object { + "args": Object { + "method": [Function], + }, + "name": "custom", + }, ], "type": "string", }, diff --git a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts index f198a6c7079686..2fe8cbe76d2940 100644 --- a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts +++ b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/register_custom_threshold_rule_type.ts @@ -56,10 +56,10 @@ export const MetricsRulesTypeAlertDefinition: IRuleTypeAlerts { // input, output ['', undefined], ['host.name:host-0', undefined], - [':*', 'filterQuery must be a valid KQL filter'], + ]; + const dataWithError = [ + // input, output + [ + ':*', + 'filterQuery must be a valid KQL filter (error: Expected "(", NOT, end of input, field name, value, whitespace but ":" found.', + ], ]; test.each(data)('validateKQLStringFilter(%s): %o', (input: any, output: any) => { expect(validateKQLStringFilter(input)).toEqual(output); }); + + test.each(dataWithError)('validateKQLStringFilter(%s): %o', (input: any, output: any) => { + expect(validateKQLStringFilter(input)).toContain(output); + }); }); describe('getFormattedGroupBy', () => { diff --git a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts index 906c8a8a9f0a5d..74f6089af312f5 100644 --- a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts +++ b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts @@ -52,10 +52,14 @@ export const validateKQLStringFilter = (value: string) => { } try { - kbnBuildEsQuery(undefined, [{ query: value, language: 'kuery' }], []); + kbnBuildEsQuery(undefined, [{ query: value, language: 'kuery' }], [], { + allowLeadingWildcards: true, + queryStringOptions: {}, + ignoreFilterIfFieldNotInIndex: false, + }); } catch (e) { return i18n.translate('xpack.observability.customThreshold.rule.schema.invalidFilterQuery', { - defaultMessage: 'filterQuery must be a valid KQL filter', + defaultMessage: `filterQuery must be a valid KQL filter (error: ${e.message})`, }); } }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 75e7b26557a0c7..37642329d35bd9 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32674,7 +32674,6 @@ "xpack.observability.customThreshold.rule.reason.forTheLast": "durée : {duration}", "xpack.observability.customThreshold.rule.reason.group": "groupe : {group}", "xpack.observability.customThreshold.rule.reasonActionVariableDescription": "Une description concise de la raison du signalement", - "xpack.observability.customThreshold.rule.schema.invalidFilterQuery": "filterQuery doit être un filtre KQL valide", "xpack.observability.customThreshold.rule.sourceConfiguration.missingHttp": "Échec de chargement de la source : Aucun client HTTP disponible.", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureBody": "Nous n'avons pas pu appliquer les modifications à la configuration des indicateurs. Réessayez plus tard.", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureTitle": "La mise à jour de la configuration a échoué", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index fa953de2475cd2..dae805d79e18bb 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -32659,7 +32659,6 @@ "xpack.observability.customThreshold.rule.reason.forTheLast": "duration: {duration}", "xpack.observability.customThreshold.rule.reason.group": "グループ:{group}", "xpack.observability.customThreshold.rule.reasonActionVariableDescription": "アラートの理由の簡潔な説明", - "xpack.observability.customThreshold.rule.schema.invalidFilterQuery": "filterQueryは有効なKQLフィルターでなければなりません", "xpack.observability.customThreshold.rule.sourceConfiguration.missingHttp": "ソースの読み込みに失敗しました:HTTPクライアントがありません。", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureBody": "変更をメトリック構成に適用できませんでした。しばらくたってから再試行してください。", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureTitle": "構成の更新が失敗しました", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 3f9b62848c120c..9df2e11f620cc5 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -32699,7 +32699,6 @@ "xpack.observability.customThreshold.rule.reason.forTheLast": "持续时间:{duration}", "xpack.observability.customThreshold.rule.reason.group": "组:{group}", "xpack.observability.customThreshold.rule.reasonActionVariableDescription": "告警原因的简洁描述", - "xpack.observability.customThreshold.rule.schema.invalidFilterQuery": "filterQuery 必须是有效的 KQL 筛选", "xpack.observability.customThreshold.rule.sourceConfiguration.missingHttp": "无法加载源:无 HTTP 客户端可用。", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureBody": "无法对指标配置应用更改。请稍后重试。", "xpack.observability.customThreshold.rule.sourceConfiguration.updateFailureTitle": "配置更新失败", From cc29eea74f47245d7f9325d7218873115feceab0 Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:55:06 +0100 Subject: [PATCH 32/92] [Advanced Settings] Add retry for 409 conflicts in API integration tests (#189813) Fixes https://github.com/elastic/kibana/issues/176445 ## Summary Flaky test runner: https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6679 This PR fixes the advanced settings API integration tests that seem to be flaky. The reason for the occasional failures is most likely a `version_conflict_engine_exception` which is thrown when another node indexes the same documents. This can happen when we save an advanced setting since the settings API uses saved objects under the hood, and in CI, multiple nodes can try to save an advanced setting simultaneously. The solution in this PR is to retry the request if we encounter a 409 error. This is adapted from the solution in https://github.com/elastic/kibana/pull/174185 which resolves a similar failure. --- .../advanced_settings/feature_controls.ts | 35 ++++++++------ .../advanced_settings/utils/index.ts | 8 ++++ .../utils/retry_if_conflicts.ts | 46 +++++++++++++++++++ 3 files changed, 75 insertions(+), 14 deletions(-) create mode 100644 x-pack/test/api_integration/apis/management/advanced_settings/utils/index.ts create mode 100644 x-pack/test/api_integration/apis/management/advanced_settings/utils/retry_if_conflicts.ts 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 45630dac148d87..caf98ec1ece026 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 @@ -12,9 +12,11 @@ import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST, } from '@kbn/core-http-common'; import { FtrProviderContext } from '../../../ftr_provider_context'; +import { retryRequestIfConflicts } from './utils'; export default function featureControlsTests({ getService }: FtrProviderContext) { const supertestWithoutAuth = getService('supertestWithoutAuth'); + const log = getService('log'); const security = getService('security'); const spaces = getService('spaces'); const deployment = getService('deployment'); @@ -54,11 +56,14 @@ export default function featureControlsTests({ getService }: FtrProviderContext) async function saveAdvancedSetting(username: string, password: string, spaceId?: string) { const basePath = spaceId ? `/s/${spaceId}` : ''; - return await supertestWithoutAuth - .post(`${basePath}/internal/kibana/settings`) - .auth(username, password) - .set('kbn-xsrf', 'foo') - .send({ changes: { [CSV_QUOTE_VALUES_SETTING]: null } }) + const sendRequest = async () => + await supertestWithoutAuth + .post(`${basePath}/internal/kibana/settings`) + .auth(username, password) + .set('kbn-xsrf', 'foo') + .send({ changes: { [CSV_QUOTE_VALUES_SETTING]: null } }); + + return await retryRequestIfConflicts(log, 'saveAdvancedSetting', sendRequest) .then((response: any) => ({ error: undefined, response })) .catch((error: any) => ({ error, response: undefined })); } @@ -66,19 +71,21 @@ export default function featureControlsTests({ getService }: FtrProviderContext) async function saveTelemetrySetting(username: string, password: string, spaceId?: string) { const basePath = spaceId ? `/s/${spaceId}` : ''; - return await supertestWithoutAuth - .post(`${basePath}/internal/telemetry/optIn`) - .auth(username, password) - .set('kbn-xsrf', 'foo') - .set(ELASTIC_HTTP_VERSION_HEADER, '2') - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ enabled: true }) + const sendRequest = async () => + await supertestWithoutAuth + .post(`${basePath}/internal/telemetry/optIn`) + .auth(username, password) + .set('kbn-xsrf', 'foo') + .set(ELASTIC_HTTP_VERSION_HEADER, '2') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send({ enabled: true }); + + return await retryRequestIfConflicts(log, 'saveTelemetrySetting', sendRequest) .then((response: any) => ({ error: undefined, response })) .catch((error: any) => ({ error, response: undefined })); } - // Failing: See 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/advanced_settings/utils/index.ts b/x-pack/test/api_integration/apis/management/advanced_settings/utils/index.ts new file mode 100644 index 00000000000000..9d293f9058a7dd --- /dev/null +++ b/x-pack/test/api_integration/apis/management/advanced_settings/utils/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 { retryRequestIfConflicts } from './retry_if_conflicts'; diff --git a/x-pack/test/api_integration/apis/management/advanced_settings/utils/retry_if_conflicts.ts b/x-pack/test/api_integration/apis/management/advanced_settings/utils/retry_if_conflicts.ts new file mode 100644 index 00000000000000..09a07b9b7a1f11 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/advanced_settings/utils/retry_if_conflicts.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ToolingLog } from '@kbn/tooling-log'; + +// Number of times to retry when conflicts occur +const RETRY_ATTEMPTS = 2; + +// Delay between retries when conflicts occur +const RETRY_DELAY = 200; + +/* + * Retry a request if it runs into 409 Conflicts, + * up to a maximum number of attempts. + */ +export const retryRequestIfConflicts = async ( + logger: ToolingLog, + name: string, + sendRequest: () => Promise, + retries: number = RETRY_ATTEMPTS, + retryDelay: number = RETRY_DELAY +): Promise => { + const response = await sendRequest(); + if (response.statusCode !== 409) { + return response; + } + + // If no retries left, throw it + if (retries <= 0) { + logger.error(`${name} conflict, exceeded retries`); + throw new Error(`${name} conflict, exceeded retries`); + } + + // Otherwise, delay a bit before retrying + logger.debug(`${name} conflict, retrying ...`); + await waitBeforeNextRetry(retryDelay); + return await retryRequestIfConflicts(logger, name, sendRequest, retries - 1); +}; + +async function waitBeforeNextRetry(retryDelay: number): Promise { + await new Promise((resolve) => setTimeout(resolve, retryDelay)); +} From 54234a22b452c471e8055544f09acd897b7cd8a8 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 14 Aug 2024 07:14:25 -0400 Subject: [PATCH 33/92] Exclude scripts directories from CodeQL config (#190347) --- .github/codeql/codeql-config.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml index 461d850e4203c2..d21bd48caf7606 100644 --- a/.github/codeql/codeql-config.yml +++ b/.github/codeql/codeql-config.yml @@ -29,6 +29,7 @@ paths-ignore: - packages/kbn-eslint-plugin-disable - packages/kbn-eslint-plugin-eslint - packages/kbn-eslint-plugin-imports + - packages/*/scripts - packages/kbn-expect - packages/kbn-failed-test-reporter-cli - packages/kbn-find-used-node-modules @@ -70,5 +71,20 @@ paths-ignore: - packages/kbn-ts-type-check-cli - packages/kbn-web-worker-stub - packages/kbn-yarn-lock-validator + - scripts - test + - x-pack/plugins/canvas/scripts + - x-pack/plugins/cloud_security_posture/common/scripts + - x-pack/plugins/elastic_assistant/scripts + - x-pack/plugins/event_log/scripts + - x-pack/plugins/fleet/scripts + - x-pack/plugins/lists/scripts + - x-pack/plugins/lists/server/scripts + - x-pack/plugins/ml/scripts + - x-pack/plugins/observability_solution/*/scripts + - x-pack/plugins/osquery/scripts + - x-pack/plugins/rule_registry/scripts + - x-pack/plugins/security_solution/scripts + - x-pack/plugins/threat_intelligence/scripts + - x-pack/scripts - x-pack/test From c026279547a3d5b9fd14607fa7f788c28c75e2d9 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 14 Aug 2024 13:21:39 +0200 Subject: [PATCH 34/92] [ES|QL] Cleanup the filters when transitioning from dataviews to ES|QL (#190477) ## Summary Closes https://github.com/elastic/kibana/issues/190459 Clean ups the filters when moving from DataViews to ES|QL mode. ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../application/main/state_management/discover_state.test.ts | 3 +++ .../public/application/main/state_management/discover_state.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/src/plugins/discover/public/application/main/state_management/discover_state.test.ts b/src/plugins/discover/public/application/main/state_management/discover_state.test.ts index f928c6585e6313..d9acde1645fcf8 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_state.test.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_state.test.ts @@ -756,12 +756,15 @@ describe('Test discover state actions', () => { test('transitionFromDataViewToESQL', async () => { const savedSearchWithQuery = copySavedSearch(savedSearchMock); const query = { query: "foo: 'bar'", language: 'kuery' }; + const filters = [{ meta: { index: 'the-data-view-id' }, query: { match_all: {} } }]; savedSearchWithQuery.searchSource.setField('query', query); + savedSearchWithQuery.searchSource.setField('filter', filters); const { state } = await getState('/', { savedSearch: savedSearchWithQuery }); await state.actions.transitionFromDataViewToESQL(dataViewMock); expect(state.appState.getState().query).toStrictEqual({ esql: 'FROM the-data-view-title | LIMIT 10', }); + expect(state.appState.getState().filters).toStrictEqual([]); }); test('transitionFromESQLToDataView', async () => { diff --git a/src/plugins/discover/public/application/main/state_management/discover_state.ts b/src/plugins/discover/public/application/main/state_management/discover_state.ts index 2a50801a88aa44..e146c4d3d263fd 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_state.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_state.ts @@ -383,6 +383,7 @@ export function getDiscoverStateContainer({ const queryString = getInitialESQLQuery(dataView); appStateContainer.update({ query: { esql: queryString }, + filters: [], dataSource: { type: DataSourceType.Esql, }, From 2a33601c9ad29bd16e842ad038698b24bf640cda Mon Sep 17 00:00:00 2001 From: Achyut Jhunjhunwala Date: Wed, 14 Aug 2024 13:46:46 +0200 Subject: [PATCH 35/92] [Dataset Quality] Replication of dataset flyout as an independent component (#189532) ## Summary Relates to - https://github.com/elastic/kibana/issues/184572 Figma Design - https://www.figma.com/design/8WVWLeVn8mvoUm0VGgbSbB/Data-set-quality-V2?node-id=3564-73485&t=KADTdNFiiOBJ7rOS-0 **NOTE: This PR is part of a multi series PRs. Hence expect it to not do everything.** ### What are we going to do? 1. The content of the flyout, henceforth will be known as Dataset Quality Details is being copied to a component with the same name. 2. This component can be initialised as page, like in Management app or used as an individual component in a flyout in Unified Doc Viewer for example. As scope of this PR, a page in Management app has been created which will load this detailed component. A new route will be created with breadcrumb. 3. This page will co-live with the Flyout for now, accessible only via direct URL. In subsequent PR, when we remove the Flyout completely, we will change the action in Dataset Quality to instead of opening a Flyout to navigating to this new page. ### What's in this PR ? 1. As part of this change, i have created a complete new State Machine, Controller for Dataset Quality Details component which is responsible for replicating the Flyout. 2. A dedicated route registered under `/details` where this component will live at the moment. Sample URL will look like this `http://localhost:5601/pfd/app/management/data/data_quality/details?pageState=(dataStream:logs-synth.1-default,v:1)` 3. The individual components which currently load inside the flyout may be duplicated for time being. 4. Validation when no data stream provided. 5. Breadcrumb for the Management page ### What's not in this PR 1. Tests needs to be migrated, they will be done as part of the Next PR 2. Telemetry for Flyout has been removed. It will be added as part of next PR. 3. Existing Flyout code has not be removed. That needs to be removed and the old state machine needs to be meticulously cleaned. 6. Swapping the Click to Open Flyout to Page needs to be done when the above 3 are ready. ## Screenshot ### Good scenario image ### When datastream does not exist image ### When invalid state is provided by the page, it redirects to parent Dataset Quality Page ![Aug-09-2024 13-55-54](https://github.com/user-attachments/assets/ea8379c5-0642-458c-8164-f50a17818895) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/kbn-optimizer/limits.yml | 2 +- .../data_quality/common/url_schema/common.ts | 46 ++ .../dataset_quality_detils_url_schema_v1.ts | 25 + ...v1.ts => dataset_quality_url_schema_v1.ts} | 34 +- .../data_quality/common/url_schema/index.ts | 3 +- .../data_quality/public/application.tsx | 3 +- .../public/routes/dataset_quality/context.tsx | 2 +- .../public/routes/dataset_quality/index.tsx | 4 +- .../routes/dataset_quality/url_schema_v1.ts | 2 +- .../url_state_storage_service.ts | 2 +- .../dataset_quality_details/context.tsx | 121 +++++ .../routes/dataset_quality_details/index.tsx | 65 +++ .../dataset_quality_details/url_schema_v1.ts | 44 ++ .../url_state_storage_service.ts | 62 +++ .../data_quality/public/routes/index.tsx | 1 + .../public/utils/use_breadcrumbs.tsx | 22 +- .../dataset_quality/common/api_types.ts | 7 +- .../common/data_stream_details/errors.ts | 18 - .../common/data_stream_details/index.ts | 2 +- .../common/data_streams_stats/errors.ts | 17 - .../common/data_streams_stats/index.ts | 1 - .../common/data_streams_stats/types.ts | 2 - .../dataset_quality/common/errors.ts | 25 + .../dataset_quality/common/fetch_options.ts | 9 + .../dataset_quality/common/index.ts | 1 + .../dataset_quality/common/translations.ts | 211 ++++++-- .../dataset_quality/common/types/common.ts | 14 + .../dataset_quality/dataset_quality.tsx | 2 +- .../dataset_quality/table/columns.tsx | 13 +- .../table/degraded_docs_percentage_link.tsx | 4 + .../dataset_quality_details/context.ts | 20 + .../dataset_quality_details.tsx | 32 ++ .../details/dataset_summary.tsx | 95 ++++ .../details/fields_list.tsx | 54 ++ .../details/header.tsx | 18 + .../dataset_quality_details/details/index.tsx | 21 + .../details/integration_actions_menu.tsx | 206 +++++++ .../dataset_quality_details/header.tsx | 92 ++++ .../dataset_quality_details/index.tsx | 57 ++ .../index_not_found_prompt.tsx | 29 + .../overview/aggregation_not_supported.tsx | 75 +++ .../overview/degraded_fields/columns.tsx | 61 +++ .../degraded_fields/degraded_fields.tsx | 67 +++ .../overview/degraded_fields/index.ts | 8 + .../overview/degraded_fields/spark_plot.tsx | 101 ++++ .../overview/degraded_fields/table.tsx | 54 ++ .../degraded_docs}/degraded_docs_chart.tsx | 10 +- .../document_trends/degraded_docs/index.tsx | 147 +++++ .../degraded_docs}/lens_attributes.ts | 6 +- .../overview/header.tsx | 78 +++ .../overview/index.tsx | 42 ++ .../overview/summary/index.tsx | 74 +++ .../overview/summary/panel.tsx | 106 ++++ .../components/flyout/dataset_summary.tsx | 8 +- .../degraded_docs_trend/degraded_docs.tsx | 8 +- .../flyout/degraded_fields/table.tsx | 8 +- .../public/components/flyout/flyout.tsx | 7 +- .../flyout/flyout_summary/flyout_summary.tsx | 7 +- .../flyout_summary/flyout_summary_header.tsx | 2 +- .../flyout_summary/flyout_summary_kpis.tsx | 3 +- .../flyout_summary/get_summary_kpis.test.ts | 12 +- .../flyout/flyout_summary/get_summary_kpis.ts | 8 +- .../public/components/flyout/header.tsx | 14 +- .../components/flyout/integration_summary.tsx | 8 +- .../create_controller.ts | 8 +- .../controller/{ => dataset_quality}/index.ts | 0 .../lazy_create_controller.ts | 0 .../{ => dataset_quality}/public_state.ts | 4 +- .../controller/{ => dataset_quality}/types.ts | 2 +- .../create_controller.ts | 63 +++ .../dataset_quality_details/index.ts | 9 + .../lazy_create_controller.ts | 15 + .../dataset_quality_details/public_state.ts | 52 ++ .../dataset_quality_details/types.ts | 43 ++ .../dataset_quality/public/hooks/index.ts | 4 + .../use_dataset_quality_degraded_field.ts | 3 +- ...e_dataset_quality_details_redirect_link.ts | 188 +++++++ .../use_dataset_quality_details_state.ts | 135 +++++ .../hooks/use_dataset_quality_flyout.tsx | 2 +- .../hooks/use_dataset_quality_table.tsx | 2 + .../public/hooks/use_degraded_docs.ts | 189 +++++++ .../public/hooks/use_degraded_docs_chart.tsx | 2 +- .../public/hooks/use_degraded_fields.ts | 78 +++ .../public/hooks/use_integration_actions.ts | 84 +++ .../hooks/use_overview_summary_panel.ts | 77 +++ .../public/hooks/use_redirect_link.ts | 11 +- .../public/hooks/use_telemetry.tsx | 3 +- .../dataset_quality/public/plugin.tsx | 25 +- .../data_stream_details_client.ts | 39 +- .../data_streams_stats_client.ts | 46 +- .../services/data_streams_stats/types.ts | 4 +- .../state_machines/common/notifications.ts | 18 + .../src/notifications.ts | 36 +- .../src/state_machine.ts | 46 +- .../dataset_quality_controller/src/types.ts | 31 +- .../defaults.ts | 32 ++ .../index.ts | 11 + .../notifications.ts | 61 +++ .../state_machine.ts | 504 ++++++++++++++++++ .../types.ts | 151 ++++++ .../dataset_quality/public/types.ts | 6 +- .../get_data_stream_details/index.ts | 10 +- .../server/services/data_stream.ts | 27 - .../dataset_quality/tsconfig.json | 4 +- .../logs_explorer_controller/src/types.ts | 2 - .../translations/translations/fr-FR.json | 31 +- .../translations/translations/ja-JP.json | 29 - .../translations/translations/zh-CN.json | 29 - .../data_streams/data_stream_settings.spec.ts | 11 +- .../data_stream_settings.ts | 8 +- 110 files changed, 3960 insertions(+), 477 deletions(-) create mode 100644 x-pack/plugins/data_quality/common/url_schema/dataset_quality_detils_url_schema_v1.ts rename x-pack/plugins/data_quality/common/url_schema/{url_schema_v1.ts => dataset_quality_url_schema_v1.ts} (73%) create mode 100644 x-pack/plugins/data_quality/public/routes/dataset_quality_details/context.tsx create mode 100644 x-pack/plugins/data_quality/public/routes/dataset_quality_details/index.tsx create mode 100644 x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts create mode 100644 x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts delete mode 100644 x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/errors.ts delete mode 100644 x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/errors.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/common/errors.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/context.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/dataset_summary.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/fields_list.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/header.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/index.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/integration_actions_menu.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/header.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index_not_found_prompt.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/aggregation_not_supported.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/spark_plot.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx rename x-pack/plugins/observability_solution/dataset_quality/public/components/{flyout/degraded_docs_trend => dataset_quality_details/overview/document_trends/degraded_docs}/degraded_docs_chart.tsx (89%) create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx rename x-pack/plugins/observability_solution/dataset_quality/public/components/{flyout/degraded_docs_trend => dataset_quality_details/overview/document_trends/degraded_docs}/lens_attributes.ts (97%) create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/header.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/index.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx rename x-pack/plugins/observability_solution/dataset_quality/public/controller/{ => dataset_quality}/create_controller.ts (88%) rename x-pack/plugins/observability_solution/dataset_quality/public/controller/{ => dataset_quality}/index.ts (100%) rename x-pack/plugins/observability_solution/dataset_quality/public/controller/{ => dataset_quality}/lazy_create_controller.ts (100%) rename x-pack/plugins/observability_solution/dataset_quality/public/controller/{ => dataset_quality}/public_state.ts (96%) rename x-pack/plugins/observability_solution/dataset_quality/public/controller/{ => dataset_quality}/types.ts (96%) create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/create_controller.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/index.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/lazy_create_controller.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/public_state.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/types.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_redirect_link.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_state.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_fields.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_integration_actions.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_overview_summary_panel.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/common/notifications.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/index.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/notifications.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts create mode 100644 x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 0356fb4fd65413..a33156e3769721 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -28,7 +28,7 @@ pageLoadAssetSize: dashboardEnhanced: 65646 data: 454087 dataQuality: 19384 - datasetQuality: 50624 + datasetQuality: 52000 dataViewEditor: 28082 dataViewFieldEditor: 42021 dataViewManagement: 5300 diff --git a/x-pack/plugins/data_quality/common/url_schema/common.ts b/x-pack/plugins/data_quality/common/url_schema/common.ts index cf7998f4a1a543..d184fbffe475e7 100644 --- a/x-pack/plugins/data_quality/common/url_schema/common.ts +++ b/x-pack/plugins/data_quality/common/url_schema/common.ts @@ -5,4 +5,50 @@ * 2.0. */ +import * as rt from 'io-ts'; + export const DATA_QUALITY_URL_STATE_KEY = 'pageState'; + +export const directionRT = rt.keyof({ + asc: null, + desc: null, +}); + +export const sortRT = rt.strict({ + field: rt.string, + direction: directionRT, +}); + +export const tableRT = rt.exact( + rt.partial({ + page: rt.number, + rowsPerPage: rt.number, + sort: sortRT, + }) +); + +export const timeRangeRT = rt.strict({ + from: rt.string, + to: rt.string, + refresh: rt.strict({ + pause: rt.boolean, + value: rt.number, + }), +}); + +export const degradedFieldRT = rt.exact( + rt.partial({ + table: tableRT, + }) +); + +export const dataStreamRT = new rt.Type( + 'dataStreamRT', + (input: unknown): input is string => + typeof input === 'string' && (input.match(/-/g) || []).length === 2, + (input, context) => + typeof input === 'string' && (input.match(/-/g) || []).length === 2 + ? rt.success(input) + : rt.failure(input, context), + rt.identity +); diff --git a/x-pack/plugins/data_quality/common/url_schema/dataset_quality_detils_url_schema_v1.ts b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_detils_url_schema_v1.ts new file mode 100644 index 00000000000000..cc92663ff31e9a --- /dev/null +++ b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_detils_url_schema_v1.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 * as rt from 'io-ts'; +import { dataStreamRT, degradedFieldRT, timeRangeRT } from './common'; + +export const urlSchemaRT = rt.exact( + rt.intersection([ + rt.type({ + dataStream: dataStreamRT, + }), + rt.partial({ + v: rt.literal(1), + timeRange: timeRangeRT, + breakdownField: rt.string, + degradedFields: degradedFieldRT, + }), + ]) +); + +export type UrlSchema = rt.TypeOf; diff --git a/x-pack/plugins/data_quality/common/url_schema/url_schema_v1.ts b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts similarity index 73% rename from x-pack/plugins/data_quality/common/url_schema/url_schema_v1.ts rename to x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts index 076e1b641b7e27..78c4faeca8cd84 100644 --- a/x-pack/plugins/data_quality/common/url_schema/url_schema_v1.ts +++ b/x-pack/plugins/data_quality/common/url_schema/dataset_quality_url_schema_v1.ts @@ -6,24 +6,7 @@ */ import * as rt from 'io-ts'; - -export const directionRT = rt.keyof({ - asc: null, - desc: null, -}); - -export const sortRT = rt.strict({ - field: rt.string, - direction: directionRT, -}); - -export const tableRT = rt.exact( - rt.partial({ - page: rt.number, - rowsPerPage: rt.number, - sort: sortRT, - }) -); +import { degradedFieldRT, tableRT, timeRangeRT } from './common'; const integrationRT = rt.strict({ name: rt.string, @@ -46,21 +29,6 @@ const datasetRT = rt.intersection([ ), ]); -const timeRangeRT = rt.strict({ - from: rt.string, - to: rt.string, - refresh: rt.strict({ - pause: rt.boolean, - value: rt.number, - }), -}); - -const degradedFieldRT = rt.exact( - rt.partial({ - table: tableRT, - }) -); - export const flyoutRT = rt.exact( rt.partial({ dataset: datasetRT, diff --git a/x-pack/plugins/data_quality/common/url_schema/index.ts b/x-pack/plugins/data_quality/common/url_schema/index.ts index d3b092e0b0ac83..0af03b6d503f5c 100644 --- a/x-pack/plugins/data_quality/common/url_schema/index.ts +++ b/x-pack/plugins/data_quality/common/url_schema/index.ts @@ -6,4 +6,5 @@ */ export { DATA_QUALITY_URL_STATE_KEY } from './common'; -export * as datasetQualityUrlSchemaV1 from './url_schema_v1'; +export * as datasetQualityUrlSchemaV1 from './dataset_quality_url_schema_v1'; +export * as datasetQualityDetailsUrlSchemaV1 from './dataset_quality_detils_url_schema_v1'; diff --git a/x-pack/plugins/data_quality/public/application.tsx b/x-pack/plugins/data_quality/public/application.tsx index 1c54e1d6003a8b..de4c6ba524a08e 100644 --- a/x-pack/plugins/data_quality/public/application.tsx +++ b/x-pack/plugins/data_quality/public/application.tsx @@ -16,7 +16,7 @@ import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; import { KbnUrlStateStorageFromRouterProvider } from './utils/kbn_url_state_context'; import { useKibanaContextForPluginProvider } from './utils/use_kibana'; import { AppPluginStartDependencies, DataQualityPluginStart } from './types'; -import { DatasetQualityRoute } from './routes'; +import { DatasetQualityRoute, DatasetQualityDetailsRoute } from './routes'; import { PLUGIN_ID } from '../common'; export const renderApp = ( @@ -55,6 +55,7 @@ const AppWithExecutionContext = ({ } /> + } /> diff --git a/x-pack/plugins/data_quality/public/routes/dataset_quality/context.tsx b/x-pack/plugins/data_quality/public/routes/dataset_quality/context.tsx index 8c80ea91daedd2..ddd3227fa1a2b1 100644 --- a/x-pack/plugins/data_quality/public/routes/dataset_quality/context.tsx +++ b/x-pack/plugins/data_quality/public/routes/dataset_quality/context.tsx @@ -7,7 +7,7 @@ import { IToasts } from '@kbn/core-notifications-browser'; import { DatasetQualityPluginStart } from '@kbn/dataset-quality-plugin/public'; -import { DatasetQualityController } from '@kbn/dataset-quality-plugin/public/controller'; +import { DatasetQualityController } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality'; import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import React, { createContext, useContext, useEffect, useState } from 'react'; import { diff --git a/x-pack/plugins/data_quality/public/routes/dataset_quality/index.tsx b/x-pack/plugins/data_quality/public/routes/dataset_quality/index.tsx index 346c72cfdefb38..7ef7c17669e3db 100644 --- a/x-pack/plugins/data_quality/public/routes/dataset_quality/index.tsx +++ b/x-pack/plugins/data_quality/public/routes/dataset_quality/index.tsx @@ -6,7 +6,7 @@ */ import { EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; -import { DatasetQualityController } from '@kbn/dataset-quality-plugin/public/controller'; +import type { DatasetQualityController } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality'; import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { PLUGIN_NAME } from '../../../common'; @@ -21,7 +21,7 @@ export const DatasetQualityRoute = () => { services: { chrome, datasetQuality, notifications, appParams }, } = useKibanaContextForPlugin(); - useBreadcrumbs(PLUGIN_NAME, appParams, chrome); + useBreadcrumbs([{ text: PLUGIN_NAME }], appParams, chrome); return ( ({}); + +interface ContextProps { + children: JSX.Element; + urlStateStorageContainer: IKbnUrlStateStorage; + toastsService: IToasts; + datasetQuality: DatasetQualityPluginStart; +} + +export function DatasetQualityDetailsContextProvider({ + children, + urlStateStorageContainer, + toastsService, + datasetQuality, +}: ContextProps) { + const [controller, setController] = useState(); + const history = useHistory(); + const { + services: { + chrome, + appParams, + application: { navigateToApp }, + }, + } = useKibanaContextForPlugin(); + const rootBreadCrumb = useMemo( + () => ({ + text: PLUGIN_NAME, + onClick: () => navigateToApp('management', { path: `/data/${PLUGIN_ID}` }), + }), + [navigateToApp] + ); + const [breadcrumbs, setBreadcrumbs] = useState([rootBreadCrumb]); + + useEffect(() => { + async function getDatasetQualityDetailsController() { + const initialState = getDatasetQualityDetailsStateFromUrl({ + urlStateStorageContainer, + toastsService, + }); + + // state initialization is under progress + if (initialState === undefined) { + return; + } + + // state initialized but empty + if (initialState === null) { + history.push('/'); + return; + } + + const datasetQualityDetailsController = + await datasetQuality.createDatasetQualityDetailsController({ + initialState, + }); + datasetQualityDetailsController.service.start(); + + setController(datasetQualityDetailsController); + + const datasetQualityStateSubscription = datasetQualityDetailsController.state$.subscribe( + (state) => { + updateUrlFromDatasetQualityDetailsState({ + urlStateStorageContainer, + datasetQualityDetailsState: state, + }); + const breadcrumbValue = getBreadcrumbValue(state.dataStream, state.integration); + setBreadcrumbs([rootBreadCrumb, { text: breadcrumbValue }]); + } + ); + + return () => { + datasetQualityDetailsController.service.stop(); + datasetQualityStateSubscription.unsubscribe(); + }; + } + + getDatasetQualityDetailsController(); + }, [datasetQuality, history, rootBreadCrumb, toastsService, urlStateStorageContainer]); + + useBreadcrumbs(breadcrumbs, appParams, chrome); + + return ( + + {children} + + ); +} + +export const useDatasetQualityDetailsContext = () => { + const context = useContext(DatasetQualityDetailsContext); + if (context === undefined) { + throw new Error( + 'useDatasetQualityDetailContext must be used within a ' + ); + } + return context; +}; diff --git a/x-pack/plugins/data_quality/public/routes/dataset_quality_details/index.tsx b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/index.tsx new file mode 100644 index 00000000000000..956f3795235229 --- /dev/null +++ b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/index.tsx @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; +import type { DatasetQualityDetailsController } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality_details'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { useKbnUrlStateStorageFromRouterContext } from '../../utils/kbn_url_state_context'; +import { useKibanaContextForPlugin } from '../../utils/use_kibana'; +import { DatasetQualityDetailsContextProvider, useDatasetQualityDetailsContext } from './context'; + +export const DatasetQualityDetailsRoute = () => { + const urlStateStorageContainer = useKbnUrlStateStorageFromRouterContext(); + const { + services: { datasetQuality, notifications }, + } = useKibanaContextForPlugin(); + + return ( + + + + ); +}; + +const ConnectedContent = React.memo(() => { + const { controller } = useDatasetQualityDetailsContext(); + + return controller ? ( + + ) : ( + <> + } + title={ + + } + /> + + ); +}); + +const InitializedContent = React.memo( + ({ + datasetQualityDetailsController, + }: { + datasetQualityDetailsController: DatasetQualityDetailsController; + }) => { + const { + services: { datasetQuality }, + } = useKibanaContextForPlugin(); + + return ; + } +); diff --git a/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts new file mode 100644 index 00000000000000..b97d1bb9100eb4 --- /dev/null +++ b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_schema_v1.ts @@ -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 { DatasetQualityDetailsPublicStateUpdate } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality_details'; +import * as rt from 'io-ts'; +import { deepCompactObject } from '../../../common/utils/deep_compact_object'; +import { datasetQualityDetailsUrlSchemaV1 } from '../../../common/url_schema'; + +export const getStateFromUrlValue = ( + urlValue: datasetQualityDetailsUrlSchemaV1.UrlSchema +): DatasetQualityDetailsPublicStateUpdate => + deepCompactObject({ + dataStream: urlValue.dataStream, + timeRange: urlValue.timeRange, + degradedFields: urlValue.degradedFields, + }); + +export const getUrlValueFromState = ( + state: DatasetQualityDetailsPublicStateUpdate +): datasetQualityDetailsUrlSchemaV1.UrlSchema => + deepCompactObject({ + dataStream: state.dataStream, + timeRange: state.timeRange, + degradedFields: state.degradedFields, + v: 1, + }); + +const stateFromUrlSchemaRT = new rt.Type< + DatasetQualityDetailsPublicStateUpdate, + datasetQualityDetailsUrlSchemaV1.UrlSchema, + datasetQualityDetailsUrlSchemaV1.UrlSchema +>( + 'stateFromUrlSchemaRT', + rt.never.is, + (urlSchema, _context) => rt.success(getStateFromUrlValue(urlSchema)), + getUrlValueFromState +); + +export const stateFromUntrustedUrlRT = + datasetQualityDetailsUrlSchemaV1.urlSchemaRT.pipe(stateFromUrlSchemaRT); diff --git a/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts new file mode 100644 index 00000000000000..1a71ee6cc33edc --- /dev/null +++ b/x-pack/plugins/data_quality/public/routes/dataset_quality_details/url_state_storage_service.ts @@ -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 { IToasts } from '@kbn/core-notifications-browser'; +import { DatasetQualityDetailsPublicState } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality_details'; +import { createPlainError, formatErrors } from '@kbn/io-ts-utils'; +import { IKbnUrlStateStorage, withNotifyOnErrors } from '@kbn/kibana-utils-plugin/public'; +import * as Either from 'fp-ts/lib/Either'; +import { DatasetQualityDetailsPublicStateUpdate } from '@kbn/dataset-quality-plugin/public/controller/dataset_quality_details'; +import * as rt from 'io-ts'; +import { DATA_QUALITY_URL_STATE_KEY } from '../../../common/url_schema'; +import * as urlSchemaV1 from './url_schema_v1'; + +export const updateUrlFromDatasetQualityDetailsState = ({ + urlStateStorageContainer, + datasetQualityDetailsState, +}: { + urlStateStorageContainer: IKbnUrlStateStorage; + datasetQualityDetailsState?: DatasetQualityDetailsPublicState; +}) => { + if (!datasetQualityDetailsState) { + return; + } + + const encodedUrlStateValues = urlSchemaV1.stateFromUntrustedUrlRT.encode( + datasetQualityDetailsState + ); + + urlStateStorageContainer.set(DATA_QUALITY_URL_STATE_KEY, encodedUrlStateValues, { + replace: true, + }); +}; + +/* + * This function is used to get the dataset quality details state from the URL. + * It will return `null` if the URL state is not present or `undefined` if the URL state is present but invalid. + */ +export const getDatasetQualityDetailsStateFromUrl = ({ + toastsService, + urlStateStorageContainer, +}: { + toastsService: IToasts; + urlStateStorageContainer: IKbnUrlStateStorage; +}): DatasetQualityDetailsPublicStateUpdate | undefined | null => { + const urlStateValues = + urlStateStorageContainer.get(DATA_QUALITY_URL_STATE_KEY) ?? undefined; + + const stateValuesE = rt + .union([rt.undefined, urlSchemaV1.stateFromUntrustedUrlRT]) + .decode(urlStateValues); + + if (Either.isLeft(stateValuesE)) { + withNotifyOnErrors(toastsService).onGetError(createPlainError(formatErrors(stateValuesE.left))); + return undefined; + } else { + return stateValuesE.right ?? null; + } +}; diff --git a/x-pack/plugins/data_quality/public/routes/index.tsx b/x-pack/plugins/data_quality/public/routes/index.tsx index 1a8591d0d3c865..eb8f99aa65ebfb 100644 --- a/x-pack/plugins/data_quality/public/routes/index.tsx +++ b/x-pack/plugins/data_quality/public/routes/index.tsx @@ -6,3 +6,4 @@ */ export * from './dataset_quality'; +export * from './dataset_quality_details'; diff --git a/x-pack/plugins/data_quality/public/utils/use_breadcrumbs.tsx b/x-pack/plugins/data_quality/public/utils/use_breadcrumbs.tsx index 3bf83bcf03352f..b4e6144f3fbac2 100644 --- a/x-pack/plugins/data_quality/public/utils/use_breadcrumbs.tsx +++ b/x-pack/plugins/data_quality/public/utils/use_breadcrumbs.tsx @@ -5,21 +5,31 @@ * 2.0. */ -import type { ChromeStart } from '@kbn/core-chrome-browser'; +import type { ChromeBreadcrumb, ChromeStart } from '@kbn/core-chrome-browser'; -import { ManagementAppMountParams } from '@kbn/management-plugin/public'; import { useEffect } from 'react'; +import { ManagementAppMountParams } from '@kbn/management-plugin/public'; +import { Integration } from '@kbn/dataset-quality-plugin/common/data_streams_stats/integration'; +import { indexNameToDataStreamParts } from '@kbn/dataset-quality-plugin/common'; export const useBreadcrumbs = ( - breadcrumb: string, + breadcrumbs: ChromeBreadcrumb[], params: ManagementAppMountParams, chromeService: ChromeStart ) => { const { docTitle } = chromeService; + const isMultiple = breadcrumbs.length > 1; + + const docTitleValue = isMultiple ? breadcrumbs[breadcrumbs.length - 1].text : breadcrumbs[0].text; - docTitle.change(breadcrumb); + docTitle.change(docTitleValue as string); useEffect(() => { - params.setBreadcrumbs([{ text: breadcrumb }]); - }, [breadcrumb, params]); + params.setBreadcrumbs(breadcrumbs); + }, [breadcrumbs, params]); +}; + +export const getBreadcrumbValue = (dataStream: string, integration?: Integration) => { + const { dataset } = indexNameToDataStreamParts(dataStream); + return integration?.datasets?.[dataset] || dataset; }; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/api_types.ts b/x-pack/plugins/observability_solution/dataset_quality/common/api_types.ts index a88b2d531b9bc7..f6ba40b8b8bcfa 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/api_types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/api_types.ts @@ -37,15 +37,15 @@ export const dataStreamStatRt = rt.intersection([ export type DataStreamStat = rt.TypeOf; -export const dashboardRT = rt.type({ +export const integrationDashboardRT = rt.type({ id: rt.string, title: rt.string, }); -export type Dashboard = rt.TypeOf; +export type Dashboard = rt.TypeOf; export const integrationDashboardsRT = rt.type({ - dashboards: rt.array(dashboardRT), + dashboards: rt.array(integrationDashboardRT), }); export type IntegrationDashboardsResponse = rt.TypeOf; @@ -116,6 +116,7 @@ export type DegradedFieldResponse = rt.TypeOf; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/errors.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/errors.ts deleted file mode 100644 index eb74f08ab1336c..00000000000000 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/errors.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export class GetDataStreamsDetailsError extends Error { - readonly statusCode?: number; - - constructor(message: string, statusCode?: number) { - super(message); - Object.setPrototypeOf(this, new.target.prototype); - this.name = 'GetDataStreamsDetailsError'; - - this.statusCode = statusCode; - } -} diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/index.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/index.ts index 8761ef1b52a32f..6cc0ccaa93a6d1 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/data_stream_details/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export * from './errors'; +export * from './types'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/errors.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/errors.ts deleted file mode 100644 index aa68ed0b5972f9..00000000000000 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/errors.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -export class GetDataStreamsStatsError extends Error { - readonly statusCode?: number; - - constructor(message: string, statusCode?: number) { - super(message); - Object.setPrototypeOf(this, new.target.prototype); - this.name = 'GetDataStreamsStatsError'; - this.statusCode = statusCode; - } -} diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/index.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/index.ts index 28c7b0a8c274f4..6cc0ccaa93a6d1 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/index.ts @@ -6,4 +6,3 @@ */ export * from './types'; -export * from './errors'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts index 9fe23f6ceef6ff..1963c73d263e70 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/data_streams_stats/types.ts @@ -61,8 +61,6 @@ export type GetDataStreamDetailsResponse = export type GetNonAggregatableDataStreamsParams = APIClientRequestParamsOf<`GET /internal/dataset_quality/data_streams/non_aggregatable`>['params']['query']; -export type GetNonAggregatableDataStreamsResponse = - APIReturnType<`GET /internal/dataset_quality/data_streams/non_aggregatable`>; export type GetIntegrationDashboardsParams = APIClientRequestParamsOf<`GET /internal/dataset_quality/integrations/{integration}/dashboards`>['params']['path']; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/errors.ts b/x-pack/plugins/observability_solution/dataset_quality/common/errors.ts new file mode 100644 index 00000000000000..aecca58aebb5cf --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/common/errors.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 { ApiErrorResponse } from './fetch_options'; + +export class DatasetQualityError extends Error { + readonly statusCode?: number; + readonly originalMessage?: string; + + constructor(message: string, originalError?: ApiErrorResponse) { + super(message); + Object.setPrototypeOf(this, new.target.prototype); + this.name = 'DatasetQualityError'; + + if (originalError && originalError.body) { + const { statusCode, message: originalMessage } = originalError.body; + this.statusCode = statusCode; + this.originalMessage = originalMessage; + } + } +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/fetch_options.ts b/x-pack/plugins/observability_solution/dataset_quality/common/fetch_options.ts index 3a72a72762dee9..14da6902ce95c8 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/fetch_options.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/fetch_options.ts @@ -12,3 +12,12 @@ export type FetchOptions = Omit & { method?: string; body?: any; }; + +export interface ApiErrorResponse { + body: { + statusCode: number; + error: string; + message: string; + attributes: object; + }; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/index.ts b/x-pack/plugins/observability_solution/dataset_quality/common/index.ts index b015815eeaacc0..a4cb63ef339bb4 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/index.ts @@ -8,3 +8,4 @@ export type { DatasetQualityConfig } from './plugin_config'; export type { FetchOptions } from './fetch_options'; export type { APIClientRequestParamsOf, APIReturnType } from './rest'; +export { indexNameToDataStreamParts } from './utils'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/translations.ts b/x-pack/plugins/observability_solution/dataset_quality/common/translations.ts index 6ab0fde0f033d8..959932bd0c5acf 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/translations.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/translations.ts @@ -43,15 +43,15 @@ export const flyoutCancelText = i18n.translate('xpack.datasetQuality.flyoutCance defaultMessage: 'Cancel', }); -export const flyoutOpenInLogsExplorerText = i18n.translate( - 'xpack.datasetQuality.flyoutOpenInLogsExplorerText', +export const openInLogsExplorerText = i18n.translate( + 'xpack.datasetQuality.details.openInLogsExplorerText', { defaultMessage: 'Open in Logs Explorer', } ); -export const flyoutOpenInDiscoverText = i18n.translate( - 'xpack.datasetQuality.flyoutOpenInDiscoverText', +export const openInDiscoverText = i18n.translate( + 'xpack.datasetQuality.details.openInDiscoverText', { defaultMessage: 'Open in Discover', } @@ -64,20 +64,6 @@ export const flyoutDatasetDetailsText = i18n.translate( } ); -export const flyoutDatasetLastActivityText = i18n.translate( - 'xpack.datasetQuality.flyoutDatasetLastActivityText', - { - defaultMessage: 'Last Activity', - } -); - -export const flyoutDatasetCreatedOnText = i18n.translate( - 'xpack.datasetQuality.flyoutDatasetCreatedOnText', - { - defaultMessage: 'Created on', - } -); - export const flyoutIntegrationDetailsText = i18n.translate( 'xpack.datasetQuality.flyoutIntegrationDetailsText', { @@ -85,13 +71,6 @@ export const flyoutIntegrationDetailsText = i18n.translate( } ); -export const flyoutIntegrationVersionText = i18n.translate( - 'xpack.datasetQuality.flyoutIntegrationVersionText', - { - defaultMessage: 'Version', - } -); - export const flyoutIntegrationNameText = i18n.translate( 'xpack.datasetQuality.flyoutIntegrationNameText', { @@ -103,7 +82,7 @@ export const flyoutSummaryText = i18n.translate('xpack.datasetQuality.flyoutSumm defaultMessage: 'Summary', }); -export const flyoutDegradedDocsText = i18n.translate( +export const overviewDegradedDocsText = i18n.translate( 'xpack.datasetQuality.flyout.degradedDocsTitle', { defaultMessage: 'Degraded docs', @@ -147,34 +126,6 @@ export const flyoutHostsText = i18n.translate('xpack.datasetQuality.flyoutHostsT export const flyoutShowAllText = i18n.translate('xpack.datasetQuality.flyoutShowAllText', { defaultMessage: 'Show all', }); - -export const flyoutImprovementText = i18n.translate( - 'xpack.datasetQuality.flyoutDegradedFieldsSectionTitle', - { - defaultMessage: 'Degraded fields', - } -); - -export const flyoutImprovementTooltip = i18n.translate( - 'xpack.datasetQuality.flyoutDegradedFieldsSectionTooltip', - { - defaultMessage: 'A partial list of degraded fields found in your data set.', - } -); - -export const flyoutDegradedFieldsTableLoadingText = i18n.translate( - 'xpack.datasetQuality.flyoutDegradedFieldsTableLoadingText', - { - defaultMessage: 'Loading degraded fields', - } -); - -export const flyoutDegradedFieldsTableNoData = i18n.translate( - 'xpack.datasetQuality.flyoutDegradedFieldsTableNoData', - { - defaultMessage: 'No degraded fields found', - } -); /* Summary Panel */ @@ -271,3 +222,155 @@ export const fullDatasetNameDescription = i18n.translate( defaultMessage: 'Turn on to show the actual data set names used to store the documents.', } ); + +export const flyoutImprovementText = i18n.translate( + 'xpack.datasetQuality.flyoutDegradedFieldsSectionTitle', + { + defaultMessage: 'Degraded fields', + } +); + +export const flyoutImprovementTooltip = i18n.translate( + 'xpack.datasetQuality.flyoutDegradedFieldsSectionTooltip', + { + defaultMessage: 'A partial list of degraded fields found in your data set.', + } +); + +/* +Dataset Quality Details +*/ + +export const overviewHeaderTitle = i18n.translate('xpack.datasetQuality.details.overviewTitle', { + defaultMessage: 'Overview', +}); + +export const overviewTitleTooltip = i18n.translate( + 'xpack.datasetQuality.details.overviewTitleTooltip', + { + defaultMessage: 'Stats of the data set within the selected time range.', + } +); + +export const overviewPanelTitleDocuments = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.documents.title', + { + defaultMessage: 'Documents', + } +); + +export const overviewPanelDocumentsIndicatorTotalCount = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.documents.totalCount', + { + defaultMessage: 'Total count', + } +); + +export const overviewPanelDocumentsIndicatorSize = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.documents.size', + { + defaultMessage: 'Size', + } +); + +export const overviewPanelTitleResources = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.resources.title', + { + defaultMessage: 'Resources', + } +); + +export const overviewPanelResourcesIndicatorServices = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.resources.services', + { + defaultMessage: 'Services', + } +); + +export const overviewPanelResourcesIndicatorSize = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.resources.hosts', + { + defaultMessage: 'Hosts', + } +); + +export const overviewPanelTitleDatasetQuality = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.datasetQuality.title', + { + defaultMessage: 'Data set quality', + } +); + +export const overviewPanelDatasetQualityIndicatorDegradedDocs = i18n.translate( + 'xpack.datasetQuality.details.overviewPanel.datasetQuality.degradedDocs', + { + defaultMessage: 'Degraded docs', + } +); + +export const overviewDegradedFieldsTableLoadingText = i18n.translate( + 'xpack.datasetQuality.details.degradedFieldsTableLoadingText', + { + defaultMessage: 'Loading degraded fields', + } +); + +export const overviewDegradedFieldsTableNoData = i18n.translate( + 'xpack.datasetQuality.details.degradedFieldsTableNoData', + { + defaultMessage: 'No degraded fields found', + } +); + +export const overviewDegradedFieldsSectionTitle = i18n.translate( + 'xpack.datasetQuality.detail.degradedFieldsSectionTitle', + { + defaultMessage: 'Quality issues', + } +); + +export const overviewDegradedFieldsSectionTitleTooltip = i18n.translate( + 'xpack.datasetQuality.details.degradedFieldsSectionTooltip', + { + defaultMessage: 'A partial list of quality issues found in your data set.', + } +); + +export const overviewQualityIssuesAccordionTechPreviewBadge = i18n.translate( + 'xpack.datasetQuality.details.overviewQualityIssuesAccordionTechPreviewBadge', + { + defaultMessage: 'TECH PREVIEW', + } +); + +export const detailsHeaderTitle = i18n.translate('xpack.datasetQuality.details.detailsTitle', { + defaultMessage: 'Details', +}); + +export const datasetLastActivityText = i18n.translate( + 'xpack.datasetQuality.details.datasetLastActivityText', + { + defaultMessage: 'Last Activity', + } +); + +export const datasetCreatedOnText = i18n.translate( + 'xpack.datasetQuality.details.datasetCreatedOnText', + { + defaultMessage: 'Created on', + } +); + +export const integrationNameText = i18n.translate( + 'xpack.datasetQuality.details.integrationnameText', + { + defaultMessage: 'Integration', + } +); + +export const integrationVersionText = i18n.translate( + 'xpack.datasetQuality.details.integrationVersionText', + { + defaultMessage: 'Version', + } +); diff --git a/x-pack/plugins/observability_solution/dataset_quality/common/types/common.ts b/x-pack/plugins/observability_solution/dataset_quality/common/types/common.ts index 82d7b64e25f636..48d19ac0f4086c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/common/types/common.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/common/types/common.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; import { DataStreamStatType } from '../data_streams_stats'; import { Integration } from '../data_streams_stats/integration'; @@ -24,3 +25,16 @@ export interface BasicDataStream { namespace: string; integration?: Integration; } + +export interface TableCriteria { + page: number; + rowsPerPage: number; + sort: { + field: TSortField; + direction: SortDirection; + }; +} + +export type TimeRangeConfig = Pick & { + refresh: RefreshInterval; +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx index 8ae6f1f74bd2eb..4c44effcce8bca 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/dataset_quality.tsx @@ -12,7 +12,7 @@ import { PerformanceContextProvider } from '@kbn/ebt-tools'; import { DatasetQualityContext, DatasetQualityContextValue } from './context'; import { useKibanaContextForPluginProvider } from '../../utils'; import { DatasetQualityStartDeps } from '../../types'; -import { DatasetQualityController } from '../../controller'; +import { DatasetQualityController } from '../../controller/dataset_quality'; import { ITelemetryClient } from '../../services/telemetry'; export interface DatasetQualityProps { 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 515307df1a200e..9a0b1f21ff9f13 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 @@ -37,6 +37,7 @@ import { PrivilegesWarningIconWrapper, IntegrationIcon } from '../../common'; import { useRedirectLink } from '../../../hooks'; import { FlyoutDataset } from '../../../state_machines/dataset_quality_controller'; import { DegradedDocsPercentageLink } from './degraded_docs_percentage_link'; +import { TimeRangeConfig } from '../../../../common/types'; const expandDatasetAriaLabel = i18n.translate('xpack.datasetQuality.expandLabel', { defaultMessage: 'Expand', @@ -167,6 +168,7 @@ export const getDatasetQualityTableColumns = ({ showFullDatasetNames, isSizeStatsAvailable, isActiveDataset, + timeRange, }: { fieldFormats: FieldFormatsStart; canUserMonitorDataset: boolean; @@ -178,6 +180,7 @@ export const getDatasetQualityTableColumns = ({ isSizeStatsAvailable: boolean; openFlyout: (selectedDataset: FlyoutDataset) => void; isActiveDataset: (lastActivity: number) => boolean; + timeRange: TimeRangeConfig; }): Array> => { return [ { @@ -296,6 +299,7 @@ export const getDatasetQualityTableColumns = ({ ), width: '140px', @@ -339,7 +343,11 @@ export const getDatasetQualityTableColumns = ({ { name: actionsColumnName, render: (dataStreamStat: DataStreamStat) => ( - + ), width: '100px', }, @@ -349,13 +357,16 @@ export const getDatasetQualityTableColumns = ({ const RedirectLink = ({ dataStreamStat, title, + timeRange, }: { dataStreamStat: DataStreamStat; title: string; + timeRange: TimeRangeConfig; }) => { const redirectLinkProps = useRedirectLink({ dataStreamStat, telemetry: { page: 'main', navigationSource: NavigationSource.Table }, + timeRangeConfig: timeRange, }); return ( diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx index 9e8fb79168fd41..54c393323ccfd3 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality/table/degraded_docs_percentage_link.tsx @@ -12,13 +12,16 @@ import { NavigationSource } from '../../../services/telemetry'; import { useRedirectLink } from '../../../hooks'; import { QualityPercentageIndicator } from '../../quality_indicator'; import { DataStreamStat } from '../../../../common/data_streams_stats/data_stream_stat'; +import { TimeRangeConfig } from '../../../../common/types'; export const DegradedDocsPercentageLink = ({ isLoading, dataStreamStat, + timeRange, }: { isLoading: boolean; dataStreamStat: DataStreamStat; + timeRange: TimeRangeConfig; }) => { const { degradedDocs: { percentage, count }, @@ -31,6 +34,7 @@ export const DegradedDocsPercentageLink = ({ page: 'main', navigationSource: NavigationSource.Table, }, + timeRangeConfig: timeRange, }); return ( diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/context.ts b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/context.ts new file mode 100644 index 00000000000000..4b54f1fc735794 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/context.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 { createContext, useContext } from 'react'; +import { DatasetQualityDetailsControllerStateService } from '../../state_machines/dataset_quality_details_controller'; +import { ITelemetryClient } from '../../services/telemetry'; + +export interface DatasetQualityDetailsContextValue { + service: DatasetQualityDetailsControllerStateService; + telemetryClient: ITelemetryClient; +} + +export const DatasetQualityDetailsContext = createContext({} as DatasetQualityDetailsContextValue); + +export function useDatasetQualityDetailsContext() { + return useContext(DatasetQualityDetailsContext); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx new file mode 100644 index 00000000000000..522ad22fae4292 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/dataset_quality_details.tsx @@ -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 React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiHorizontalRule } from '@elastic/eui'; +import { useDatasetQualityDetailsState } from '../../hooks'; +import { DataStreamNotFoundPrompt } from './index_not_found_prompt'; +import { Header } from './header'; +import { Overview } from './overview'; +import { Details } from './details'; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function DatasetQualityDetails() { + const { isIndexNotFoundError, dataStream } = useDatasetQualityDetailsState(); + return isIndexNotFoundError ? ( + + ) : ( + + +
+ + + +
+ + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/dataset_summary.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/dataset_summary.tsx new file mode 100644 index 00000000000000..17032d7866d05c --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/dataset_summary.tsx @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { Fragment } from 'react'; +import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; +import { EuiBadge, EuiFlexGroup, EuiPanel, EuiText } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { IntegrationActionsMenu } from './integration_actions_menu'; +import { + datasetCreatedOnText, + datasetLastActivityText, + integrationNameText, + integrationVersionText, +} from '../../../../common/translations'; +import { FieldsList } from './fields_list'; +import { useDatasetQualityDetailsState } from '../../../hooks'; +import { IntegrationIcon } from '../../common'; + +export function DatasetSummary() { + const { fieldFormats, dataStreamSettings, dataStreamDetails, loadingState, integrationDetails } = + useDatasetQualityDetailsState(); + const dataFormatter = fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.DATE, [ + ES_FIELD_TYPES.DATE, + ]); + const { + dataStreamDetailsLoading, + dataStreamSettingsLoading, + integrationDetailsLoadings, + integrationDashboardsLoading, + } = loadingState; + const formattedLastActivity = dataStreamDetails?.lastActivity + ? dataFormatter.convert(dataStreamDetails?.lastActivity) + : '-'; + const formattedCreatedOn = dataStreamSettings?.createdOn + ? dataFormatter.convert(dataStreamSettings.createdOn) + : '-'; + + return ( + + + + + + {integrationDetails.integration?.name} + + + ), + actionsMenu: ( + + ), + isLoading: integrationDetailsLoadings, + }, + { + fieldTitle: integrationVersionText, + fieldValue: integrationDetails.integration?.version, + isLoading: integrationDetailsLoadings, + }, + ] + : []), + { + fieldTitle: datasetLastActivityText, + fieldValue: formattedLastActivity, + isLoading: dataStreamDetailsLoading, + }, + { + fieldTitle: datasetCreatedOnText, + fieldValue: formattedCreatedOn, + isLoading: dataStreamSettingsLoading, + }, + ]} + /> + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/fields_list.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/fields_list.tsx new file mode 100644 index 00000000000000..f48ad1d932357e --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/fields_list.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { ReactNode, Fragment } from 'react'; +import { + EuiFlexGroup, + EuiPanel, + EuiFlexItem, + EuiTitle, + EuiHorizontalRule, + EuiSkeletonRectangle, +} from '@elastic/eui'; + +export function FieldsList({ + fields, + dataTestSubj = 'datasetQualityDetailsFieldsList', +}: { + fields: Array<{ + fieldTitle: string; + fieldValue: ReactNode; + isLoading: boolean; + actionsMenu?: ReactNode; + }>; + dataTestSubj?: string; +}) { + return ( + + + {fields.map(({ fieldTitle, fieldValue, isLoading: isFieldLoading, actionsMenu }, index) => ( + + + + + {fieldTitle} + + + + + {fieldValue} + + + {actionsMenu} + + {index < fields.length - 1 ? : null} + + ))} + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/header.tsx new file mode 100644 index 00000000000000..a286751818a0ab --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/header.tsx @@ -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 React from 'react'; +import { EuiTitle } from '@elastic/eui'; +import { detailsHeaderTitle } from '../../../../common/translations'; + +export function DetailsHeader() { + return ( + + {detailsHeaderTitle} + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/index.tsx new file mode 100644 index 00000000000000..2c68a5fe46d541 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/index.tsx @@ -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 React from 'react'; +import { EuiSpacer } from '@elastic/eui'; +import { DetailsHeader } from './header'; +import { DatasetSummary } from './dataset_summary'; + +export function Details() { + return ( + <> + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/integration_actions_menu.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/integration_actions_menu.tsx new file mode 100644 index 00000000000000..4d9591be1bd58e --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/details/integration_actions_menu.tsx @@ -0,0 +1,206 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; +import { + EuiButtonEmpty, + EuiButtonIcon, + EuiContextMenu, + EuiContextMenuPanelDescriptor, + EuiContextMenuPanelItemDescriptor, + EuiPopover, + EuiSkeletonRectangle, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import type { RouterLinkProps } from '@kbn/router-utils/src/get_router_link_props'; +import { Integration } from '../../../../common/data_streams_stats/integration'; +import { Dashboard } from '../../../../common/api_types'; +import { useDatasetQualityDetailsState, useIntegrationActions } from '../../../hooks'; + +const integrationActionsText = i18n.translate( + 'xpack.datasetQuality.details.integrationActionsText', + { + defaultMessage: 'Integration actions', + } +); + +const seeIntegrationText = i18n.translate('xpack.datasetQuality.details.seeIntegrationActionText', { + defaultMessage: 'See integration', +}); + +const indexTemplateText = i18n.translate('xpack.datasetQuality.details.indexTemplateActionText', { + defaultMessage: 'Index template', +}); + +const viewDashboardsText = i18n.translate('xpack.datasetQuality.details.viewDashboardsActionText', { + defaultMessage: 'View dashboards', +}); + +export function IntegrationActionsMenu({ + integration, + dashboards, + dashboardsLoading, +}: { + integration: Integration; + dashboards?: Dashboard[]; + dashboardsLoading: boolean; +}) { + const { canUserAccessDashboards, canUserViewIntegrations, datasetDetails } = + useDatasetQualityDetailsState(); + const { version, name: integrationName } = integration; + const { type, name } = datasetDetails; + const { + isOpen, + handleCloseMenu, + handleToggleMenu, + getIntegrationOverviewLinkProps, + getIndexManagementLinkProps, + getDashboardLinkProps, + } = useIntegrationActions(); + + const actionButton = ( + + ); + + const MenuActionItem = ({ + dataTestSubject, + buttonText, + routerLinkProps, + iconType, + disabled = false, + }: { + dataTestSubject: string; + buttonText: string | React.ReactNode; + routerLinkProps: RouterLinkProps; + iconType: string; + disabled?: boolean; + }) => ( + + {buttonText} + + ); + + const panelItems = useMemo(() => { + const firstLevelItems: EuiContextMenuPanelItemDescriptor[] = [ + ...(canUserViewIntegrations + ? [ + { + renderItem: () => ( + + ), + }, + ] + : []), + { + renderItem: () => ( + + ), + }, + { + isSeparator: true, + key: 'sep', + }, + ]; + + if (dashboards?.length && canUserAccessDashboards) { + firstLevelItems.push({ + icon: 'dashboardApp', + panel: 1, + name: viewDashboardsText, + 'data-test-subj': 'datasetQualityDetailsIntegrationActionViewDashboards', + disabled: false, + }); + } else if (dashboardsLoading) { + firstLevelItems.push({ + icon: 'dashboardApp', + name: , + 'data-test-subj': 'datasetQualityDetailsIntegrationActionDashboardsLoading', + disabled: true, + }); + } + + const panel: EuiContextMenuPanelDescriptor[] = [ + { + id: 0, + items: firstLevelItems, + }, + { + id: 1, + title: viewDashboardsText, + items: dashboards?.map((dashboard) => { + return { + renderItem: () => ( + + ), + }; + }), + }, + ]; + + return panel; + }, [ + dashboards, + getDashboardLinkProps, + getIndexManagementLinkProps, + getIntegrationOverviewLinkProps, + integrationName, + name, + type, + version, + dashboardsLoading, + canUserAccessDashboards, + canUserViewIntegrations, + ]); + + return ( + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/header.tsx new file mode 100644 index 00000000000000..2a0e3e93e32ac7 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/header.tsx @@ -0,0 +1,92 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiButton, + EuiFlexGroup, + EuiFlexItem, + EuiSkeletonTitle, + EuiTextColor, + EuiTitle, + useEuiShadow, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import React from 'react'; +import { openInDiscoverText, openInLogsExplorerText } from '../../../common/translations'; +import { useDatasetQualityDetailsRedirectLink, useDatasetQualityDetailsState } from '../../hooks'; +import { IntegrationIcon } from '../common'; + +export function Header() { + const { datasetDetails, timeRange, integrationDetails, loadingState } = + useDatasetQualityDetailsState(); + + const { rawName, name: title } = datasetDetails; + const euiShadow = useEuiShadow('s'); + const { euiTheme } = useEuiTheme(); + const redirectLinkProps = useDatasetQualityDetailsRedirectLink({ + dataStreamStat: datasetDetails, + timeRangeConfig: timeRange, + }); + + const pageTitle = integrationDetails?.integration?.datasets?.[datasetDetails.name] ?? title; + + return !loadingState.integrationDetailsLoaded ? ( + + ) : ( + + + + + +

{pageTitle}

+
+
+ +
+
+

+ {rawName} +

+
+
+ + + + {redirectLinkProps.isLogsExplorerAvailable + ? openInLogsExplorerText + : openInDiscoverText} + + + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index.tsx new file mode 100644 index 00000000000000..dbeb0c874d6665 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { CoreStart } from '@kbn/core-lifecycle-browser'; +import { dynamic } from '@kbn/shared-ux-utility'; +import { PerformanceContextProvider } from '@kbn/ebt-tools'; +import { DatasetQualityDetailsController } from '../../controller/dataset_quality_details'; +import { DatasetQualityStartDeps } from '../../types'; +import { ITelemetryClient } from '../../services/telemetry'; +import { useKibanaContextForPluginProvider } from '../../utils'; + +import { DatasetQualityDetailsContext, DatasetQualityDetailsContextValue } from './context'; + +const DatasetQualityDetails = dynamic(() => import('./dataset_quality_details')); + +export interface DatasetQualityDetailsProps { + controller: DatasetQualityDetailsController; +} + +export interface CreateDatasetQualityArgs { + core: CoreStart; + plugins: DatasetQualityStartDeps; + telemetryClient: ITelemetryClient; +} + +export const createDatasetQualityDetails = ({ + core, + plugins, + telemetryClient, +}: CreateDatasetQualityArgs) => { + return ({ controller }: DatasetQualityDetailsProps) => { + const KibanaContextProviderForPlugin = useKibanaContextForPluginProvider(core, plugins); + + const datasetQualityDetailsProviderValue: DatasetQualityDetailsContextValue = useMemo( + () => ({ + service: controller.service, + telemetryClient, + }), + [controller.service] + ); + + return ( + + + + + + + + ); + }; +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index_not_found_prompt.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index_not_found_prompt.tsx new file mode 100644 index 00000000000000..72b896a41a8db4 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/index_not_found_prompt.tsx @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiEmptyPrompt } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +const emptyPromptTitle = i18n.translate('xpack.datasetQuality.details.emptypromptTitle', { + defaultMessage: 'Unable to load your data stream', +}); + +const emptyPromptBody = (dataStream: string) => + i18n.translate('xpack.datasetQuality.details.emptyPromptBody', { + defaultMessage: 'Data stream not found: {dataStream}', + values: { + dataStream, + }, + }); + +export function DataStreamNotFoundPrompt({ dataStream }: { dataStream: string }) { + const promptTitle =

{emptyPromptTitle}

; + const promptBody =

{emptyPromptBody(dataStream)}

; + + return ; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/aggregation_not_supported.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/aggregation_not_supported.tsx new file mode 100644 index 00000000000000..e9ec36c763454a --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/aggregation_not_supported.tsx @@ -0,0 +1,75 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { EuiCallOut, EuiCode, EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +const aggregationNotSupportedTitle = i18n.translate('xpack.datasetQuality.nonAggregatable.title', { + defaultMessage: 'Your request may take longer to complete', +}); + +const aggregationNotSupportedDescription = (dataset: string) => ( + + {dataset} + + ), + howToFixIt: ( + + {i18n.translate( + 'xpack.datasetQuality.flyout.nonAggregatableDatasets.link.title', + { + defaultMessage: 'rollover', + } + )} + + ), + }} + /> + ), + }} + /> + ), + }} + /> +); + +export function AggregationNotSupported({ dataStream }: { dataStream: string }) { + return ( + + + +

{aggregationNotSupportedDescription(dataStream)}

+
+
+
+ ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx new file mode 100644 index 00000000000000..cfdf3b8d4a521c --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/columns.tsx @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import type { EuiBasicTableColumn } from '@elastic/eui'; +import type { FieldFormat } from '@kbn/field-formats-plugin/common'; +import { formatNumber } from '@elastic/eui'; + +import { DegradedField } from '../../../../../common/api_types'; +import { SparkPlot } from './spark_plot'; +import { NUMBER_FORMAT } from '../../../../../common/constants'; + +const fieldColumnName = i18n.translate('xpack.datasetQuality.details.degradedField.field', { + defaultMessage: 'Field', +}); + +const countColumnName = i18n.translate('xpack.datasetQuality.details.degradedField.count', { + defaultMessage: 'Docs count', +}); + +const lastOccurrenceColumnName = i18n.translate( + 'xpack.datasetQuality.details.degradedField.lastOccurrence', + { + defaultMessage: 'Last occurrence', + } +); + +export const getDegradedFieldsColumns = ({ + dateFormatter, + isLoading, +}: { + dateFormatter: FieldFormat; + isLoading: boolean; +}): Array> => [ + { + name: fieldColumnName, + field: 'name', + }, + { + name: countColumnName, + sortable: true, + field: 'count', + render: (_, { count, timeSeries }) => { + const countValue = formatNumber(count, NUMBER_FORMAT); + return ; + }, + }, + { + name: lastOccurrenceColumnName, + sortable: true, + field: 'lastOccurrence', + render: (lastOccurrence: number) => { + return dateFormatter.convert(lastOccurrence); + }, + }, +]; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx new file mode 100644 index 00000000000000..01956405074e31 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/degraded_fields.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiFlexGroup, + EuiPanel, + EuiTitle, + EuiIconTip, + EuiAccordion, + useGeneratedHtmlId, + EuiBadge, + EuiBetaBadge, +} from '@elastic/eui'; +import { + overviewDegradedFieldsSectionTitle, + overviewDegradedFieldsSectionTitleTooltip, + overviewQualityIssuesAccordionTechPreviewBadge, +} from '../../../../../common/translations'; +import { DegradedFieldTable } from './table'; +import { useDegradedFields } from '../../../../hooks'; + +export function DegradedFields() { + const accordionId = useGeneratedHtmlId({ + prefix: overviewDegradedFieldsSectionTitle, + }); + + const { totalItemCount } = useDegradedFields(); + + const accordionTitle = ( + + +
{overviewDegradedFieldsSectionTitle}
+
+ + + {totalItemCount} + + +
+ ); + return ( + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/index.ts new file mode 100644 index 00000000000000..7254285dc69bab --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/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 './degraded_fields'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/spark_plot.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/spark_plot.tsx new file mode 100644 index 00000000000000..dcf1d4032c8860 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/spark_plot.tsx @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiLoadingChart, + euiPaletteColorBlind, + useEuiTheme, +} from '@elastic/eui'; +import { ScaleType, Settings, Tooltip, Chart, BarSeries } from '@elastic/charts'; +import { i18n } from '@kbn/i18n'; +import { Coordinate } from '../../../../../common/types'; + +export function SparkPlot({ + valueLabel, + isLoading, + series, +}: { + valueLabel: React.ReactNode; + isLoading: boolean; + series?: Coordinate[] | null; +}) { + return ( + + + + + {valueLabel} + + ); +} + +function SparkPlotItem({ + isLoading, + series, +}: { + isLoading: boolean; + series?: Coordinate[] | null; +}) { + const { euiTheme } = useEuiTheme(); + const chartSize = { + height: euiTheme.size.l, + width: '80px', + }; + + const commonStyle = { + ...chartSize, + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }; + const palette = euiPaletteColorBlind({ rotations: 2 }); + + if (isLoading) { + return ( +
+ +
+ ); + } + + if (hasValidTimeSeries(series)) { + return ( +
+ + + + + +
+ ); + } + + return ( +
+ +
+ ); +} + +function hasValidTimeSeries(series?: Coordinate[] | null): series is Coordinate[] { + return !!series?.some((point) => point.y !== 0); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx new file mode 100644 index 00000000000000..c8a6e623febab9 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/degraded_fields/table.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiBasicTable, EuiEmptyPrompt } from '@elastic/eui'; +import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; +import { getDegradedFieldsColumns } from './columns'; +import { + overviewDegradedFieldsTableLoadingText, + overviewDegradedFieldsTableNoData, +} from '../../../../../common/translations'; +import { useDegradedFields } from '../../../../hooks/use_degraded_fields'; + +export const DegradedFieldTable = () => { + const { isLoading, pagination, renderedItems, onTableChange, sort, fieldFormats } = + useDegradedFields(); + const dateFormatter = fieldFormats.getDefaultInstance(KBN_FIELD_TYPES.DATE, [ + ES_FIELD_TYPES.DATE, + ]); + const columns = getDegradedFieldsColumns({ dateFormatter, isLoading }); + + return ( + {overviewDegradedFieldsTableNoData}} + hasBorder={false} + titleSize="m" + /> + ) + } + /> + ); +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs_chart.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx similarity index 89% rename from x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs_chart.tsx rename to x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx index 9d13d0e3b26bab..ff311032fe69fc 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs_chart.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart.tsx @@ -11,10 +11,10 @@ import { EuiFlexGroup, EuiLoadingChart, OnTimeChangeProps } from '@elastic/eui'; import { ViewMode } from '@kbn/embeddable-plugin/common'; import { KibanaErrorBoundary } from '@kbn/shared-ux-error-boundary'; -import { flyoutDegradedDocsTrendText } from '../../../../common/translations'; -import { TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; -import { useKibanaContextForPlugin } from '../../../utils'; -import { useDegradedDocsChart } from '../../../hooks'; +import { flyoutDegradedDocsTrendText } from '../../../../../../common/translations'; +import { useKibanaContextForPlugin } from '../../../../../utils'; +import { TimeRangeConfig } from '../../../../../../common/types'; +import { useDegradedDocs } from '../../../../../hooks/use_degraded_docs'; const CHART_HEIGHT = 180; const DISABLED_ACTIONS = [ @@ -26,7 +26,7 @@ const DISABLED_ACTIONS = [ interface DegradedDocsChartProps extends Pick< - ReturnType, + ReturnType, 'attributes' | 'isChartLoading' | 'onChartLoading' | 'extraActions' > { timeRange: TimeRangeConfig; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx new file mode 100644 index 00000000000000..985a748e792b1e --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/index.tsx @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useEffect, useState } from 'react'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + EuiAccordion, + EuiButtonIcon, + EuiCode, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiSkeletonRectangle, + EuiSpacer, + EuiTitle, + EuiToolTip, + OnTimeChangeProps, + useGeneratedHtmlId, +} from '@elastic/eui'; +import type { DataViewField } from '@kbn/data-views-plugin/common'; +import { css } from '@emotion/react'; +import { UnifiedBreakdownFieldSelector } from '@kbn/unified-histogram-plugin/public'; +import { + openInLogsExplorerText, + overviewDegradedDocsText, +} from '../../../../../../common/translations'; +import { useDegradedDocs } from '../../../../../hooks/use_degraded_docs'; +import { DegradedDocsChart } from './degraded_docs_chart'; +import { + useDatasetQualityDetailsRedirectLink, + useDatasetQualityDetailsState, +} from '../../../../../hooks'; +import { _IGNORED } from '../../../../../../common/es_fields'; + +const degradedDocsTooltip = ( + + _ignored + + ), + }} + /> +); + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function DegradedDocs({ lastReloadTime }: { lastReloadTime: number }) { + const { timeRange, updateTimeRange, datasetDetails } = useDatasetQualityDetailsState(); + const { dataView, breakdown, ...chartProps } = useDegradedDocs(); + + const accordionId = useGeneratedHtmlId({ + prefix: overviewDegradedDocsText, + }); + + const [breakdownDataViewField, setBreakdownDataViewField] = useState( + undefined + ); + + const degradedDocLinkLogsExplorer = useDatasetQualityDetailsRedirectLink({ + dataStreamStat: datasetDetails, + timeRangeConfig: timeRange, + query: { language: 'kuery', query: `${_IGNORED}: *` }, + }); + + useEffect(() => { + if (breakdown.dataViewField && breakdown.fieldSupportsBreakdown) { + setBreakdownDataViewField(breakdown.dataViewField); + } else { + setBreakdownDataViewField(undefined); + } + }, [setBreakdownDataViewField, breakdown]); + + const onTimeRangeChange = useCallback( + ({ start, end }: Pick) => { + updateTimeRange({ start, end, refreshInterval: timeRange.refresh.value }); + }, + [updateTimeRange, timeRange.refresh] + ); + + const accordionTitle = ( + + +
{overviewDegradedDocsText}
+
+ + + +
+ ); + + return ( + + + + + + + + + + + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/lens_attributes.ts b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts similarity index 97% rename from x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/lens_attributes.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts index a44b9a562a428e..f089ef5d74c242 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/lens_attributes.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes.ts @@ -6,13 +6,13 @@ */ import { i18n } from '@kbn/i18n'; -import { GenericIndexPatternColumn, TypedLensByValueInput } from '@kbn/lens-plugin/public'; +import type { GenericIndexPatternColumn, TypedLensByValueInput } from '@kbn/lens-plugin/public'; import { v4 as uuidv4 } from 'uuid'; import { flyoutDegradedDocsPercentageText, flyoutDegradedDocsTrendText, -} from '../../../../common/translations'; +} from '../../../../../../common/translations'; enum DatasetQualityLensColumn { Date = 'date_column', @@ -268,7 +268,7 @@ function getChartColumns(breakdownField?: string): Record - i18n.translate('xpack.datasetQuality.flyoutDegradedDocsTopNValues', { + i18n.translate('xpack.datasetQuality.details.degradedDocsTopNValues', { defaultMessage: 'Top {count} values of {fieldName}', values: { count, fieldName }, description: diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/header.tsx new file mode 100644 index 00000000000000..a47ed1764049cb --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/header.tsx @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + EuiFlexGroup, + EuiIcon, + EuiSuperDatePicker, + EuiTitle, + EuiToolTip, + OnRefreshProps, + OnTimeChangeProps, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import React, { useCallback } from 'react'; +import { useDatasetQualityDetailsState } from '../../../hooks'; +import { overviewHeaderTitle, overviewTitleTooltip } from '../../../../common/translations'; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function OverviewHeader({ + handleRefresh, +}: { + handleRefresh: (refreshProps: OnRefreshProps) => void; +}) { + const { timeRange, updateTimeRange } = useDatasetQualityDetailsState(); + + const onTimeChange = useCallback( + ({ isInvalid, ...timeRangeProps }: OnTimeChangeProps) => { + if (!isInvalid) { + updateTimeRange({ refreshInterval: timeRange.refresh.value, ...timeRangeProps }); + } + }, + [updateTimeRange, timeRange.refresh] + ); + + return ( + + + + {overviewHeaderTitle} + + + + + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/index.tsx new file mode 100644 index 00000000000000..380dd6bf09b957 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/index.tsx @@ -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 React, { useCallback, useState } from 'react'; +import { dynamic } from '@kbn/shared-ux-utility'; +import { EuiSpacer, OnRefreshProps } from '@elastic/eui'; +import { useDatasetQualityDetailsState } from '../../../hooks'; +import { AggregationNotSupported } from './aggregation_not_supported'; +import { DegradedFields } from './degraded_fields'; + +const OverviewHeader = dynamic(() => import('./header')); +const Summary = dynamic(() => import('./summary')); +const DegradedDocs = dynamic(() => import('./document_trends/degraded_docs')); + +export function Overview() { + const { dataStream, isNonAggregatable, updateTimeRange } = useDatasetQualityDetailsState(); + const [lastReloadTime, setLastReloadTime] = useState(Date.now()); + + const handleRefresh = useCallback( + (refreshProps: OnRefreshProps) => { + updateTimeRange(refreshProps); + setLastReloadTime(Date.now()); + }, + [updateTimeRange] + ); + return ( + <> + {isNonAggregatable && } + + + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx new file mode 100644 index 00000000000000..707c900a248a1a --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/index.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { EuiFlexGroup } from '@elastic/eui'; +import { Panel, PanelIndicator } from './panel'; +import { + overviewPanelDatasetQualityIndicatorDegradedDocs, + overviewPanelDocumentsIndicatorSize, + overviewPanelDocumentsIndicatorTotalCount, + overviewPanelResourcesIndicatorServices, + overviewPanelResourcesIndicatorSize, + overviewPanelTitleDatasetQuality, + overviewPanelTitleDocuments, + overviewPanelTitleResources, +} from '../../../../../common/translations'; +import { useOverviewSummaryPanel } from '../../../../hooks/use_overview_summary_panel'; + +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function Summary() { + const { + isSummaryPanelLoading, + totalDocsCount, + sizeInBytesAvailable, + sizeInBytes, + isUserAllowedToSeeSizeInBytes, + totalServicesCount, + totalHostsCount, + totalDegradedDocsCount, + } = useOverviewSummaryPanel(); + return ( + + + + {sizeInBytesAvailable && ( + + )} + + + + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx new file mode 100644 index 00000000000000..b40f563a4dff47 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/dataset_quality_details/overview/summary/panel.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiPanel, EuiSkeletonTitle, EuiText } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { PrivilegesWarningIconWrapper } from '../../../common'; + +const verticalRule = css` + width: 1px; + height: 65px; + background-color: ${euiThemeVars.euiColorLightShade}; +`; + +const verticalRuleHidden = css` + width: 1px; + height: 65px; + visibility: hidden; +`; + +export function Panel({ + title, + secondaryTitle, + children, +}: { + title: string; + secondaryTitle?: React.ReactNode; + children: React.ReactNode | React.ReactNode[]; +}) { + const renderChildrenWithSeparator = (panelChildren: React.ReactNode | React.ReactNode[]) => { + if (Array.isArray(panelChildren)) { + return panelChildren.map((panelChild, index) => ( + + {panelChild} + {index < panelChildren.length - 1 && } + + )); + } + return ( + <> + {panelChildren} + + + ); + }; + return ( + + + + + +
{title}
+
+
+ {secondaryTitle && {secondaryTitle}} +
+
+ + {renderChildrenWithSeparator(children)} + +
+ ); +} + +export function PanelIndicator({ + label, + value, + isLoading, + userHasPrivilege = true, +}: { + label: string; + value: string | number; + isLoading: boolean; + userHasPrivilege?: boolean; +}) { + return ( + + {isLoading ? ( + + ) : ( + <> + + {label} + + + <> + + {userHasPrivilege && ( + +

{value}

+
+ )} + + )} +
+ ); +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/dataset_summary.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/dataset_summary.tsx index 052f4b63f0da60..cb35e9c74d3343 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/dataset_summary.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/dataset_summary.tsx @@ -10,9 +10,9 @@ import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; import { DataStreamDetails, DataStreamSettings } from '../../../common/data_streams_stats'; import { - flyoutDatasetCreatedOnText, + datasetCreatedOnText, flyoutDatasetDetailsText, - flyoutDatasetLastActivityText, + datasetLastActivityText, } from '../../../common/translations'; import { FieldsList, FieldsListLoading } from './fields_list'; @@ -46,12 +46,12 @@ export function DatasetSummary({ title={flyoutDatasetDetailsText} fields={[ { - fieldTitle: flyoutDatasetLastActivityText, + fieldTitle: datasetLastActivityText, fieldValue: formattedLastActivity, isLoading: dataStreamDetailsLoading, }, { - fieldTitle: flyoutDatasetCreatedOnText, + fieldTitle: datasetCreatedOnText, fieldValue: formattedCreatedOn, isLoading: dataStreamSettingsLoading, }, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs.tsx index c1c6bdf23f7c4b..5335d5de8692d6 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_docs_trend/degraded_docs.tsx @@ -25,9 +25,9 @@ import type { DataViewField } from '@kbn/data-views-plugin/common'; import { useDegradedDocsChart } from '../../../hooks'; import { DEFAULT_TIME_RANGE, DEFAULT_DATEPICKER_REFRESH } from '../../../../common/constants'; -import { flyoutDegradedDocsText } from '../../../../common/translations'; -import { TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; -import { DegradedDocsChart } from './degraded_docs_chart'; +import { overviewDegradedDocsText } from '../../../../common/translations'; +import { DegradedDocsChart } from '../../dataset_quality_details/overview/document_trends/degraded_docs/degraded_docs_chart'; +import { TimeRangeConfig } from '../../../../common/types'; export function DegradedDocs({ dataStream, @@ -70,7 +70,7 @@ export function DegradedDocs({ `} > -
{flyoutDegradedDocsText}
+
{overviewDegradedDocsText}
diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_fields/table.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_fields/table.tsx index 9820e1722d0fc8..1a1baa8aae7cdf 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_fields/table.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/degraded_fields/table.tsx @@ -11,8 +11,8 @@ import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; import { useDatasetQualityDegradedField } from '../../../hooks'; import { getDegradedFieldsColumns } from './columns'; import { - flyoutDegradedFieldsTableLoadingText, - flyoutDegradedFieldsTableNoData, + overviewDegradedFieldsTableLoadingText, + overviewDegradedFieldsTableNoData, } from '../../../../common/translations'; export const DegradedFieldTable = () => { @@ -38,12 +38,12 @@ export const DegradedFieldTable = () => { }} noItemsMessage={ isLoading ? ( - flyoutDegradedFieldsTableLoadingText + overviewDegradedFieldsTableLoadingText ) : ( {flyoutDegradedFieldsTableNoData}} + title={

{overviewDegradedFieldsTableNoData}

} hasBorder={false} titleSize="m" /> 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 7dc455b2804440..cb6944057a2d62 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 @@ -19,15 +19,17 @@ import { EuiPanel, EuiSkeletonRectangle, } from '@elastic/eui'; +import { dynamic } from '@kbn/shared-ux-utility'; import { flyoutCancelText } from '../../../common/translations'; import { useDatasetQualityFlyout, useDatasetDetailsTelemetry } from '../../hooks'; import { DatasetSummary, DatasetSummaryLoading } from './dataset_summary'; import { Header } from './header'; -import { IntegrationSummary } from './integration_summary'; import { FlyoutProps } from './types'; -import { FlyoutSummary } from './flyout_summary/flyout_summary'; import { BasicDataStream } from '../../../common/types'; +const FlyoutSummary = dynamic(() => import('./flyout_summary/flyout_summary')); +const IntegrationSummary = dynamic(() => import('./integration_summary')); + // Allow for lazy loading // eslint-disable-next-line import/no-default-export export default function Flyout({ dataset, closeFlyout }: FlyoutProps) { @@ -74,6 +76,7 @@ export default function Flyout({ dataset, closeFlyout }: FlyoutProps) { linkDetails={linkDetails} loading={!loadingState.datasetIntegrationDone} title={title} + timeRange={timeRange} /> diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary.tsx index 353e7f353b6dbd..5b89c43ad92d1c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary.tsx @@ -23,10 +23,11 @@ import { DegradedDocs } from '../degraded_docs_trend/degraded_docs'; import { DataStreamDetails } from '../../../../common/api_types'; import { DEFAULT_TIME_RANGE, DEFAULT_DATEPICKER_REFRESH } from '../../../../common/constants'; import { useDatasetQualityContext } from '../../dataset_quality/context'; -import { FlyoutDataset, TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; import { FlyoutSummaryHeader } from './flyout_summary_header'; import { FlyoutSummaryKpis, FlyoutSummaryKpisLoading } from './flyout_summary_kpis'; import { DegradedFields } from '../degraded_fields/degraded_fields'; +import { TimeRangeConfig } from '../../../../common/types'; +import { FlyoutDataset } from '../../../state_machines/dataset_quality_controller'; const nonAggregatableWarningTitle = i18n.translate('xpack.datasetQuality.nonAggregatable.title', { defaultMessage: 'Your request may take longer to complete', @@ -77,7 +78,9 @@ const nonAggregatableWarningDescription = (dataset: string) => ( /> ); -export function FlyoutSummary({ +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function FlyoutSummary({ dataStream, dataStreamStat, dataStreamDetails, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_header.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_header.tsx index d449eb35536478..c0ee7303b51a54 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_header.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_header.tsx @@ -19,7 +19,7 @@ import { import { FormattedMessage } from '@kbn/i18n-react'; import { flyoutSummaryText } from '../../../../common/translations'; -import { TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; +import { TimeRangeConfig } from '../../../../common/types'; export function FlyoutSummaryHeader({ timeRange, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_kpis.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_kpis.tsx index 9b0ca4dfd12775..47b41712dc7f51 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_kpis.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/flyout_summary_kpis.tsx @@ -14,9 +14,10 @@ import { DataStreamDetails } from '../../../../common/api_types'; import { useKibanaContextForPlugin } from '../../../utils'; import { NavigationSource } from '../../../services/telemetry'; import { useDatasetDetailsTelemetry, useRedirectLink } from '../../../hooks'; -import { FlyoutDataset, TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; +import { FlyoutDataset } from '../../../state_machines/dataset_quality_controller'; import { FlyoutSummaryKpiItem, FlyoutSummaryKpiItemLoading } from './flyout_summary_kpi_item'; import { getSummaryKpis } from './get_summary_kpis'; +import { TimeRangeConfig } from '../../../../common/types'; export function FlyoutSummaryKpis({ dataStreamStat, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.test.ts b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.test.ts index 5807c21a6a2517..28f5334e2f1995 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.test.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.test.ts @@ -8,7 +8,6 @@ import { formatNumber } from '@elastic/eui'; import type { useKibanaContextForPlugin } from '../../../utils'; import type { useDatasetDetailsTelemetry } from '../../../hooks'; -import { TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; import { BYTE_NUMBER_FORMAT, @@ -17,7 +16,7 @@ import { MAX_HOSTS_METRIC_VALUE, } from '../../../../common/constants'; import { - flyoutDegradedDocsText, + overviewDegradedDocsText, flyoutDocsCountTotalText, flyoutHostsText, flyoutServicesText, @@ -25,6 +24,7 @@ import { flyoutSizeText, } from '../../../../common/translations'; import { getSummaryKpis } from './get_summary_kpis'; +import { TimeRangeConfig } from '../../../../common/types'; const dataStreamDetails = { services: { @@ -83,7 +83,7 @@ describe('getSummaryKpis', () => { { title: flyoutSizeText, value: formatNumber(dataStreamDetails.sizeBytes ?? 0, BYTE_NUMBER_FORMAT), - userHasPrivilege: true, + userHasPrivilege: false, }, { title: flyoutServicesText, @@ -98,7 +98,7 @@ describe('getSummaryKpis', () => { userHasPrivilege: true, }, { - title: flyoutDegradedDocsText, + title: overviewDegradedDocsText, value: '200', link: { label: flyoutShowAllText, @@ -143,7 +143,7 @@ describe('getSummaryKpis', () => { { title: flyoutSizeText, value: formatNumber(dataStreamDetails.sizeBytes ?? 0, BYTE_NUMBER_FORMAT), - userHasPrivilege: true, + userHasPrivilege: false, }, { title: flyoutServicesText, @@ -158,7 +158,7 @@ describe('getSummaryKpis', () => { userHasPrivilege: true, }, { - title: flyoutDegradedDocsText, + title: overviewDegradedDocsText, value: '200', link: { label: flyoutShowAllText, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.ts b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.ts index 563c7d06cea48e..b574e1e8a8160c 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/flyout_summary/get_summary_kpis.ts @@ -15,7 +15,7 @@ import { NUMBER_FORMAT, } from '../../../../common/constants'; import { - flyoutDegradedDocsText, + overviewDegradedDocsText, flyoutDocsCountTotalText, flyoutHostsText, flyoutServicesText, @@ -26,7 +26,7 @@ import { DataStreamDetails } from '../../../../common/api_types'; import { NavigationTarget, NavigationSource } from '../../../services/telemetry'; import { useKibanaContextForPlugin } from '../../../utils'; import type { useRedirectLink, useDatasetDetailsTelemetry } from '../../../hooks'; -import { TimeRangeConfig } from '../../../state_machines/dataset_quality_controller'; +import { TimeRangeConfig } from '../../../../common/types'; export function getSummaryKpis({ dataStreamDetails, @@ -77,7 +77,7 @@ export function getSummaryKpis({ { title: flyoutSizeText, value: formatNumber(dataStreamDetails?.sizeBytes ?? 0, BYTE_NUMBER_FORMAT), - userHasPrivilege: dataStreamDetails?.userPrivileges?.canMonitor ?? true, + userHasPrivilege: Boolean(dataStreamDetails?.userPrivileges?.canMonitor), }, ] : []), @@ -89,7 +89,7 @@ export function getSummaryKpis({ }, getHostsKpi(dataStreamDetails?.hosts, timeRange, telemetry, hostsLocator), { - title: flyoutDegradedDocsText, + title: overviewDegradedDocsText, value: formatNumber(dataStreamDetails?.degradedDocsCount ?? 0, NUMBER_FORMAT), link: degradedDocsLinkProps && degradedDocsLinkProps.linkProps.href 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 10d0c96a057bd3..1117c7da12a1b2 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 @@ -17,23 +17,22 @@ import { } from '@elastic/eui'; import { css } from '@emotion/react'; import React from 'react'; -import { - flyoutOpenInDiscoverText, - flyoutOpenInLogsExplorerText, -} from '../../../common/translations'; +import { openInDiscoverText, openInLogsExplorerText } from '../../../common/translations'; import { NavigationSource } from '../../services/telemetry'; import { useRedirectLink } from '../../hooks'; import { IntegrationIcon } from '../common'; -import { BasicDataStream } from '../../../common/types'; +import { BasicDataStream, TimeRangeConfig } from '../../../common/types'; export function Header({ linkDetails, loading, title, + timeRange, }: { linkDetails: BasicDataStream; loading: boolean; title: string; + timeRange: TimeRangeConfig; }) { const { integration } = linkDetails; const euiShadow = useEuiShadow('s'); @@ -44,6 +43,7 @@ export function Header({ page: 'details', navigationSource: NavigationSource.Header, }, + timeRangeConfig: timeRange, }); return ( @@ -90,8 +90,8 @@ export function Header({ } > {redirectLinkProps.isLogsExplorerAvailable - ? flyoutOpenInLogsExplorerText - : flyoutOpenInDiscoverText} + ? openInLogsExplorerText + : openInDiscoverText} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/integration_summary.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/integration_summary.tsx index 6ac94411098a64..53262c7821ce73 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/integration_summary.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/flyout/integration_summary.tsx @@ -11,7 +11,7 @@ import { css } from '@emotion/react'; import { flyoutIntegrationDetailsText, flyoutIntegrationNameText, - flyoutIntegrationVersionText, + integrationVersionText, } from '../../../common/translations'; import { IntegrationIcon } from '../common'; import { FieldsList } from './fields_list'; @@ -19,7 +19,9 @@ import { IntegrationActionsMenu } from './integration_actions_menu'; import { Integration } from '../../../common/data_streams_stats/integration'; import { Dashboard } from '../../../common/api_types'; -export function IntegrationSummary({ +// Allow for lazy loading +// eslint-disable-next-line import/no-default-export +export default function IntegrationSummary({ integration, dashboards, dashboardsLoading, @@ -60,7 +62,7 @@ export function IntegrationSummary({ isLoading: false, }, { - fieldTitle: flyoutIntegrationVersionText, + fieldTitle: integrationVersionText, fieldValue: version, isLoading: false, }, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/create_controller.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/create_controller.ts similarity index 88% rename from x-pack/plugins/observability_solution/dataset_quality/public/controller/create_controller.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/create_controller.ts index 3d8e808adfcfb7..7424e13b0f93cb 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/controller/create_controller.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/create_controller.ts @@ -10,13 +10,13 @@ import { getDevToolsOptions } from '@kbn/xstate-utils'; import equal from 'fast-deep-equal'; import { distinctUntilChanged, from, map } from 'rxjs'; import { interpret } from 'xstate'; -import { IDataStreamsStatsClient } from '../services/data_streams_stats'; -import { IDataStreamDetailsClient } from '../services/data_stream_details'; +import { IDataStreamsStatsClient } from '../../services/data_streams_stats'; +import { IDataStreamDetailsClient } from '../../services/data_stream_details'; import { createDatasetQualityControllerStateMachine, DEFAULT_CONTEXT, -} from '../state_machines/dataset_quality_controller'; -import { DatasetQualityStartDeps } from '../types'; +} from '../../state_machines/dataset_quality_controller'; +import { DatasetQualityStartDeps } from '../../types'; import { getContextFromPublicState, getPublicStateFromContext } from './public_state'; import { DatasetQualityController, DatasetQualityPublicStateUpdate } from './types'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/index.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/index.ts similarity index 100% rename from x-pack/plugins/observability_solution/dataset_quality/public/controller/index.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/index.ts diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/lazy_create_controller.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/lazy_create_controller.ts similarity index 100% rename from x-pack/plugins/observability_solution/dataset_quality/public/controller/lazy_create_controller.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/lazy_create_controller.ts diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/public_state.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/public_state.ts similarity index 96% rename from x-pack/plugins/observability_solution/dataset_quality/public/controller/public_state.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/public_state.ts index 9500b473c95edc..1bf0088bc7a485 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/controller/public_state.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/public_state.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { DatasetTableSortField, DegradedFieldSortField } from '../hooks'; +import { DatasetTableSortField, DegradedFieldSortField } from '../../hooks'; import { DatasetQualityControllerContext, DEFAULT_CONTEXT, -} from '../state_machines/dataset_quality_controller'; +} from '../../state_machines/dataset_quality_controller'; import { DatasetQualityPublicState, DatasetQualityPublicStateUpdate } from './types'; export const getPublicStateFromContext = ( diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/types.ts similarity index 96% rename from x-pack/plugins/observability_solution/dataset_quality/public/controller/types.ts rename to x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/types.ts index 66757d34095673..decb7454bd193b 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/controller/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/types.ts @@ -12,7 +12,7 @@ import { WithFlyoutOptions, WithTableOptions, DegradedFields, -} from '../state_machines/dataset_quality_controller'; +} from '../../state_machines/dataset_quality_controller'; export interface DatasetQualityController { state$: Observable; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/create_controller.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/create_controller.ts new file mode 100644 index 00000000000000..d51f60ef93c714 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/create_controller.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CoreStart } from '@kbn/core/public'; +import { getDevToolsOptions } from '@kbn/xstate-utils'; +import equal from 'fast-deep-equal'; +import { distinctUntilChanged, from, map } from 'rxjs'; +import { interpret } from 'xstate'; +import { createDatasetQualityDetailsControllerStateMachine } from '../../state_machines/dataset_quality_details_controller/state_machine'; +import { IDataStreamsStatsClient } from '../../services/data_streams_stats'; +import { IDataStreamDetailsClient } from '../../services/data_stream_details'; +import { DatasetQualityStartDeps } from '../../types'; +import { getContextFromPublicState, getPublicStateFromContext } from './public_state'; +import { DatasetQualityDetailsController, DatasetQualityDetailsPublicStateUpdate } from './types'; + +interface Dependencies { + core: CoreStart; + plugins: DatasetQualityStartDeps; + dataStreamStatsClient: IDataStreamsStatsClient; + dataStreamDetailsClient: IDataStreamDetailsClient; +} + +export const createDatasetQualityDetailsControllerFactory = + ({ core, plugins, dataStreamStatsClient, dataStreamDetailsClient }: Dependencies) => + async ({ + initialState, + }: { + initialState: DatasetQualityDetailsPublicStateUpdate; + }): Promise => { + const initialContext = getContextFromPublicState(initialState); + + const machine = createDatasetQualityDetailsControllerStateMachine({ + initialContext, + plugins, + toasts: core.notifications.toasts, + dataStreamStatsClient, + dataStreamDetailsClient, + }); + + const service = interpret(machine, { + devTools: getDevToolsOptions(), + }); + + const state$ = from(service).pipe( + map(({ context }) => getPublicStateFromContext(context)), + distinctUntilChanged(equal) + ); + + return { + state$, + service, + }; + }; + +export type CreateDatasetQualityDetailsControllerFactory = + typeof createDatasetQualityDetailsControllerFactory; +export type CreateDatasetQualityDetailsController = ReturnType< + typeof createDatasetQualityDetailsControllerFactory +>; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/index.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/index.ts new file mode 100644 index 00000000000000..d0e19da1736db0 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor 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 './create_controller'; +export * from './types'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/lazy_create_controller.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/lazy_create_controller.ts new file mode 100644 index 00000000000000..d134ce09b93981 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/lazy_create_controller.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { CreateDatasetQualityDetailsControllerFactory } from './create_controller'; + +export const createDatasetQualityDetailsControllerLazyFactory: CreateDatasetQualityDetailsControllerFactory = + (dependencies) => async (args) => { + const { createDatasetQualityDetailsControllerFactory } = await import('./create_controller'); + + return createDatasetQualityDetailsControllerFactory(dependencies)(args); + }; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/public_state.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/public_state.ts new file mode 100644 index 00000000000000..75f3337103e6f1 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/public_state.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DegradedFieldSortField } from '../../hooks'; +import { + DatasetQualityDetailsControllerContext, + DEFAULT_CONTEXT, +} from '../../state_machines/dataset_quality_details_controller'; +import { DatasetQualityDetailsPublicState, DatasetQualityDetailsPublicStateUpdate } from './types'; + +export const getPublicStateFromContext = ( + context: DatasetQualityDetailsControllerContext +): DatasetQualityDetailsPublicState => { + return { + dataStream: context.dataStream, + degradedFields: context.degradedFields, + timeRange: context.timeRange, + breakdownField: context.breakdownField, + integration: context.integration, + }; +}; + +export const getContextFromPublicState = ( + publicState: DatasetQualityDetailsPublicStateUpdate +): DatasetQualityDetailsControllerContext => ({ + ...DEFAULT_CONTEXT, + degradedFields: { + table: { + ...DEFAULT_CONTEXT.degradedFields.table, + ...publicState.degradedFields?.table, + sort: publicState.degradedFields?.table?.sort + ? { + ...publicState.degradedFields.table.sort, + field: publicState.degradedFields.table.sort.field as DegradedFieldSortField, + } + : DEFAULT_CONTEXT.degradedFields.table.sort, + }, + }, + timeRange: { + ...DEFAULT_CONTEXT.timeRange, + ...publicState.timeRange, + refresh: { + ...DEFAULT_CONTEXT.timeRange.refresh, + ...publicState.timeRange?.refresh, + }, + }, + dataStream: publicState.dataStream, +}); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/types.ts new file mode 100644 index 00000000000000..65ca53c073d42c --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/types.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Observable } from 'rxjs'; +import { + DatasetQualityDetailsControllerStateService, + DegradedFieldsTableConfig, + WithDefaultControllerState, +} from '../../state_machines/dataset_quality_details_controller'; + +type DegradedFieldTableSortOptions = Omit & { + field: string; +}; + +export type DatasetQualityDegradedFieldTableOptions = Partial< + Omit & { + sort?: DegradedFieldTableSortOptions; + } +>; + +export type DatasetQualityDetailsPublicState = WithDefaultControllerState; + +// This type is used by external consumers where it enforces datastream to be +// a must and everything else can be optional. The table inside the +// degradedFields must accept field property as string +export type DatasetQualityDetailsPublicStateUpdate = Partial< + Pick +> & { + dataStream: string; +} & { + degradedFields?: { + table?: DatasetQualityDegradedFieldTableOptions; + }; +}; + +export interface DatasetQualityDetailsController { + state$: Observable; + service: DatasetQualityDetailsControllerStateService; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/index.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/index.ts index 0fc332e68bf8da..5c746e2f1177b2 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/index.ts @@ -13,3 +13,7 @@ export * from './use_summary_panel'; export * from './use_create_dataview'; export * from './use_dataset_quality_degraded_field'; export * from './use_telemetry'; +export * from './use_dataset_quality_details_state'; +export * from './use_dataset_quality_details_redirect_link'; +export * from './use_degraded_fields'; +export * from './use_integration_actions'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_degraded_field.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_degraded_field.ts index ed95a0cd7fec98..d92aa5be153f66 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_degraded_field.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_degraded_field.ts @@ -16,8 +16,9 @@ import { } from '../../common/constants'; import { useKibanaContextForPlugin } from '../utils'; -export type DegradedFieldSortField = keyof DegradedField; +type DegradedFieldSortField = keyof DegradedField; +// TODO: DELETE this hook in favour of new hook post migration export function useDatasetQualityDegradedField() { const { service } = useDatasetQualityContext(); const { diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_redirect_link.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_redirect_link.ts new file mode 100644 index 00000000000000..3000d05aa34de1 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_redirect_link.ts @@ -0,0 +1,188 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + SINGLE_DATASET_LOCATOR_ID, + type SingleDatasetLocatorParams, +} from '@kbn/deeplinks-observability'; +import { type DiscoverAppLocatorParams, DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; +import { type Query, type AggregateQuery, buildPhraseFilter } from '@kbn/es-query'; +import { getRouterLinkProps } from '@kbn/router-utils'; +import type { RouterLinkProps } from '@kbn/router-utils/src/get_router_link_props'; +import type { LocatorPublic } from '@kbn/share-plugin/common'; +import type { LocatorClient } from '@kbn/shared-ux-prompt-no-data-views-types'; +import { useKibanaContextForPlugin } from '../utils'; +import { BasicDataStream, TimeRangeConfig } from '../../common/types'; + +export const useDatasetQualityDetailsRedirectLink = ({ + dataStreamStat, + query, + timeRangeConfig, + breakdownField, +}: { + dataStreamStat: T; + query?: Query | AggregateQuery; + timeRangeConfig: TimeRangeConfig; + breakdownField?: string; +}) => { + const { + services: { share }, + } = useKibanaContextForPlugin(); + + const { from, to } = timeRangeConfig; + + const logsExplorerLocator = + share.url.locators.get(SINGLE_DATASET_LOCATOR_ID); + + const config = logsExplorerLocator + ? buildLogsExplorerConfig({ + locator: logsExplorerLocator, + dataStreamStat, + query, + from, + to, + breakdownField, + }) + : buildDiscoverConfig({ + locatorClient: share.url.locators, + dataStreamStat, + query, + from, + to, + breakdownField, + }); + + return { + linkProps: { + ...config.routerLinkProps, + }, + navigate: config.navigate, + isLogsExplorerAvailable: !!logsExplorerLocator, + }; +}; + +const buildLogsExplorerConfig = ({ + locator, + dataStreamStat, + query, + from, + to, + breakdownField, +}: { + locator: LocatorPublic; + dataStreamStat: T; + query?: Query | AggregateQuery; + from: string; + to: string; + breakdownField?: string; +}): { + navigate: () => void; + routerLinkProps: RouterLinkProps; +} => { + const params: SingleDatasetLocatorParams = { + dataset: dataStreamStat.name, + timeRange: { + from, + to, + }, + integration: dataStreamStat.integration?.name, + query, + filterControls: { + namespace: { + mode: 'include', + values: [dataStreamStat.namespace], + }, + }, + breakdownField, + }; + + const urlToLogsExplorer = locator.getRedirectUrl(params); + + const navigateToLogsExplorer = () => { + locator.navigate(params) as Promise; + }; + + const logsExplorerLinkProps = getRouterLinkProps({ + href: urlToLogsExplorer, + onClick: navigateToLogsExplorer, + }); + + return { routerLinkProps: logsExplorerLinkProps, navigate: navigateToLogsExplorer }; +}; + +const buildDiscoverConfig = ({ + locatorClient, + dataStreamStat, + query, + from, + to, + breakdownField, +}: { + locatorClient: LocatorClient; + dataStreamStat: T; + query?: Query | AggregateQuery; + from: string; + to: string; + breakdownField?: string; +}): { + navigate: () => void; + routerLinkProps: RouterLinkProps; +} => { + const dataViewId = `${dataStreamStat.type}-${dataStreamStat.name}-*`; + const dataViewTitle = dataStreamStat.integration + ? `[${dataStreamStat.integration.title}] ${dataStreamStat.name}` + : `${dataViewId}`; + + const params: DiscoverAppLocatorParams = { + timeRange: { + from, + to, + }, + refreshInterval: { + pause: true, + value: 60000, + }, + dataViewId, + dataViewSpec: { + id: dataViewId, + title: dataViewTitle, + }, + query, + breakdownField, + columns: ['@timestamp', 'message'], + filters: [ + buildPhraseFilter( + { + name: 'data_stream.namespace', + type: 'string', + }, + dataStreamStat.namespace, + { + id: dataViewId, + title: dataViewTitle, + } + ), + ], + interval: 'auto', + sort: [['@timestamp', 'desc']], + }; + + const locator = locatorClient.get(DISCOVER_APP_LOCATOR); + + const urlToDiscover = locator?.getRedirectUrl(params); + + const navigateToDiscover = () => { + locator?.navigate(params) as Promise; + }; + + const discoverLinkProps = getRouterLinkProps({ + href: urlToDiscover, + onClick: navigateToDiscover, + }); + + return { routerLinkProps: discoverLinkProps, navigate: navigateToDiscover }; +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_state.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_state.ts new file mode 100644 index 00000000000000..4b0626f9515802 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_details_state.ts @@ -0,0 +1,135 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback } from 'react'; +import { useSelector } from '@xstate/react'; +import { OnRefreshProps } from '@elastic/eui'; +import { DEFAULT_DATEPICKER_REFRESH } from '../../common/constants'; +import { useDatasetQualityDetailsContext } from '../components/dataset_quality_details/context'; +import { indexNameToDataStreamParts } from '../../common/utils'; +import { BasicDataStream } from '../../common/types'; +import { useKibanaContextForPlugin } from '../utils'; + +export const useDatasetQualityDetailsState = () => { + const { service } = useDatasetQualityDetailsContext(); + + const { + services: { fieldFormats }, + } = useKibanaContextForPlugin(); + + const { dataStream, degradedFields, timeRange, breakdownField, isIndexNotFoundError } = + useSelector(service, (state) => state.context) ?? {}; + + const isNonAggregatable = useSelector(service, (state) => + state.matches('initializing.nonAggregatableDataset.done') + ? state.context.isNonAggregatable + : false + ); + + const isBreakdownFieldEcs = useSelector(service, (state) => + state.matches('initializing.checkBreakdownFieldIsEcs.done') + ? state.context.isBreakdownFieldEcs + : false + ); + + const dataStreamSettings = useSelector(service, (state) => + state.matches('initializing.dataStreamSettings.initializeIntegrations') + ? state.context.dataStreamSettings + : undefined + ); + + const integrationDetails = { + integration: useSelector(service, (state) => + state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDetails.done' + ) + ? state.context.integration + : undefined + ), + dashboard: useSelector(service, (state) => + state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.done' + ) + ? state.context.integrationDashboards + : undefined + ), + }; + + const canUserAccessDashboards = useSelector( + service, + (state) => + !state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.unauthorized' + ) + ); + + const canUserViewIntegrations = dataStreamSettings?.datasetUserPrivileges?.canViewIntegrations; + + const dataStreamDetails = useSelector(service, (state) => + state.matches('initializing.dataStreamDetails.done') + ? state.context.dataStreamDetails + : undefined + ); + + const { type, dataset, namespace } = indexNameToDataStreamParts(dataStream); + + const datasetDetails: BasicDataStream = { + type, + name: dataset, + namespace, + rawName: dataStream, + }; + + const loadingState = useSelector(service, (state) => ({ + nonAggregatableDatasetLoading: state.matches('initializing.nonAggregatableDataset.fetching'), + dataStreamDetailsLoading: state.matches('initializing.dataStreamDetails.fetching'), + dataStreamSettingsLoading: state.matches('initializing.dataStreamSettings.fetching'), + integrationDetailsLoadings: state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDetails.fetching' + ), + integrationDetailsLoaded: state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDetails.done' + ), + integrationDashboardsLoading: state.matches( + 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.fetching' + ), + })); + + const updateTimeRange = useCallback( + ({ start, end, refreshInterval }: OnRefreshProps) => { + service.send({ + type: 'UPDATE_TIME_RANGE', + timeRange: { + from: start, + to: end, + refresh: { ...DEFAULT_DATEPICKER_REFRESH, value: refreshInterval }, + }, + }); + }, + [service] + ); + + return { + service, + fieldFormats, + isIndexNotFoundError, + dataStream, + datasetDetails, + degradedFields, + dataStreamDetails, + breakdownField, + isBreakdownFieldEcs, + isNonAggregatable, + timeRange, + loadingState, + updateTimeRange, + dataStreamSettings, + integrationDetails, + canUserAccessDashboards, + canUserViewIntegrations, + }; +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_flyout.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_flyout.tsx index 88bf869a5a2a92..0f9d7981e619ce 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_flyout.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_flyout.tsx @@ -18,7 +18,7 @@ export const useDatasetQualityFlyout = () => { const { dataset: dataStreamStat, - datasetSettings: dataStreamSettings, + dataStreamSettings, datasetDetails: dataStreamDetails, insightsTimeRange, breakdownField, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx index 347f817f7bf0f3..b205a58dfb98ff 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_dataset_quality_table.tsx @@ -134,6 +134,7 @@ export const useDatasetQualityTable = () => { showFullDatasetNames, isSizeStatsAvailable, isActiveDataset: isActive, + timeRange, }), [ fieldFormats, @@ -146,6 +147,7 @@ export const useDatasetQualityTable = () => { showFullDatasetNames, isSizeStatsAvailable, isActive, + timeRange, ] ); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs.ts new file mode 100644 index 00000000000000..7842fe81966f35 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs.ts @@ -0,0 +1,189 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useState, useMemo, useEffect } from 'react'; +import type { Action } from '@kbn/ui-actions-plugin/public'; +import { fieldSupportsBreakdown } from '@kbn/unified-histogram-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { useEuiTheme } from '@elastic/eui'; +import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; +import { DEFAULT_LOGS_DATA_VIEW } from '../../common/constants'; +import { useCreateDataView } from './use_create_dataview'; +import { useKibanaContextForPlugin } from '../utils'; +import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; +import { getLensAttributes } from '../components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes'; +import { useDatasetQualityDetailsRedirectLink } from './use_dataset_quality_details_redirect_link'; + +const exploreDataInLogsExplorerText = i18n.translate( + 'xpack.datasetQuality.details.chartExploreDataInLogsExplorerText', + { + defaultMessage: 'Explore data in Logs Explorer', + } +); + +const exploreDataInDiscoverText = i18n.translate( + 'xpack.datasetQuality.details.chartExploreDataInDiscoverText', + { + defaultMessage: 'Explore data in Discover', + } +); + +const openInLensText = i18n.translate('xpack.datasetQuality.details.chartOpenInLensText', { + defaultMessage: 'Open in Lens', +}); + +const ACTION_EXPLORE_IN_LOGS_EXPLORER = 'ACTION_EXPLORE_IN_LOGS_EXPLORER'; +const ACTION_OPEN_IN_LENS = 'ACTION_OPEN_IN_LENS'; + +export const useDegradedDocs = () => { + const { euiTheme } = useEuiTheme(); + const { + services: { lens }, + } = useKibanaContextForPlugin(); + const { service, dataStream, datasetDetails, timeRange, breakdownField, integrationDetails } = + useDatasetQualityDetailsState(); + + const [isChartLoading, setIsChartLoading] = useState(undefined); + const [attributes, setAttributes] = useState | undefined>( + undefined + ); + + const { dataView } = useCreateDataView({ + indexPatternString: getDataViewIndexPattern(dataStream), + }); + + const breakdownDataViewField = useMemo( + () => getDataViewField(dataView, breakdownField), + [breakdownField, dataView] + ); + + const handleChartLoading = (isLoading: boolean) => { + setIsChartLoading(isLoading); + }; + + const handleBreakdownFieldChange = useCallback( + (field: DataViewField | undefined) => { + service.send({ + type: 'BREAKDOWN_FIELD_CHANGE', + breakdownField: field?.name, + }); + }, + [service] + ); + + useEffect(() => { + const dataStreamName = dataStream ?? DEFAULT_LOGS_DATA_VIEW; + const datasetTitle = + integrationDetails?.integration?.datasets?.[datasetDetails.name] ?? datasetDetails.name; + + const lensAttributes = getLensAttributes({ + color: euiTheme.colors.danger, + dataStream: dataStreamName, + datasetTitle, + breakdownFieldName: breakdownDataViewField?.name, + }); + setAttributes(lensAttributes); + }, [ + breakdownDataViewField?.name, + euiTheme.colors.danger, + setAttributes, + dataStream, + integrationDetails?.integration?.datasets, + datasetDetails.name, + ]); + + const openInLensCallback = useCallback(() => { + if (attributes) { + lens.navigateToPrefilledEditor({ + id: '', + timeRange, + attributes, + }); + } + }, [attributes, lens, timeRange]); + + const getOpenInLensAction = useMemo(() => { + return { + id: ACTION_OPEN_IN_LENS, + type: 'link', + order: 17, + getDisplayName(): string { + return openInLensText; + }, + getIconType(): string { + return 'visArea'; + }, + async isCompatible(): Promise { + return true; + }, + async execute(): Promise { + return openInLensCallback(); + }, + }; + }, [openInLensCallback]); + + const redirectLinkProps = useDatasetQualityDetailsRedirectLink({ + dataStreamStat: datasetDetails, + query: { language: 'kuery', query: '_ignored:*' }, + timeRangeConfig: timeRange, + breakdownField: breakdownDataViewField?.name, + }); + + const getOpenInLogsExplorerAction = useMemo(() => { + return { + id: ACTION_EXPLORE_IN_LOGS_EXPLORER, + type: 'link', + getDisplayName(): string { + return redirectLinkProps?.isLogsExplorerAvailable + ? exploreDataInLogsExplorerText + : exploreDataInDiscoverText; + }, + getHref: async () => { + return redirectLinkProps.linkProps.href; + }, + getIconType(): string | undefined { + return 'visTable'; + }, + async isCompatible(): Promise { + return true; + }, + async execute(): Promise { + return redirectLinkProps.navigate(); + }, + order: 18, + }; + }, [redirectLinkProps]); + + const extraActions: Action[] = [getOpenInLensAction, getOpenInLogsExplorerAction]; + + return { + attributes, + dataView, + breakdown: { + dataViewField: breakdownDataViewField, + fieldSupportsBreakdown: breakdownDataViewField + ? fieldSupportsBreakdown(breakdownDataViewField) + : true, + onChange: handleBreakdownFieldChange, + }, + extraActions, + isChartLoading, + onChartLoading: handleChartLoading, + setAttributes, + setIsChartLoading, + }; +}; + +function getDataViewIndexPattern(dataStream: string | undefined) { + return dataStream ?? DEFAULT_LOGS_DATA_VIEW; +} + +function getDataViewField(dataView: DataView | undefined, fieldName: string | undefined) { + return fieldName && dataView + ? dataView.fields.find((field) => field.name === fieldName) + : undefined; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs_chart.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs_chart.tsx index 682f0205c7438c..6840f2a4088a92 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs_chart.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_docs_chart.tsx @@ -14,12 +14,12 @@ import { useEuiTheme } from '@elastic/eui'; import { type DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { useDatasetQualityContext } from '../components/dataset_quality/context'; import { DEFAULT_LOGS_DATA_VIEW } from '../../common/constants'; -import { getLensAttributes } from '../components/flyout/degraded_docs_trend/lens_attributes'; import { useCreateDataView } from './use_create_dataview'; import { useRedirectLink } from './use_redirect_link'; import { useDatasetQualityFlyout } from './use_dataset_quality_flyout'; import { useKibanaContextForPlugin } from '../utils'; import { useDatasetDetailsTelemetry } from './use_telemetry'; +import { getLensAttributes } from '../components/dataset_quality_details/overview/document_trends/degraded_docs/lens_attributes'; const exploreDataInLogsExplorerText = i18n.translate( 'xpack.datasetQuality.flyoutChartExploreDataInLogsExplorerText', diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_fields.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_fields.ts new file mode 100644 index 00000000000000..86aed2df771208 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_degraded_fields.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { useSelector } from '@xstate/react'; +import { useCallback, useMemo } from 'react'; +import { orderBy } from 'lodash'; +import { DegradedField } from '../../common/data_streams_stats'; +import { SortDirection } from '../../common/types'; +import { + DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + DEFAULT_DEGRADED_FIELD_SORT_FIELD, +} from '../../common/constants'; +import { useKibanaContextForPlugin } from '../utils'; +import { useDatasetQualityDetailsState } from './use_dataset_quality_details_state'; + +export type DegradedFieldSortField = keyof DegradedField; + +export function useDegradedFields() { + const { service } = useDatasetQualityDetailsState(); + const { + services: { fieldFormats }, + } = useKibanaContextForPlugin(); + + const degradedFields = useSelector(service, (state) => state.context.degradedFields) ?? {}; + const { data, table } = degradedFields; + const { page, rowsPerPage, sort } = table; + + const totalItemCount = data?.length ?? 0; + + const pagination = { + pageIndex: page, + pageSize: rowsPerPage, + totalItemCount, + hidePerPageOptions: true, + }; + + const onTableChange = useCallback( + (options: { + page: { index: number; size: number }; + sort?: { field: DegradedFieldSortField; direction: SortDirection }; + }) => { + service.send({ + type: 'UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA', + degraded_field_criteria: { + page: options.page.index, + rowsPerPage: options.page.size, + sort: { + field: options.sort?.field || DEFAULT_DEGRADED_FIELD_SORT_FIELD, + direction: options.sort?.direction || DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + }, + }, + }); + }, + [service] + ); + + const renderedItems = useMemo(() => { + const sortedItems = orderBy(data, sort.field, sort.direction); + return sortedItems.slice(page * rowsPerPage, (page + 1) * rowsPerPage); + }, [data, sort.field, sort.direction, page, rowsPerPage]); + + const isLoading = useSelector(service, (state) => + state.matches('initializing.dataStreamDegradedFields.fetching') + ); + + return { + isLoading, + pagination, + onTableChange, + renderedItems, + sort: { sort }, + fieldFormats, + totalItemCount, + }; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_integration_actions.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_integration_actions.ts new file mode 100644 index 00000000000000..0fce743875a605 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_integration_actions.ts @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getRouterLinkProps } from '@kbn/router-utils'; +import { useMemo, useCallback } from 'react'; +import useToggle from 'react-use/lib/useToggle'; +import { MANAGEMENT_APP_LOCATOR } from '@kbn/deeplinks-management/constants'; +import { DASHBOARD_APP_LOCATOR } from '@kbn/deeplinks-analytics'; +import { useKibanaContextForPlugin } from '../utils'; +import { Dashboard } from '../../common/api_types'; + +export const useIntegrationActions = () => { + const { + services: { + application: { navigateToUrl }, + http: { basePath }, + share, + }, + } = useKibanaContextForPlugin(); + + const [isOpen, toggleIsOpen] = useToggle(false); + + const dashboardLocator = useMemo( + () => share.url.locators.get(DASHBOARD_APP_LOCATOR), + [share.url.locators] + ); + const indexManagementLocator = useMemo( + () => share.url.locators.get(MANAGEMENT_APP_LOCATOR), + [share.url.locators] + ); + + const handleCloseMenu = useCallback(() => { + toggleIsOpen(); + }, [toggleIsOpen]); + const handleToggleMenu = useCallback(() => { + toggleIsOpen(); + }, [toggleIsOpen]); + + const getIntegrationOverviewLinkProps = useCallback( + (name: string, version: string) => { + const href = basePath.prepend(`/app/integrations/detail/${name}-${version}/overview`); + return getRouterLinkProps({ + href, + onClick: () => { + return navigateToUrl(href); + }, + }); + }, + [basePath, navigateToUrl] + ); + const getIndexManagementLinkProps = useCallback( + (params: { sectionId: string; appId: string }) => + getRouterLinkProps({ + href: indexManagementLocator?.getRedirectUrl(params), + onClick: () => { + return indexManagementLocator?.navigate(params); + }, + }), + [indexManagementLocator] + ); + const getDashboardLinkProps = useCallback( + (dashboard: Dashboard) => + getRouterLinkProps({ + href: dashboardLocator?.getRedirectUrl({ dashboardId: dashboard?.id } || ''), + onClick: () => { + return dashboardLocator?.navigate({ dashboardId: dashboard?.id } || ''); + }, + }), + [dashboardLocator] + ); + + return { + isOpen, + handleCloseMenu, + handleToggleMenu, + getIntegrationOverviewLinkProps, + getIndexManagementLinkProps, + getDashboardLinkProps, + }; +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_overview_summary_panel.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_overview_summary_panel.ts new file mode 100644 index 00000000000000..5cdd820c9b4aea --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_overview_summary_panel.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 { useSelector } from '@xstate/react'; +import { formatNumber } from '@elastic/eui'; +import { BYTE_NUMBER_FORMAT, MAX_HOSTS_METRIC_VALUE, NUMBER_FORMAT } from '../../common/constants'; +import { useDatasetQualityDetailsContext } from '../components/dataset_quality_details/context'; + +export const useOverviewSummaryPanel = () => { + const { service } = useDatasetQualityDetailsContext(); + const context = useSelector(service, (state) => state.context) ?? {}; + + const isSummaryPanelLoading = useSelector(service, (state) => + state.matches('initializing.dataStreamDetails.fetching') + ); + + const dataStreamDetails = 'dataStreamDetails' in context ? context.dataStreamDetails : {}; + + const services = dataStreamDetails?.services ?? {}; + const serviceKeys = Object.keys(services); + const totalServicesCount = serviceKeys + .map((key: string) => services[key].length) + .reduce((a, b) => a + b, 0); + + const totalDocsCount = formatNumber(dataStreamDetails?.docsCount ?? 0, NUMBER_FORMAT); + + const sizeInBytesAvailable = dataStreamDetails?.sizeBytes !== null; + const sizeInBytes = formatNumber(dataStreamDetails?.sizeBytes ?? 0, BYTE_NUMBER_FORMAT); + const isUserAllowedToSeeSizeInBytes = dataStreamDetails?.userPrivileges?.canMonitor ?? true; + + const hosts = dataStreamDetails?.hosts ?? {}; + const hostKeys = Object.keys(hosts); + const countOfHosts = hostKeys + .map((key: string) => hosts[key].length) + .reduce( + ({ count, anyHostExceedsMax }, hostCount) => ({ + count: count + hostCount, + anyHostExceedsMax: anyHostExceedsMax || hostCount > MAX_HOSTS_METRIC_VALUE, + }), + { count: 0, anyHostExceedsMax: false } + ); + + const totalHostsCount = formatMetricValueForMax( + countOfHosts.anyHostExceedsMax ? countOfHosts.count + 1 : countOfHosts.count, + countOfHosts.count, + NUMBER_FORMAT + ); + + const totalDegradedDocsCount = formatNumber( + dataStreamDetails?.degradedDocsCount ?? 0, + NUMBER_FORMAT + ); + + return { + totalDocsCount, + sizeInBytesAvailable, + sizeInBytes, + isUserAllowedToSeeSizeInBytes, + totalServicesCount, + totalHostsCount, + isSummaryPanelLoading, + totalDegradedDocsCount, + }; +}; + +/** + * Formats a metric value to show a '+' sign if it's above a max value e.g. 50+ + */ +function formatMetricValueForMax(value: number, max: number, numberFormat: string): string { + const exceedsMax = value > max; + const valueToShow = exceedsMax ? max : value; + return `${formatNumber(valueToShow, numberFormat)}${exceedsMax ? '+' : ''}`; +} diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts index 4a4c6772c412c2..e4fbf0771ee1f6 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_redirect_link.ts @@ -16,11 +16,8 @@ import { getRouterLinkProps } from '@kbn/router-utils'; import { RouterLinkProps } from '@kbn/router-utils/src/get_router_link_props'; import { LocatorPublic } from '@kbn/share-plugin/common'; import { LocatorClient } from '@kbn/shared-ux-prompt-no-data-views-types'; -import { useSelector } from '@xstate/react'; -import { useDatasetQualityContext } from '../components/dataset_quality/context'; -import { TimeRangeConfig } from '../state_machines/dataset_quality_controller'; import { useKibanaContextForPlugin } from '../utils'; -import { BasicDataStream } from '../../common/types'; +import { BasicDataStream, TimeRangeConfig } from '../../common/types'; import { useRedirectLinkTelemetry } from './use_telemetry'; export const useRedirectLink = ({ @@ -32,7 +29,7 @@ export const useRedirectLink = ({ }: { dataStreamStat: T; query?: Query | AggregateQuery; - timeRangeConfig?: TimeRangeConfig; + timeRangeConfig: TimeRangeConfig; breakdownField?: string; telemetry?: Parameters[0]['telemetry']; }) => { @@ -40,9 +37,7 @@ export const useRedirectLink = ({ services: { share }, } = useKibanaContextForPlugin(); - const { service } = useDatasetQualityContext(); - const { timeRange } = useSelector(service, (state) => state.context.filters); - const { from, to } = timeRangeConfig || timeRange; + const { from, to } = timeRangeConfig; const logsExplorerLocator = share.url.locators.get(SINGLE_DATASET_LOCATOR_ID); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_telemetry.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_telemetry.tsx index f32deb8e3b2c28..c473495c0a661d 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_telemetry.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/hooks/use_telemetry.tsx @@ -22,9 +22,10 @@ import { DatasetNavigatedEbtProps, DatasetEbtProps, } from '../services/telemetry'; -import { FlyoutDataset, TimeRangeConfig } from '../state_machines/dataset_quality_controller'; +import { FlyoutDataset } from '../state_machines/dataset_quality_controller'; import { useDatasetQualityContext } from '../components/dataset_quality/context'; import { useDatasetQualityFilters } from './use_dataset_quality_filters'; +import { TimeRangeConfig } from '../../common/types'; export const useRedirectLinkTelemetry = ({ rawName, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/plugin.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/plugin.tsx index d24408a85532d8..6cb4c129754128 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/plugin.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/plugin.tsx @@ -8,7 +8,9 @@ import { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; import { TelemetryService } from './services/telemetry'; import { createDatasetQuality } from './components/dataset_quality'; -import { createDatasetQualityControllerLazyFactory } from './controller/lazy_create_controller'; +import { createDatasetQualityDetails } from './components/dataset_quality_details'; +import { createDatasetQualityControllerLazyFactory } from './controller/dataset_quality/lazy_create_controller'; +import { createDatasetQualityDetailsControllerLazyFactory } from './controller/dataset_quality_details/lazy_create_controller'; import { DataStreamsStatsService } from './services/data_streams_stats'; import { DataStreamDetailsService } from './services/data_stream_details'; import { @@ -22,6 +24,7 @@ export class DatasetQualityPlugin implements Plugin { private telemetry = new TelemetryService(); + constructor(context: PluginInitializerContext) {} public setup(core: CoreSetup, plugins: DatasetQualitySetupDeps) { @@ -54,6 +57,24 @@ export class DatasetQualityPlugin dataStreamDetailsClient, }); - return { DatasetQuality, createDatasetQualityController }; + const DatasetQualityDetails = createDatasetQualityDetails({ + core, + plugins, + telemetryClient, + }); + + const createDatasetQualityDetailsController = createDatasetQualityDetailsControllerLazyFactory({ + core, + plugins, + dataStreamStatsClient, + dataStreamDetailsClient, + }); + + return { + DatasetQuality, + createDatasetQualityController, + DatasetQualityDetails, + createDatasetQualityDetailsController, + }; } } diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts index a5813b3190351e..55d21286d7f602 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_stream_details/data_stream_details_client.ts @@ -25,13 +25,12 @@ import { GetDataStreamDetailsResponse, GetDataStreamSettingsParams, GetDataStreamSettingsResponse, - GetDataStreamsStatsError, GetIntegrationDashboardsParams, } from '../../../common/data_streams_stats'; import { IDataStreamDetailsClient } from './types'; -import { GetDataStreamsDetailsError } from '../../../common/data_stream_details'; import { Integration } from '../../../common/data_streams_stats/integration'; import { GetDataStreamIntegrationParams } from '../../../common/data_stream_details/types'; +import { DatasetQualityError } from '../../../common/errors'; export class DataStreamDetailsClient implements IDataStreamDetailsClient { constructor(private readonly http: HttpStart) {} @@ -42,16 +41,13 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { `/internal/dataset_quality/data_streams/${dataStream}/settings` ) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch data stream settings": ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch data stream settings": ${error}`, error); }); const dataStreamSettings = decodeOrThrow( getDataStreamsSettingsResponseRt, (message: string) => - new GetDataStreamsStatsError(`Failed to decode data stream settings response: ${message}"`) + new DatasetQualityError(`Failed to decode data stream settings response: ${message}"`) )(response); return dataStreamSettings as DataStreamSettings; @@ -66,16 +62,13 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { } ) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch data stream details": ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch data stream details": ${error}`, error); }); const dataStreamDetails = decodeOrThrow( getDataStreamsDetailsResponseRt, (message: string) => - new GetDataStreamsStatsError(`Failed to decode data stream details response: ${message}"`) + new DatasetQualityError(`Failed to decode data stream details response: ${message}"`) )(response); return dataStreamDetails as DataStreamDetails; @@ -94,16 +87,16 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { } ) .catch((error) => { - throw new GetDataStreamsDetailsError( + throw new DatasetQualityError( `Failed to fetch data stream degraded fields": ${error}`, - error.body.statusCode + error ); }); return decodeOrThrow( getDataStreamDegradedFieldsResponseRt, (message: string) => - new GetDataStreamsDetailsError( + new DatasetQualityError( `Failed to decode data stream degraded fields response: ${message}"` ) )(response); @@ -115,18 +108,13 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { `/internal/dataset_quality/integrations/${integration}/dashboards` ) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch integration dashboards": ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch integration dashboards": ${error}`, error); }); const { dashboards } = decodeOrThrow( integrationDashboardsRT, (message: string) => - new GetDataStreamsStatsError( - `Failed to decode integration dashboards response: ${message}"` - ) + new DatasetQualityError(`Failed to decode integration dashboards response: ${message}"`) )(response); return dashboards; @@ -141,16 +129,13 @@ export class DataStreamDetailsClient implements IDataStreamDetailsClient { query: { type }, }) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch integrations: ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch integrations: ${error}`, error); }); const { integrations } = decodeOrThrow( getIntegrationsResponseRt, (message: string) => - new GetDataStreamsStatsError(`Failed to decode integrations response: ${message}`) + new DatasetQualityError(`Failed to decode integrations response: ${message}`) )(response); const integration = integrations.find((i) => i.name === integrationName); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts index bbce86404e1ddb..35cd67a1724f99 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/data_streams_stats_client.ts @@ -13,21 +13,21 @@ import { getIntegrationsResponseRt, getNonAggregatableDatasetsRt, IntegrationResponse, + NonAggregatableDatasets, } from '../../../common/api_types'; import { DEFAULT_DATASET_TYPE } from '../../../common/constants'; import { DataStreamStatServiceResponse, GetDataStreamsDegradedDocsStatsQuery, GetDataStreamsDegradedDocsStatsResponse, - GetDataStreamsStatsError, GetDataStreamsStatsQuery, GetDataStreamsStatsResponse, GetIntegrationsParams, GetNonAggregatableDataStreamsParams, - GetNonAggregatableDataStreamsResponse, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; import { IDataStreamsStatsClient } from './types'; +import { DatasetQualityError } from '../../../common/errors'; export class DataStreamsStatsClient implements IDataStreamsStatsClient { constructor(private readonly http: HttpStart) {} @@ -40,16 +40,13 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { query: params, }) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch data streams stats: ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch data streams stats: ${error}`, error); }); const { dataStreamsStats, datasetUserPrivileges } = decodeOrThrow( getDataStreamsStatsResponseRt, (message: string) => - new GetDataStreamsStatsError(`Failed to decode data streams stats response: ${message}`) + new DatasetQualityError(`Failed to decode data streams stats response: ${message}`) )(response); return { dataStreamsStats, datasetUserPrivileges }; @@ -67,16 +64,16 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { } ) .catch((error) => { - throw new GetDataStreamsStatsError( + throw new DatasetQualityError( `Failed to fetch data streams degraded stats: ${error}`, - error.body.statusCode + error ); }); const { degradedDocs } = decodeOrThrow( getDataStreamsDegradedDocsStatsResponseRt, (message: string) => - new GetDataStreamsStatsError( + new DatasetQualityError( `Failed to decode data streams degraded docs stats response: ${message}` ) )(response); @@ -86,26 +83,20 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { public async getNonAggregatableDatasets(params: GetNonAggregatableDataStreamsParams) { const response = await this.http - .get( - '/internal/dataset_quality/data_streams/non_aggregatable', - { - query: { - ...params, - type: DEFAULT_DATASET_TYPE, - }, - } - ) + .get('/internal/dataset_quality/data_streams/non_aggregatable', { + query: { + ...params, + type: DEFAULT_DATASET_TYPE, + }, + }) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch non aggregatable datasets: ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch non aggregatable datasets: ${error}`, error); }); const nonAggregatableDatasets = decodeOrThrow( getNonAggregatableDatasetsRt, (message: string) => - new GetDataStreamsStatsError(`Failed to fetch non aggregatable datasets: ${message}`) + new DatasetQualityError(`Failed to fetch non aggregatable datasets: ${message}`) )(response); return nonAggregatableDatasets; @@ -119,16 +110,13 @@ export class DataStreamsStatsClient implements IDataStreamsStatsClient { query: params, }) .catch((error) => { - throw new GetDataStreamsStatsError( - `Failed to fetch integrations: ${error}`, - error.body.statusCode - ); + throw new DatasetQualityError(`Failed to fetch integrations: ${error}`, error); }); const { integrations } = decodeOrThrow( getIntegrationsResponseRt, (message: string) => - new GetDataStreamsStatsError(`Failed to decode integrations response: ${message}`) + new DatasetQualityError(`Failed to decode integrations response: ${message}`) )(response); return integrations.map(Integration.create); diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts index ba1f9077f45b04..785cdb4a88ccce 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/services/data_streams_stats/types.ts @@ -13,9 +13,9 @@ import { GetDataStreamsStatsQuery, GetIntegrationsParams, GetNonAggregatableDataStreamsParams, - GetNonAggregatableDataStreamsResponse, } from '../../../common/data_streams_stats'; import { Integration } from '../../../common/data_streams_stats/integration'; +import { NonAggregatableDatasets } from '../../../common/api_types'; export type DataStreamsStatsServiceSetup = void; @@ -35,5 +35,5 @@ export interface IDataStreamsStatsClient { getIntegrations(params: GetIntegrationsParams['query']): Promise; getNonAggregatableDatasets( params: GetNonAggregatableDataStreamsParams - ): Promise; + ): Promise; } diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/common/notifications.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/common/notifications.ts new file mode 100644 index 00000000000000..9ec9f71e122cf5 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/common/notifications.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IToasts } from '@kbn/core-notifications-browser'; +import { i18n } from '@kbn/i18n'; + +export const fetchNonAggregatableDatasetsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.fetchNonAggregatableDatasetsFailed', { + defaultMessage: "We couldn't get non aggregatable datasets information.", + }), + text: error.message, + }); +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts index fe83caafce2507..f10ea32da3af6a 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/notifications.ts @@ -26,15 +26,6 @@ export const fetchDatasetDetailsFailedNotifier = (toasts: IToasts, error: Error) }); }; -export const fetchDatasetSettingsFailedNotifier = (toasts: IToasts, error: Error) => { - toasts.addDanger({ - title: i18n.translate('xpack.datasetQuality.fetchDatasetSettingsFailed', { - defaultMessage: "Data set settings couldn't be loaded.", - }), - text: error.message, - }); -}; - export const fetchDegradedStatsFailedNotifier = (toasts: IToasts, error: Error) => { toasts.addDanger({ title: i18n.translate('xpack.datasetQuality.fetchDegradedStatsFailed', { @@ -53,15 +44,6 @@ export const fetchNonAggregatableDatasetsFailedNotifier = (toasts: IToasts, erro }); }; -export const fetchIntegrationDashboardsFailedNotifier = (toasts: IToasts, error: Error) => { - toasts.addDanger({ - title: i18n.translate('xpack.datasetQuality.fetchIntegrationDashboardsFailed', { - defaultMessage: "We couldn't get your integration dashboards.", - }), - text: error.message, - }); -}; - export const fetchIntegrationsFailedNotifier = (toasts: IToasts, error: Error) => { toasts.addDanger({ title: i18n.translate('xpack.datasetQuality.fetchIntegrationsFailed', { @@ -71,22 +53,6 @@ export const fetchIntegrationsFailedNotifier = (toasts: IToasts, error: Error) = }); }; -export const fetchDataStreamIntegrationFailedNotifier = ( - toasts: IToasts, - error: Error, - integrationName?: string -) => { - toasts.addDanger({ - title: i18n.translate('xpack.datasetQuality.flyout.fetchIntegrationsFailed', { - defaultMessage: "We couldn't get {integrationName} integration info.", - values: { - integrationName, - }, - }), - text: error.message, - }); -}; - export const noDatasetSelected = i18n.translate( 'xpack.datasetQuality.fetchDatasetDetailsFailed.noDatasetSelected', { @@ -96,7 +62,7 @@ export const noDatasetSelected = i18n.translate( export const assertBreakdownFieldEcsFailedNotifier = (toasts: IToasts, error: Error) => { toasts.addDanger({ - title: i18n.translate('xpack.datasetQuality. assertBreakdownFieldEcsFailed', { + title: i18n.translate('xpack.datasetQuality.assertBreakdownFieldEcsFailed', { defaultMessage: "We couldn't retrieve breakdown field metadata.", }), text: error.message, diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts index e2a6eda4d0e6e4..fb6c03fae153af 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/state_machine.ts @@ -9,7 +9,12 @@ import { IToasts } from '@kbn/core/public'; import { getDateISORange } from '@kbn/timerange'; import { assign, createMachine, DoneInvokeEvent, InterpreterFrom } from 'xstate'; import { DatasetQualityStartDeps } from '../../../types'; -import { Dashboard, DataStreamStat, DegradedFieldResponse } from '../../../../common/api_types'; +import { + Dashboard, + DataStreamStat, + DegradedFieldResponse, + NonAggregatableDatasets, +} from '../../../../common/api_types'; import { Integration } from '../../../../common/data_streams_stats/integration'; import { IDataStreamDetailsClient } from '../../../services/data_stream_details'; import { @@ -18,7 +23,6 @@ import { GetDataStreamsStatsQuery, GetIntegrationsParams, GetNonAggregatableDataStreamsParams, - GetNonAggregatableDataStreamsResponse, DataStreamStatServiceResponse, } from '../../../../common/data_streams_stats'; import { DegradedDocsStat } from '../../../../common/data_streams_stats/malformed_docs_stat'; @@ -28,17 +32,14 @@ import { IDataStreamsStatsClient } from '../../../services/data_streams_stats'; import { generateDatasets } from '../../../utils'; import { DEFAULT_CONTEXT } from './defaults'; import { - fetchDatasetSettingsFailedNotifier, fetchDatasetDetailsFailedNotifier, fetchDatasetStatsFailedNotifier, fetchDegradedStatsFailedNotifier, - fetchIntegrationDashboardsFailedNotifier, fetchIntegrationsFailedNotifier, noDatasetSelected, - fetchNonAggregatableDatasetsFailedNotifier, - fetchDataStreamIntegrationFailedNotifier, assertBreakdownFieldEcsFailedNotifier, } from './notifications'; +import { fetchNonAggregatableDatasetsFailedNotifier } from '../../common/notifications'; import { DatasetQualityControllerContext, DatasetQualityControllerEvent, @@ -46,6 +47,11 @@ import { DefaultDatasetQualityControllerState, FlyoutDataset, } from './types'; +import { + fetchDataStreamSettingsFailedNotifier, + fetchIntegrationDashboardsFailedNotifier, + fetchDataStreamIntegrationFailedNotifier, +} from '../../dataset_quality_details_controller/notifications'; export const createPureDatasetQualityControllerStateMachine = ( initialContext: DatasetQualityControllerContext @@ -269,7 +275,7 @@ export const createPureDatasetQualityControllerStateMachine = ( }, onError: { target: 'done', - actions: ['notifyFetchDatasetSettingsFailed'], + actions: ['notifyFetchDataStreamSettingsFailed'], }, }, }, @@ -628,7 +634,7 @@ export const createPureDatasetQualityControllerStateMachine = ( storeNonAggregatableDatasets: assign( ( _context: DefaultDatasetQualityControllerState, - event: DoneInvokeEvent + event: DoneInvokeEvent ) => { return 'data' in event ? { @@ -642,7 +648,7 @@ export const createPureDatasetQualityControllerStateMachine = ( ? { flyout: { ...context.flyout, - datasetSettings: (event.data ?? {}) as DataStreamSettings, + dataStreamSettings: (event.data ?? {}) as DataStreamSettings, }, } : {}; @@ -660,7 +666,7 @@ export const createPureDatasetQualityControllerStateMachine = ( storeDatasetIsNonAggregatable: assign( ( context: DefaultDatasetQualityControllerState, - event: DoneInvokeEvent + event: DoneInvokeEvent ) => { return 'data' in event ? { @@ -758,8 +764,8 @@ export const createDatasetQualityControllerStateMachine = ({ fetchDegradedStatsFailedNotifier(toasts, event.data), notifyFetchNonAggregatableDatasetsFailed: (_context, event: DoneInvokeEvent) => fetchNonAggregatableDatasetsFailedNotifier(toasts, event.data), - notifyFetchDatasetSettingsFailed: (_context, event: DoneInvokeEvent) => - fetchDatasetSettingsFailedNotifier(toasts, event.data), + notifyFetchDataStreamSettingsFailed: (_context, event: DoneInvokeEvent) => + fetchDataStreamSettingsFailedNotifier(toasts, event.data), notifyFetchDatasetDetailsFailed: (_context, event: DoneInvokeEvent) => fetchDatasetDetailsFailedNotifier(toasts, event.data), notifyFetchIntegrationDashboardsFailed: (_context, event: DoneInvokeEvent) => @@ -767,7 +773,7 @@ export const createDatasetQualityControllerStateMachine = ({ notifyFetchIntegrationsFailed: (_context, event: DoneInvokeEvent) => fetchIntegrationsFailedNotifier(toasts, event.data), notifyFetchDatasetIntegrationsFailed: (context, event: DoneInvokeEvent) => { - const integrationName = context.flyout.datasetSettings?.integration; + const integrationName = context.flyout.dataStreamSettings?.integration; return fetchDataStreamIntegrationFailedNotifier(toasts, event.data, integrationName); }, notifyAssertBreakdownFieldEcsFailed: (_context, event: DoneInvokeEvent) => @@ -826,7 +832,7 @@ export const createDatasetQualityControllerStateMachine = ({ }, loadDataStreamSettings: (context) => { if (!context.flyout.dataset) { - fetchDatasetSettingsFailedNotifier(toasts, new Error(noDatasetSelected)); + fetchDataStreamSettingsFailedNotifier(toasts, new Error(noDatasetSelected)); return Promise.resolve({}); } @@ -842,11 +848,11 @@ export const createDatasetQualityControllerStateMachine = ({ }); }, loadDataStreamIntegration: (context) => { - if (context.flyout.datasetSettings?.integration && context.flyout.dataset) { + if (context.flyout.dataStreamSettings?.integration && context.flyout.dataset) { const { type } = context.flyout.dataset; return dataStreamDetailsClient.getDataStreamIntegration({ type: type as DataStreamType, - integrationName: context.flyout.datasetSettings.integration, + integrationName: context.flyout.dataStreamSettings.integration, }); } return Promise.resolve(); @@ -874,9 +880,9 @@ export const createDatasetQualityControllerStateMachine = ({ }); }, loadIntegrationDashboards: (context) => { - if (context.flyout.datasetSettings?.integration) { + if (context.flyout.dataStreamSettings?.integration) { return dataStreamDetailsClient.getIntegrationDashboards({ - integration: context.flyout.datasetSettings.integration, + integration: context.flyout.dataStreamSettings.integration, }); } @@ -932,7 +938,3 @@ export const createDatasetQualityControllerStateMachine = ({ export type DatasetQualityControllerStateService = InterpreterFrom< typeof createDatasetQualityControllerStateMachine >; - -export type DatasetQualityControllerStateMachine = ReturnType< - typeof createDatasetQualityControllerStateMachine ->; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts index c258962f56b8d7..d6bfaaad216b98 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_controller/src/types.ts @@ -6,9 +6,12 @@ */ import { DoneInvokeEvent } from 'xstate'; -import { RefreshInterval, TimeRange } from '@kbn/data-plugin/common'; -import { QualityIndicators, SortDirection } from '../../../../common/types'; -import { Dashboard, DatasetUserPrivileges } from '../../../../common/api_types'; +import { QualityIndicators, TableCriteria, TimeRangeConfig } from '../../../../common/types'; +import { + Dashboard, + DatasetUserPrivileges, + NonAggregatableDatasets, +} from '../../../../common/api_types'; import { Integration } from '../../../../common/data_streams_stats/integration'; import { DatasetTableSortField, DegradedFieldSortField } from '../../../hooks'; import { DegradedDocsStat } from '../../../../common/data_streams_stats/malformed_docs_stat'; @@ -19,7 +22,6 @@ import { DataStreamStatServiceResponse, DataStreamStat, DataStreamStatType, - GetNonAggregatableDataStreamsResponse, DegradedField, DegradedFieldResponse, } from '../../../../common/data_streams_stats'; @@ -29,24 +31,11 @@ export type FlyoutDataset = Omit< 'type' | 'size' | 'sizeBytes' | 'lastActivity' | 'degradedDocs' > & { type: string }; -interface TableCriteria { - page: number; - rowsPerPage: number; - sort: { - field: TSortField; - direction: SortDirection; - }; -} - export interface DegradedFields { table: TableCriteria; data?: DegradedField[]; } -export type TimeRangeConfig = Pick & { - refresh: RefreshInterval; -}; - interface FiltersCriteria { inactive: boolean; fullNames: boolean; @@ -69,7 +58,7 @@ export interface WithTableOptions { export interface WithFlyoutOptions { flyout: { dataset?: FlyoutDataset; - datasetSettings?: DataStreamSettings; + dataStreamSettings?: DataStreamSettings; datasetDetails?: DataStreamDetails; insightsTimeRange?: TimeRangeConfig; breakdownField?: string; @@ -135,10 +124,6 @@ export type DatasetQualityControllerTypeState = value: 'degradedDocs.fetching'; context: DefaultDatasetQualityStateContext; } - | { - value: 'datasets.loaded'; - context: DefaultDatasetQualityStateContext; - } | { value: 'integrations.fetching'; context: DefaultDatasetQualityStateContext; @@ -250,7 +235,7 @@ export type DatasetQualityControllerEvent = query: string; } | DoneInvokeEvent - | DoneInvokeEvent + | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent | DoneInvokeEvent diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.ts new file mode 100644 index 00000000000000..024e49a9b83f49 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/defaults.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 { + DEFAULT_DATEPICKER_REFRESH, + DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + DEFAULT_DEGRADED_FIELD_SORT_FIELD, + DEFAULT_TIME_RANGE, +} from '../../../common/constants'; +import { DefaultDatasetQualityDetailsContext } from './types'; + +export const DEFAULT_CONTEXT: DefaultDatasetQualityDetailsContext = { + degradedFields: { + table: { + page: 0, + rowsPerPage: 10, + sort: { + field: DEFAULT_DEGRADED_FIELD_SORT_FIELD, + direction: DEFAULT_DEGRADED_FIELD_SORT_DIRECTION, + }, + }, + }, + isIndexNotFoundError: false, + timeRange: { + ...DEFAULT_TIME_RANGE, + refresh: DEFAULT_DATEPICKER_REFRESH, + }, +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/index.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/index.ts new file mode 100644 index 00000000000000..069d40a3e8cddd --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// export * from './state_machine'; +export * from './types'; +export * from './defaults'; +export * from './state_machine'; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/notifications.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/notifications.ts new file mode 100644 index 00000000000000..b501fd02bdcf3f --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/notifications.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IToasts } from '@kbn/core-notifications-browser'; +import { i18n } from '@kbn/i18n'; + +export const fetchDataStreamDetailsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.details.fetchDataStreamDetailsFailed', { + defaultMessage: "We couldn't get your datastream details.", + }), + text: error.message, + }); +}; + +export const assertBreakdownFieldEcsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.details.checkBreakdownFieldEcsFailed', { + defaultMessage: "We couldn't retrieve breakdown field metadata.", + }), + text: error.message, + }); +}; + +export const fetchDataStreamSettingsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.details.fetchDataStreamSettingsFailed', { + defaultMessage: "Data stream settings couldn't be loaded.", + }), + text: error.message, + }); +}; + +export const fetchIntegrationDashboardsFailedNotifier = (toasts: IToasts, error: Error) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.details.fetchIntegrationDashboardsFailed', { + defaultMessage: "We couldn't get your integration dashboards.", + }), + text: error.message, + }); +}; + +export const fetchDataStreamIntegrationFailedNotifier = ( + toasts: IToasts, + error: Error, + integrationName?: string +) => { + toasts.addDanger({ + title: i18n.translate('xpack.datasetQuality.details.fetchIntegrationsFailed', { + defaultMessage: "We couldn't get {integrationName} integration info.", + values: { + integrationName, + }, + }), + text: error.message, + }); +}; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts new file mode 100644 index 00000000000000..74dca949901904 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/state_machine.ts @@ -0,0 +1,504 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { assign, createMachine, DoneInvokeEvent, InterpreterFrom } from 'xstate'; +import { getDateISORange } from '@kbn/timerange'; +import type { IToasts } from '@kbn/core-notifications-browser'; +import { + DatasetQualityDetailsControllerContext, + DatasetQualityDetailsControllerEvent, + DatasetQualityDetailsControllerTypeState, +} from './types'; +import { DatasetQualityStartDeps } from '../../types'; +import { IDataStreamsStatsClient } from '../../services/data_streams_stats'; +import { IDataStreamDetailsClient } from '../../services/data_stream_details'; +import { indexNameToDataStreamParts } from '../../../common/utils'; +import { + Dashboard, + DataStreamDetails, + DataStreamSettings, + DegradedFieldResponse, + NonAggregatableDatasets, +} from '../../../common/api_types'; +import { fetchNonAggregatableDatasetsFailedNotifier } from '../common/notifications'; +import { + fetchDataStreamDetailsFailedNotifier, + assertBreakdownFieldEcsFailedNotifier, + fetchDataStreamSettingsFailedNotifier, + fetchDataStreamIntegrationFailedNotifier, + fetchIntegrationDashboardsFailedNotifier, +} from './notifications'; +import { Integration } from '../../../common/data_streams_stats/integration'; + +export const createPureDatasetQualityDetailsControllerStateMachine = ( + initialContext: DatasetQualityDetailsControllerContext +) => + createMachine< + DatasetQualityDetailsControllerContext, + DatasetQualityDetailsControllerEvent, + DatasetQualityDetailsControllerTypeState + >( + { + id: 'DatasetQualityDetailsController', + context: initialContext, + predictableActionArguments: true, + initial: 'uninitialized', + states: { + uninitialized: { + always: { + target: 'initializing', + }, + }, + initializing: { + type: 'parallel', + states: { + nonAggregatableDataset: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'checkDatasetIsAggregatable', + onDone: { + target: 'done', + actions: ['storeDatasetAggregatableStatus'], + }, + onError: [ + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'done', + actions: ['notifyFailedFetchForAggregatableDatasets'], + }, + ], + }, + }, + done: { + on: { + UPDATE_TIME_RANGE: { + target: 'fetching', + actions: ['storeTimeRange'], + }, + }, + }, + }, + }, + dataStreamDetails: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadDataStreamDetails', + onDone: { + target: 'done', + actions: ['storeDataStreamDetails'], + }, + onError: [ + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'done', + actions: ['notifyFetchDataStreamDetailsFailed'], + }, + ], + }, + }, + done: { + on: { + UPDATE_TIME_RANGE: { + target: 'fetching', + actions: ['storeTimeRange'], + }, + BREAKDOWN_FIELD_CHANGE: { + target: + '#DatasetQualityDetailsController.initializing.checkBreakdownFieldIsEcs.fetching', + actions: ['storeBreakDownField'], + }, + }, + }, + }, + }, + checkBreakdownFieldIsEcs: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'checkBreakdownFieldIsEcs', + onDone: { + target: 'done', + actions: ['storeBreakdownFieldEcsStatus'], + }, + onError: { + target: 'done', + actions: ['notifyCheckBreakdownFieldIsEcsFailed'], + }, + }, + }, + done: {}, + }, + }, + dataStreamDegradedFields: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadDegradedFields', + onDone: { + target: 'done', + actions: ['storeDegradedFields'], + }, + onError: [ + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'done', + }, + ], + }, + }, + done: { + on: { + UPDATE_TIME_RANGE: { + target: 'fetching', + actions: ['resetDegradedFieldPageAndRowsPerPage'], + }, + UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA: { + target: 'done', + actions: ['storeDegradedFieldTableOptions'], + }, + }, + }, + }, + }, + dataStreamSettings: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadDataStreamSettings', + onDone: { + target: 'initializeIntegrations', + actions: ['storeDataStreamSettings'], + }, + onError: [ + { + target: '#DatasetQualityDetailsController.indexNotFound', + cond: 'isIndexNotFoundError', + }, + { + target: 'done', + actions: ['notifyFetchDataStreamSettingsFailed'], + }, + ], + }, + }, + initializeIntegrations: { + type: 'parallel', + states: { + integrationDetails: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadDataStreamIntegration', + onDone: { + target: 'done', + actions: ['storeDataStreamIntegration'], + }, + onError: { + target: 'done', + actions: ['notifyFetchDatasetIntegrationsFailed'], + }, + }, + }, + done: { + type: 'final', + }, + }, + }, + integrationDashboards: { + initial: 'fetching', + states: { + fetching: { + invoke: { + src: 'loadIntegrationDashboards', + onDone: { + target: 'done', + actions: ['storeIntegrationDashboards'], + }, + onError: [ + { + target: 'unauthorized', + cond: 'checkIfActionForbidden', + }, + { + target: 'done', + actions: ['notifyFetchIntegrationDashboardsFailed'], + }, + ], + }, + }, + done: { + type: 'final', + }, + unauthorized: { + type: 'final', + }, + }, + }, + }, + }, + done: { + on: { + UPDATE_TIME_RANGE: { + target: 'fetching', + actions: ['resetDegradedFieldPageAndRowsPerPage'], + }, + }, + }, + }, + }, + }, + }, + indexNotFound: { + entry: 'handleIndexNotFoundError', + }, + }, + }, + { + actions: { + storeDatasetAggregatableStatus: assign( + (_context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + isNonAggregatable: !event.data.aggregatable, + } + : {}; + } + ), + storeTimeRange: assign((context, event) => { + return { + timeRange: 'timeRange' in event ? event.timeRange : context.timeRange, + }; + }), + storeDataStreamDetails: assign((_context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + dataStreamDetails: event.data, + } + : {}; + }), + storeBreakDownField: assign((_context, event) => { + return 'breakdownField' in event ? { breakdownField: event.breakdownField } : {}; + }), + storeBreakdownFieldEcsStatus: assign((_context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + isBreakdownFieldEcs: event.data, + } + : {}; + }), + storeDegradedFields: assign((context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + degradedFields: { + ...context.degradedFields, + data: event.data.degradedFields, + }, + } + : {}; + }), + storeDegradedFieldTableOptions: assign((context, event) => { + return 'degraded_field_criteria' in event + ? { + degradedFields: { + ...context.degradedFields, + table: event.degraded_field_criteria, + }, + } + : {}; + }), + resetDegradedFieldPageAndRowsPerPage: assign((context, _event) => ({ + degradedFields: { + ...context.degradedFields, + table: { + ...context.degradedFields.table, + page: 0, + rowsPerPage: 10, + }, + }, + })), + storeDataStreamSettings: assign((_context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + dataStreamSettings: event.data, + } + : {}; + }), + storeDataStreamIntegration: assign((context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + integration: event.data, + } + : {}; + }), + storeIntegrationDashboards: assign((context, event: DoneInvokeEvent) => { + return 'data' in event + ? { + integrationDashboards: event.data, + } + : {}; + }), + handleIndexNotFoundError: assign(() => { + return { + isIndexNotFoundError: true, + }; + }), + }, + guards: { + checkIfActionForbidden: (context, event) => { + return ( + 'data' in event && + typeof event.data === 'object' && + 'statusCode' in event.data! && + event.data.statusCode === 403 + ); + }, + isIndexNotFoundError: (_, event) => { + return ( + ('data' in event && + typeof event.data === 'object' && + 'statusCode' in event.data && + event.data.statusCode === 500 && + 'originalMessage' in event.data && + (event.data.originalMessage as string)?.includes('index_not_found_exception')) ?? + false + ); + }, + }, + } + ); + +export interface DatasetQualityDetailsControllerStateMachineDependencies { + initialContext: DatasetQualityDetailsControllerContext; + plugins: DatasetQualityStartDeps; + toasts: IToasts; + dataStreamStatsClient: IDataStreamsStatsClient; + dataStreamDetailsClient: IDataStreamDetailsClient; +} + +export const createDatasetQualityDetailsControllerStateMachine = ({ + initialContext, + plugins, + toasts, + dataStreamStatsClient, + dataStreamDetailsClient, +}: DatasetQualityDetailsControllerStateMachineDependencies) => + createPureDatasetQualityDetailsControllerStateMachine(initialContext).withConfig({ + actions: { + notifyFailedFetchForAggregatableDatasets: (_context, event: DoneInvokeEvent) => + fetchNonAggregatableDatasetsFailedNotifier(toasts, event.data), + notifyFetchDataStreamDetailsFailed: (_context, event: DoneInvokeEvent) => + fetchDataStreamDetailsFailedNotifier(toasts, event.data), + notifyCheckBreakdownFieldIsEcsFailed: (_context, event: DoneInvokeEvent) => + assertBreakdownFieldEcsFailedNotifier(toasts, event.data), + notifyFetchDataStreamSettingsFailed: (_context, event: DoneInvokeEvent) => + fetchDataStreamSettingsFailedNotifier(toasts, event.data), + notifyFetchIntegrationDashboardsFailed: (_context, event: DoneInvokeEvent) => + fetchIntegrationDashboardsFailedNotifier(toasts, event.data), + notifyFetchDatasetIntegrationsFailed: (context, event: DoneInvokeEvent) => { + const integrationName = + 'dataStreamSettings' in context ? context.dataStreamSettings?.integration : undefined; + return fetchDataStreamIntegrationFailedNotifier(toasts, event.data, integrationName); + }, + }, + services: { + checkDatasetIsAggregatable: (context) => { + const { type } = indexNameToDataStreamParts(context.dataStream); + const { startDate: start, endDate: end } = getDateISORange(context.timeRange); + + return dataStreamStatsClient.getNonAggregatableDatasets({ + type, + start, + end, + dataStream: context.dataStream, + }); + }, + loadDataStreamDetails: (context) => { + const { startDate: start, endDate: end } = getDateISORange(context.timeRange); + + return dataStreamDetailsClient.getDataStreamDetails({ + dataStream: context.dataStream, + start, + end, + }); + }, + checkBreakdownFieldIsEcs: async (context) => { + if (context.breakdownField) { + const allowedFieldSources = ['ecs', 'metadata']; + + // This timeout is to avoid a runtime error that randomly happens on breakdown field change + // TypeError: Cannot read properties of undefined (reading 'timeFieldName') + await new Promise((res) => setTimeout(res, 300)); + + const client = await plugins.fieldsMetadata.getClient(); + const { fields } = await client.find({ + attributes: ['source'], + fieldNames: [context.breakdownField], + }); + + const breakdownFieldSource = fields[context.breakdownField]?.source; + + return !!(breakdownFieldSource && allowedFieldSources.includes(breakdownFieldSource)); + } + + return false; + }, + loadDegradedFields: (context) => { + const { startDate: start, endDate: end } = getDateISORange(context.timeRange); + + return dataStreamDetailsClient.getDataStreamDegradedFields({ + dataStream: context.dataStream, + start, + end, + }); + }, + loadDataStreamSettings: (context) => { + return dataStreamDetailsClient.getDataStreamSettings({ + dataStream: context.dataStream, + }); + }, + loadDataStreamIntegration: (context) => { + if ('dataStreamSettings' in context && context.dataStreamSettings?.integration) { + const { type } = indexNameToDataStreamParts(context.dataStream); + return dataStreamDetailsClient.getDataStreamIntegration({ + type, + integrationName: context.dataStreamSettings.integration, + }); + } + return Promise.resolve(); + }, + loadIntegrationDashboards: (context) => { + if ('dataStreamSettings' in context && context.dataStreamSettings?.integration) { + return dataStreamDetailsClient.getIntegrationDashboards({ + integration: context.dataStreamSettings.integration, + }); + } + + return Promise.resolve(); + }, + }, + }); + +export type DatasetQualityDetailsControllerStateService = InterpreterFrom< + typeof createDatasetQualityDetailsControllerStateMachine +>; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts new file mode 100644 index 00000000000000..2cd344248b9690 --- /dev/null +++ b/x-pack/plugins/observability_solution/dataset_quality/public/state_machines/dataset_quality_details_controller/types.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { DoneInvokeEvent } from 'xstate'; +import type { DegradedFieldSortField } from '../../hooks'; +import { + Dashboard, + DataStreamDetails, + DataStreamSettings, + DegradedField, + DegradedFieldResponse, + NonAggregatableDatasets, +} from '../../../common/api_types'; +import { TableCriteria, TimeRangeConfig } from '../../../common/types'; +import { Integration } from '../../../common/data_streams_stats/integration'; + +export interface DataStream { + name: string; + type: string; + namespace: string; + rawName: string; +} + +export interface DegradedFieldsTableConfig { + table: TableCriteria; + data?: DegradedField[]; +} + +export interface DegradedFieldsWithData { + table: TableCriteria; + data: DegradedField[]; +} + +export interface WithDefaultControllerState { + dataStream: string; + degradedFields: DegradedFieldsTableConfig; + timeRange: TimeRangeConfig; + breakdownField?: string; + isBreakdownFieldEcs?: boolean; + isIndexNotFoundError?: boolean; + integration?: Integration; +} + +export interface WithDataStreamDetails { + dataStreamDetails: DataStreamDetails; +} + +export interface WithBreakdownField { + breakdownField: string | undefined; +} + +export interface WithBreakdownInEcsCheck { + isBreakdownFieldEcs: boolean; +} + +export interface WithDegradedFieldsData { + degradedFields: DegradedFieldsWithData; +} + +export interface WithNonAggregatableDatasetStatus { + isNonAggregatable: boolean; +} + +export interface WithDataStreamSettings { + dataStreamSettings: DataStreamSettings; +} + +export interface WithIntegration { + integration: Integration; + integrationDashboards?: Dashboard[]; +} + +export type DefaultDatasetQualityDetailsContext = Pick< + WithDefaultControllerState, + 'degradedFields' | 'timeRange' | 'isIndexNotFoundError' +>; + +export type DatasetQualityDetailsControllerTypeState = + | { + value: + | 'initializing' + | 'uninitialized' + | 'initializing.nonAggregatableDataset.fetching' + | 'initializing.dataStreamDegradedFields.fetching' + | 'initializing.dataStreamSettings.fetching' + | 'initializing.dataStreamDetails.fetching'; + context: WithDefaultControllerState; + } + | { + value: 'initializing.nonAggregatableDataset.done'; + context: WithDefaultControllerState & WithNonAggregatableDatasetStatus; + } + | { + value: 'initializing.dataStreamDetails.done'; + context: WithDefaultControllerState & WithDataStreamDetails; + } + | { + value: 'initializing.checkBreakdownFieldIsEcs.fetching'; + context: WithDefaultControllerState & WithBreakdownField; + } + | { + value: 'initializing.checkBreakdownFieldIsEcs.done'; + context: WithDefaultControllerState & WithBreakdownInEcsCheck; + } + | { + value: 'initializing.dataStreamDegradedFields.done'; + context: WithDefaultControllerState & WithDegradedFieldsData; + } + | { + value: + | 'initializing.dataStreamSettings.initializeIntegrations' + | 'initializing.dataStreamSettings.initializeIntegrations.integrationDetails.fetching' + | 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.fetching' + | 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.unauthorized'; + context: WithDefaultControllerState & WithDataStreamSettings; + } + | { + value: + | 'initializing.dataStreamSettings.initializeIntegrations.integrationDetails.done' + | 'initializing.dataStreamSettings.initializeIntegrations.integrationDashboards.done'; + context: WithDefaultControllerState & WithDataStreamSettings & WithIntegration; + }; + +export type DatasetQualityDetailsControllerContext = + DatasetQualityDetailsControllerTypeState['context']; + +export type DatasetQualityDetailsControllerEvent = + | { + type: 'UPDATE_TIME_RANGE'; + timeRange: TimeRangeConfig; + } + | { + type: 'BREAKDOWN_FIELD_CHANGE'; + breakdownField: string | undefined; + } + | { + type: 'UPDATE_DEGRADED_FIELDS_TABLE_CRITERIA'; + degraded_field_criteria: TableCriteria; + } + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent + | DoneInvokeEvent; diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/types.ts b/x-pack/plugins/observability_solution/dataset_quality/public/types.ts index bcdd001cb68437..9b97ce12a194f7 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/types.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/public/types.ts @@ -15,8 +15,10 @@ import type { LensPublicStart } from '@kbn/lens-plugin/public'; import type { ObservabilitySharedPluginSetup } from '@kbn/observability-shared-plugin/public'; import type { FieldsMetadataPublicStart } from '@kbn/fields-metadata-plugin/public'; -import type { CreateDatasetQualityController } from './controller'; import type { DatasetQualityProps } from './components/dataset_quality'; +import { DatasetQualityDetailsProps } from './components/dataset_quality_details'; +import type { CreateDatasetQualityController } from './controller/dataset_quality'; +import type { CreateDatasetQualityDetailsController } from './controller/dataset_quality_details'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface DatasetQualityPluginSetup {} @@ -24,6 +26,8 @@ export interface DatasetQualityPluginSetup {} export interface DatasetQualityPluginStart { DatasetQuality: ComponentType; createDatasetQualityController: CreateDatasetQualityController; + DatasetQualityDetails: ComponentType; + createDatasetQualityDetailsController: CreateDatasetQualityDetailsController; } export interface DatasetQualityStartDeps { diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts index d89bb83867d10f..e2067dedd26d21 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/data_streams/get_data_stream_details/index.ts @@ -30,15 +30,17 @@ export async function getDataStreamSettings({ }): Promise { throwIfInvalidDataStreamParams(dataStream); - const createdOn = await getDataStreamCreatedOn(esClient, dataStream); - - // Getting the 1st item from the data streams endpoint as we will be passing the exact DS name - const [dataStreamInfo] = await dataStreamService.getMatchingDataStreams(esClient, dataStream); + const [createdOn, [dataStreamInfo], datasetUserPrivileges] = await Promise.all([ + getDataStreamCreatedOn(esClient, dataStream), + dataStreamService.getMatchingDataStreams(esClient, dataStream), + datasetQualityPrivileges.getDatasetPrivileges(esClient, dataStream), + ]); const integration = dataStreamInfo?._meta?.package?.name; return { createdOn, integration, + datasetUserPrivileges, }; } diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_stream.ts b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_stream.ts index a1b701e524c927..0446e27953af1e 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/services/data_stream.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/services/data_stream.ts @@ -11,8 +11,6 @@ import type { } from '@elastic/elasticsearch/lib/api/types'; import type { ElasticsearchClient } from '@kbn/core/server'; -import { streamPartsToIndexPattern } from '../../common/utils'; - class DataStreamService { public async getMatchingDataStreams( esClient: ElasticsearchClient, @@ -32,31 +30,6 @@ class DataStreamService { } } - public async getMatchingDataStreamsStats( - esClient: ElasticsearchClient, - dataStreamParts: { - dataset: string; - type: string; - } - ): Promise { - try { - const { data_streams: dataStreamsStats } = await esClient.indices.dataStreamsStats({ - name: streamPartsToIndexPattern({ - typePattern: dataStreamParts.type, - datasetPattern: dataStreamParts.dataset, - }), - human: true, - }); - - return dataStreamsStats; - } catch (e) { - if (e.statusCode === 404) { - return []; - } - throw e; - } - } - public async getStreamsStats( esClient: ElasticsearchClient, dataStreams: string[] diff --git a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json index 0397a6f185bf15..04d5362bb98610 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json +++ b/x-pack/plugins/observability_solution/dataset_quality/tsconfig.json @@ -53,7 +53,9 @@ "@kbn/ebt-tools", "@kbn/fields-metadata-plugin", "@kbn/server-route-repository-utils", - "@kbn/core-analytics-browser" + "@kbn/core-analytics-browser", + "@kbn/core-lifecycle-browser", + "@kbn/core-notifications-browser" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts index b4ceb3a174b530..56ee5405841cc0 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/state_machines/logs_explorer_controller/src/types.ts @@ -156,8 +156,6 @@ export type LogsExplorerControllerTypeState = export type LogsExplorerControllerContext = LogsExplorerControllerTypeState['context']; -export type LogsExplorerControllerStateValue = LogsExplorerControllerTypeState['value']; - export type LogsExplorerControllerEvent = | { type: 'RECEIVED_STATE_CONTAINER'; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 37642329d35bd9..1cbb69da954637 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -14650,10 +14650,8 @@ "xpack.datasetQuality.expandLabel": "Développer", "xpack.datasetQuality.fetchDatasetDetailsFailed": "Nous n'avons pas pu obtenir les détails de votre ensemble de données.", "xpack.datasetQuality.fetchDatasetDetailsFailed.noDatasetSelected": "Vous n'avez sélectionné aucun ensemble de données", - "xpack.datasetQuality.fetchDatasetSettingsFailed": "Les paramètres de l'ensemble de données n'ont pas pu être chargés.", "xpack.datasetQuality.fetchDatasetStatsFailed": "Nous n'avons pas pu obtenir vos ensembles de données.", "xpack.datasetQuality.fetchDegradedStatsFailed": "Nous n'avons pas pu obtenir d'informations sur vos documents dégradés.", - "xpack.datasetQuality.fetchIntegrationDashboardsFailed": "Nous n'avons pas pu obtenir vos tableaux de bord d'intégration.", "xpack.datasetQuality.fetchIntegrationsFailed": "Nous n'avons pas pu obtenir vos intégrations.", "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "Nous n'avons pas pu obtenir d'informations sur les ensembles de données non agrégés.", "xpack.datasetQuality.fewDegradedDocsTooltip": "{degradedDocsCount} documents dégradés dans cet ensemble de données.", @@ -14667,36 +14665,9 @@ "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset} est incompatible avec l'agrégation _ignored, ce qui peut entraîner des délais lors de la recherche de données. {howToFixIt}", "xpack.datasetQuality.flyout.nonAggregatableDatasets.link.title": "substitution", "xpack.datasetQuality.flyoutCancelText": "Annuler", - "xpack.datasetQuality.flyoutChartExploreDataInDiscoverText": "Explorer les données dans Discover", - "xpack.datasetQuality.flyoutChartExploreDataInLogsExplorerText": "Explorer les données dans l'Explorateur de logs", - "xpack.datasetQuality.flyoutChartOpenInLensText": "Ouvrir dans Lens", - "xpack.datasetQuality.flyoutDatasetCreatedOnText": "Créé le", - "xpack.datasetQuality.flyoutDatasetDetailsText": "Détails de l’ensemble de données", - "xpack.datasetQuality.flyoutDatasetLastActivityText": "Dernière activité", - "xpack.datasetQuality.flyoutDegradedDocsPercentage": "Pourcentage de documents dégradés", - "xpack.datasetQuality.flyoutDegradedDocsTooltip": "Le pourcentage de documents dégradés (des documents avec la propriété {ignoredProperty}) dans votre ensemble de données.", - "xpack.datasetQuality.flyoutDegradedDocsTopNValues": "{count} principales valeurs de {fieldName}", - "xpack.datasetQuality.flyoutDegradedDocsViz": "Tendance des documents dégradés", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTitle": "Champs dégradés", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTooltip": "Une liste partielle des champs dégradés trouvés dans votre ensemble de données.", - "xpack.datasetQuality.flyoutDegradedFieldsTableLoadingText": "Chargement des champs dégradés", - "xpack.datasetQuality.flyoutDegradedFieldsTableNoData": "Aucun champ dégradé n’a été trouvé", - "xpack.datasetQuality.flyoutDocsCountTotal": "Nombre de documents (total)", - "xpack.datasetQuality.flyoutHostsText": "Hôtes", - "xpack.datasetQuality.flyoutIndexTemplateActionText": "Modèle d'index", - "xpack.datasetQuality.flyoutIntegrationActionsText": "Actions d'intégration", + "xpack.datasetQuality.flyoutDatasetDetailsText": "Détails des ensembles de données", "xpack.datasetQuality.flyoutIntegrationDetailsText": "Détails de l'intégration", "xpack.datasetQuality.flyoutIntegrationNameText": "Nom", - "xpack.datasetQuality.flyoutIntegrationVersionText": "Version", - "xpack.datasetQuality.flyoutOpenInDiscoverText": "Ouvrir dans Discover", - "xpack.datasetQuality.flyoutOpenInLogsExplorerText": "Ouvrir dans l'explorateur de logs", - "xpack.datasetQuality.flyoutSeeIntegrationActionText": "Afficher l'intégration", - "xpack.datasetQuality.flyoutServicesText": "Services", - "xpack.datasetQuality.flyoutShowAllText": "Afficher tout", - "xpack.datasetQuality.flyoutSizeText": "Taille", - "xpack.datasetQuality.flyoutSummaryTitle": "Résumé", - "xpack.datasetQuality.flyoutSummaryTooltip": "Statistiques de l'ensemble de données dans la plage temporelle sélectionnée.", - "xpack.datasetQuality.flyoutViewDashboardsActionText": "Afficher les tableaux de bord", "xpack.datasetQuality.fullDatasetNameDescription": "Activez cette option pour afficher les noms complets des ensembles de données utilisés pour stocker les documents.", "xpack.datasetQuality.fullDatasetNameLabel": "Afficher les noms complets des ensembles de données", "xpack.datasetQuality.inactiveDatasetActivityColumnDescription": "Aucune activité pour la plage temporelle sélectionnée", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index dae805d79e18bb..17432ab10a44e3 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -14638,10 +14638,8 @@ "xpack.datasetQuality.expandLabel": "拡張", "xpack.datasetQuality.fetchDatasetDetailsFailed": "データセット詳細を取得できませんでした。", "xpack.datasetQuality.fetchDatasetDetailsFailed.noDatasetSelected": "データセットが選択されていません", - "xpack.datasetQuality.fetchDatasetSettingsFailed": "データセット設定を読み込めませんでした。", "xpack.datasetQuality.fetchDatasetStatsFailed": "データセットを取得できませんでした。", "xpack.datasetQuality.fetchDegradedStatsFailed": "劣化したドキュメント情報を取得できませんでした。", - "xpack.datasetQuality.fetchIntegrationDashboardsFailed": "統合ダッシュボードを取得できませんでした。", "xpack.datasetQuality.fetchIntegrationsFailed": "統合を取得できませんでした。", "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "集約可能なデータセット情報以外を取得できませんでした。", "xpack.datasetQuality.fewDegradedDocsTooltip": "このデータセットの{degradedDocsCount}個の劣化したドキュメント。", @@ -14655,36 +14653,9 @@ "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset}は_ignored集約をサポートしていません。データのクエリを実行するときに遅延が生じる可能性があります。{howToFixIt}", "xpack.datasetQuality.flyout.nonAggregatableDatasets.link.title": "ロールオーバー", "xpack.datasetQuality.flyoutCancelText": "キャンセル", - "xpack.datasetQuality.flyoutChartExploreDataInDiscoverText": "Discoverでデータを探索", - "xpack.datasetQuality.flyoutChartExploreDataInLogsExplorerText": "ログエクスプローラーでデータを探索", - "xpack.datasetQuality.flyoutChartOpenInLensText": "Lensで開く", - "xpack.datasetQuality.flyoutDatasetCreatedOnText": "作成日時", "xpack.datasetQuality.flyoutDatasetDetailsText": "データセット詳細", - "xpack.datasetQuality.flyoutDatasetLastActivityText": "前回のアクティビティ", - "xpack.datasetQuality.flyoutDegradedDocsPercentage": "劣化したドキュメントの割合(%)", - "xpack.datasetQuality.flyoutDegradedDocsTooltip": "データセットにおける劣化したドキュメント({ignoredProperty}プロパティのドキュメント)の割合。", - "xpack.datasetQuality.flyoutDegradedDocsTopNValues": "{fieldName}の上位{count}つの値", - "xpack.datasetQuality.flyoutDegradedDocsViz": "劣化したドキュメントの傾向", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTitle": "劣化したフィールド", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTooltip": "データセットで見つかった劣化したフィールドの部分的なリスト。", - "xpack.datasetQuality.flyoutDegradedFieldsTableLoadingText": "劣化したフィールドを読み込み中", - "xpack.datasetQuality.flyoutDegradedFieldsTableNoData": "劣化したフィールドが見つかりません", - "xpack.datasetQuality.flyoutDocsCountTotal": "ドキュメント数(合計)", - "xpack.datasetQuality.flyoutHostsText": "ホスト", - "xpack.datasetQuality.flyoutIndexTemplateActionText": "インデックステンプレート", - "xpack.datasetQuality.flyoutIntegrationActionsText": "統合アクション", "xpack.datasetQuality.flyoutIntegrationDetailsText": "統合の詳細", "xpack.datasetQuality.flyoutIntegrationNameText": "名前", - "xpack.datasetQuality.flyoutIntegrationVersionText": "Version", - "xpack.datasetQuality.flyoutOpenInDiscoverText": "Discoverで開く", - "xpack.datasetQuality.flyoutOpenInLogsExplorerText": "ログエクスプローラーで開く", - "xpack.datasetQuality.flyoutSeeIntegrationActionText": "統合を表示", - "xpack.datasetQuality.flyoutServicesText": "サービス", - "xpack.datasetQuality.flyoutShowAllText": "すべて表示", - "xpack.datasetQuality.flyoutSizeText": "サイズ", - "xpack.datasetQuality.flyoutSummaryTitle": "まとめ", - "xpack.datasetQuality.flyoutSummaryTooltip": "選択した時間範囲内のデータセットの統計情報", - "xpack.datasetQuality.flyoutViewDashboardsActionText": "ダッシュボードを表示", "xpack.datasetQuality.fullDatasetNameDescription": "オンにすると、ドキュメントを格納するために使用される実際のデータセット名が表示されます。", "xpack.datasetQuality.fullDatasetNameLabel": "詳細なデータセット名を表示", "xpack.datasetQuality.inactiveDatasetActivityColumnDescription": "選択したタイムフレームにアクティビティがありません", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 9df2e11f620cc5..aafc9f26c90440 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -14661,10 +14661,8 @@ "xpack.datasetQuality.expandLabel": "展开", "xpack.datasetQuality.fetchDatasetDetailsFailed": "无法获取数据集详情。", "xpack.datasetQuality.fetchDatasetDetailsFailed.noDatasetSelected": "尚未选择任何数据集", - "xpack.datasetQuality.fetchDatasetSettingsFailed": "无法加载数据集设置。", "xpack.datasetQuality.fetchDatasetStatsFailed": "无法获取数据集。", "xpack.datasetQuality.fetchDegradedStatsFailed": "无法获取已降级文档信息。", - "xpack.datasetQuality.fetchIntegrationDashboardsFailed": "无法获取集成仪表板。", "xpack.datasetQuality.fetchIntegrationsFailed": "无法获取集成。", "xpack.datasetQuality.fetchNonAggregatableDatasetsFailed": "无法获取非可聚合数据集信息。", "xpack.datasetQuality.fewDegradedDocsTooltip": "此数据集中的 {degradedDocsCount} 个已降级文档。", @@ -14678,36 +14676,9 @@ "xpack.datasetQuality.flyout.nonAggregatable.warning": "{dataset} 不支持 _ignored 聚合,在查询数据时可能会导致延迟。{howToFixIt}", "xpack.datasetQuality.flyout.nonAggregatableDatasets.link.title": "滚动更新", "xpack.datasetQuality.flyoutCancelText": "取消", - "xpack.datasetQuality.flyoutChartExploreDataInDiscoverText": "在 Discover 中浏览数据", - "xpack.datasetQuality.flyoutChartExploreDataInLogsExplorerText": "在日志浏览器中浏览数据", - "xpack.datasetQuality.flyoutChartOpenInLensText": "在 Lens 中打开", - "xpack.datasetQuality.flyoutDatasetCreatedOnText": "创建日期", "xpack.datasetQuality.flyoutDatasetDetailsText": "数据集详情", - "xpack.datasetQuality.flyoutDatasetLastActivityText": "上次活动", - "xpack.datasetQuality.flyoutDegradedDocsPercentage": "已降级文档 %", - "xpack.datasetQuality.flyoutDegradedDocsTooltip": "您的数据集中已降级文档的百分比,即包含 {ignoredProperty} 属性的文档。", - "xpack.datasetQuality.flyoutDegradedDocsTopNValues": "{fieldName} 的排名前 {count} 值", - "xpack.datasetQuality.flyoutDegradedDocsViz": "已降级文档趋势", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTitle": "已降级字段", - "xpack.datasetQuality.flyoutDegradedFieldsSectionTooltip": "在数据集中发现的已降级字段的部分列表。", - "xpack.datasetQuality.flyoutDegradedFieldsTableLoadingText": "正在加载已降级字段", - "xpack.datasetQuality.flyoutDegradedFieldsTableNoData": "找不到已降级字段", - "xpack.datasetQuality.flyoutDocsCountTotal": "文档计数(总计)", - "xpack.datasetQuality.flyoutHostsText": "主机", - "xpack.datasetQuality.flyoutIndexTemplateActionText": "索引模板", - "xpack.datasetQuality.flyoutIntegrationActionsText": "集成操作", "xpack.datasetQuality.flyoutIntegrationDetailsText": "集成详情", "xpack.datasetQuality.flyoutIntegrationNameText": "名称", - "xpack.datasetQuality.flyoutIntegrationVersionText": "版本", - "xpack.datasetQuality.flyoutOpenInDiscoverText": "在 Discover 中打开", - "xpack.datasetQuality.flyoutOpenInLogsExplorerText": "在日志浏览器中打开", - "xpack.datasetQuality.flyoutSeeIntegrationActionText": "查看集成", - "xpack.datasetQuality.flyoutServicesText": "服务", - "xpack.datasetQuality.flyoutShowAllText": "全部显示", - "xpack.datasetQuality.flyoutSizeText": "大小", - "xpack.datasetQuality.flyoutSummaryTitle": "摘要", - "xpack.datasetQuality.flyoutSummaryTooltip": "选定时间范围内的数据集统计信息。", - "xpack.datasetQuality.flyoutViewDashboardsActionText": "查看仪表板", "xpack.datasetQuality.fullDatasetNameDescription": "打开以显示用于存储文档的实际数据集名称。", "xpack.datasetQuality.fullDatasetNameLabel": "显示完整数据集名称", "xpack.datasetQuality.inactiveDatasetActivityColumnDescription": "选定时间范围内没有任何活动", diff --git a/x-pack/test/dataset_quality_api_integration/tests/data_streams/data_stream_settings.spec.ts b/x-pack/test/dataset_quality_api_integration/tests/data_streams/data_stream_settings.spec.ts index e5b38d2463cb0a..3ba9965d980a47 100644 --- a/x-pack/test/dataset_quality_api_integration/tests/data_streams/data_stream_settings.spec.ts +++ b/x-pack/test/dataset_quality_api_integration/tests/data_streams/data_stream_settings.spec.ts @@ -35,6 +35,10 @@ export default function ApiTest({ getService }: FtrProviderContext) { version: '1.14.0', }; + const defaultDataStreamPrivileges = { + datasetUserPrivileges: { canRead: true, canMonitor: true, canViewIntegrations: true }, + }; + async function callApiAs(user: DatasetQualityApiClientKey, dataStream: string) { return await datasetQualityApiClient[user]({ endpoint: 'GET /internal/dataset_quality/data_streams/{dataStream}/settings', @@ -99,11 +103,11 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(err.res.body.message.indexOf(expectedMessage)).to.greaterThan(-1); }); - it('returns {} if matching data stream is not available', async () => { + it('returns only privileges if matching data stream is not available', async () => { const nonExistentDataSet = 'Non-existent'; const nonExistentDataStream = `${type}-${nonExistentDataSet}-${namespace}`; const resp = await callApiAs('datasetQualityLogsUser', nonExistentDataStream); - expect(resp.body).empty(); + expect(resp.body).eql(defaultDataStreamPrivileges); }); it('returns "createdOn" correctly', async () => { @@ -136,6 +140,9 @@ export default function ApiTest({ getService }: FtrProviderContext) { ); expect(resp.body.createdOn).to.be(Number(dataStreamSettings?.index?.creation_date)); expect(resp.body.integration).to.be('apache'); + expect(resp.body.datasetUserPrivileges).to.eql( + defaultDataStreamPrivileges.datasetUserPrivileges + ); }); after(async () => { diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/dataset_quality_api_integration/data_stream_settings.ts b/x-pack/test_serverless/api_integration/test_suites/observability/dataset_quality_api_integration/data_stream_settings.ts index c7550395b303c8..37bfc688c9ec94 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/dataset_quality_api_integration/data_stream_settings.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/dataset_quality_api_integration/data_stream_settings.ts @@ -29,6 +29,10 @@ export default function ({ getService }: DatasetQualityFtrContextProvider) { const serviceName = 'my-service'; const hostName = 'synth-host'; + const defaultDataStreamPrivileges = { + datasetUserPrivileges: { canRead: true, canMonitor: true, canViewIntegrations: true }, + }; + async function callApi( dataStream: string, roleAuthc: RoleCredentials, @@ -85,11 +89,11 @@ export default function ({ getService }: DatasetQualityFtrContextProvider) { expect(err.res.body.message.indexOf(expectedMessage)).to.greaterThan(-1); }); - it('returns {} if matching data stream is not available', async () => { + it('returns only privileges if matching data stream is not available', async () => { const nonExistentDataSet = 'Non-existent'; const nonExistentDataStream = `${type}-${nonExistentDataSet}-${namespace}`; const resp = await callApi(nonExistentDataStream, roleAuthc, internalReqHeader); - expect(resp.body).empty(); + expect(resp.body).eql(defaultDataStreamPrivileges); }); it('returns "createdOn" correctly', async () => { From 0e18fb39f3f3f0aa51b553a16023e78434877cf7 Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Wed, 14 Aug 2024 13:54:19 +0200 Subject: [PATCH 36/92] [ML] Enable PUT trained model API integration tests (#189697) ## Summary Closes https://github.com/elastic/kibana/issues/189637 ### Checklist - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --- .../api_integration/apis/ml/trained_models/put_model.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/x-pack/test/api_integration/apis/ml/trained_models/put_model.ts b/x-pack/test/api_integration/apis/ml/trained_models/put_model.ts index 9893e19c3c8c48..15c650d0d384ce 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/put_model.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/put_model.ts @@ -15,8 +15,7 @@ export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertestWithoutAuth'); const ml = getService('ml'); - // FLAKY: https://github.com/elastic/kibana/issues/189637 - describe.skip('PUT trained_models', () => { + describe('PUT trained_models', function () { before(async () => { await ml.api.initSavedObjects(); await ml.testResources.setKibanaTimeZoneToUTC(); @@ -38,9 +37,8 @@ export default ({ getService }: FtrProviderContext) => { .send(requestBody); ml.api.assertResponseStatusCode(200, putResponseStatus, putResponseBody); - expect(omit(putResponseBody, 'create_time')).to.eql({ + expect(omit(putResponseBody, ['create_time', 'model_type'])).to.eql({ model_id: 'dfa_regression_model_n_0', - model_type: 'tree_ensemble', created_by: 'api_user', version: '12.0.0', model_size_bytes: 304, From 9cb49eac87f42dcfc6e2327aa0dced1bc019ad2e Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:09:15 +0200 Subject: [PATCH 37/92] [Fleet] hide changing agent policies when editing agentless integration policy (#190391) ## Summary Related to https://github.com/elastic/kibana/issues/183863 Follow up from https://github.com/elastic/kibana/pull/189934#discussion_r1712146040 Since the edit integration was re-enabled for agentless integration policies, we have to make sure to hide the agent policy change option when editing an agentless policy. This pr addresses that. To verify: - add CSPM integration with agentless setup technology - edit the integration policy - verify that the agent policies can't be modified - upload another agentless package (instruction [here](https://github.com/elastic/kibana/pull/189612)) - add Agentless integration with setup technology agentless - edit the integration policly - verify that the agent policies can't be modified image image ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../hooks/setup_technology.test.ts | 29 ++++++++++++++++++- .../hooks/setup_technology.ts | 7 ++++- .../hooks/use_package_policy_steps.tsx | 1 + .../routes/package_policy/handlers.test.ts | 20 +++++++++++++ .../server/routes/package_policy/handlers.ts | 15 +++++++++- 5 files changed, 69 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts index 9edca8f772fbac..f32ea1cd007cee 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.test.ts @@ -221,6 +221,34 @@ describe('useSetupTechnology', () => { expect(sendGetOneAgentPolicy).toHaveBeenCalled(); }); + it('should set agentless setup technology if agent policy supports agentless in edit page', async () => { + (useConfig as MockFn).mockReturnValue({ + agentless: { + api: { + url: 'https://agentless.api.url', + }, + }, + } as any); + (useStartServices as MockFn).mockReturnValue({ + cloud: { + isCloudEnabled: true, + }, + }); + const { result } = renderHook(() => + useSetupTechnology({ + setNewAgentPolicy, + newAgentPolicy: newAgentPolicyMock, + updateAgentPolicies: updateAgentPoliciesMock, + setSelectedPolicyTab: setSelectedPolicyTabMock, + packagePolicy: packagePolicyMock, + isEditPage: true, + agentPolicies: [{ id: 'agentless-policy-id', supports_agentless: true } as any], + }) + ); + + expect(result.current.selectedSetupTechnology).toBe(SetupTechnology.AGENTLESS); + }); + it('should create agentless policy if agentless feature is enabled and isCloud is true and agentless.api.url', async () => { (useConfig as MockFn).mockReturnValue({ agentless: { @@ -232,7 +260,6 @@ describe('useSetupTechnology', () => { } as any); (useStartServices as MockFn).mockReturnValue({ cloud: { - // isServerlessEnabled: false, isCloudEnabled: true, }, }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts index 078fb51ebf3767..7fc159a2d43481 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology.ts @@ -79,6 +79,7 @@ export function useSetupTechnology({ packageInfo, packagePolicy, isEditPage, + agentPolicies, }: { setNewAgentPolicy: (policy: NewAgentPolicy) => void; newAgentPolicy: NewAgentPolicy; @@ -87,6 +88,7 @@ export function useSetupTechnology({ packageInfo?: PackageInfo; packagePolicy: NewPackagePolicy; isEditPage?: boolean; + agentPolicies?: AgentPolicy[]; }) { const { isAgentlessEnabled, isAgentlessCloudEnabled, isAgentlessServerlessEnabled } = useAgentless(); @@ -104,7 +106,8 @@ export function useSetupTechnology({ ); useEffect(() => { - if (isEditPage) { + if (isEditPage && agentPolicies && agentPolicies.some((policy) => policy.supports_agentless)) { + setSelectedSetupTechnology(SetupTechnology.AGENTLESS); return; } if (isAgentlessCloudEnabled && selectedSetupTechnology === SetupTechnology.AGENTLESS) { @@ -126,6 +129,8 @@ export function useSetupTechnology({ selectedSetupTechnology, updateAgentPolicies, setNewAgentPolicy, + agentPolicies, + setSelectedSetupTechnology, ]); // tech debt: remove this useEffect when Serverless uses the Agentless API diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy_steps.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy_steps.tsx index dd349fca9909e4..5acd854a76f046 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy_steps.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/edit_package_policy_page/hooks/use_package_policy_steps.tsx @@ -145,6 +145,7 @@ export function usePackagePolicySteps({ packageInfo, packagePolicy, isEditPage: true, + agentPolicies, }); const stepSelectAgentPolicy = useMemo( diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts index 9cefa2581629f0..f42ed003600339 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.test.ts @@ -311,6 +311,7 @@ describe('When calling package policy', () => { }, ], }); + (agentPolicyService.get as jest.Mock).mockResolvedValue({ inputs: [] }); }); it('should use existing package policy props if not provided by request', async () => { @@ -371,6 +372,25 @@ describe('When calling package policy', () => { }); }); + it('should throw if policy_ids changed on agentless integration', async () => { + (agentPolicyService.get as jest.Mock).mockResolvedValue({ + supports_agentless: true, + inputs: [], + }); + jest.spyOn(licenseService, 'hasAtLeast').mockReturnValue(true); + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enableReusableIntegrationPolicies: true } as any); + const request = getUpdateKibanaRequest({ policy_ids: ['1', '2'] } as any); + await routeHandler(context, request, response); + expect(response.customError).toHaveBeenCalledWith({ + statusCode: 400, + body: { + message: 'Cannot change agent policies of an agentless integration', + }, + }); + }); + it('should rename the agentless agent policy to sync with the package policy name if agentless is enabled', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); jest.spyOn(appContextService, 'getConfig').mockReturnValue({ diff --git a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts index 31e38125dead5d..5cc00ef014cdeb 100644 --- a/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/package_policy/handlers.ts @@ -10,7 +10,7 @@ import type { TypeOf } from '@kbn/config-schema'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { RequestHandler } from '@kbn/core/server'; -import { groupBy, keyBy } from 'lodash'; +import { groupBy, isEmpty, isEqual, keyBy } from 'lodash'; import { HTTPAuthorizationHeader } from '../../../common/http_authorization_header'; @@ -410,6 +410,19 @@ export const updatePackagePolicyHandler: FleetRequestHandler< throw new PackagePolicyRequestError('At least one agent policy id must be provided'); } + if ( + newData.policy_ids && + !isEmpty(packagePolicy.policy_ids) && + !isEqual(newData.policy_ids, packagePolicy.policy_ids) + ) { + const agentPolicy = await agentPolicyService.get(soClient, packagePolicy.policy_ids[0]); + if (agentPolicy?.supports_agentless) { + throw new PackagePolicyRequestError( + 'Cannot change agent policies of an agentless integration' + ); + } + } + await renameAgentlessAgentPolicy(soClient, esClient, packagePolicy, newData.name); const updatedPackagePolicy = await packagePolicyService.update( From 2519c76cff6ee30b04c5c6600ebac534f754a89e Mon Sep 17 00:00:00 2001 From: Andrew Macri Date: Wed, 14 Aug 2024 08:48:00 -0400 Subject: [PATCH 38/92] [Security Solution] Updates the `test:generate:serverless-dev` script to align with the latest serverless defaults (#190461) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [Security Solution] Updates the `test:generate:serverless-dev` script to align with the latest serverless defaults This PR updates the `test:generate:serverless-dev` script, (which runs `scripts/endpoint/resolver_generator`), to align with the latest serverless defaults. After this change, running the following command: ```sh yarn test:generate:serverless-dev ``` populates a local serverless project with generated alerts and events (for testing). ### Desk testing 1) Start a new (development) instance of Elasticsearch: ```sh yarn es serverless --clean --projectType security ``` 2) Start a local (development) instance of Kibana: ```sh yarn start --serverless=security --no-base-path ``` 3) Login to the project as the `admin` user 4) Install the default detection rules 5) Change to the `$KIBANA_HOME/x-pack/plugins/security_solution` directory: ```sh cd $KIBANA_HOME/x-pack/plugins/security_solution ``` 6) Run the following command: ```sh yarn test:generate:serverless-dev ``` **Expected result** - The `resolver_generator` script populates the serverless project with alerts and events, as illustrated by the output below: ``` info Build flavor: serverless info Indexing host and alerts... info Creating and indexing documents took: 15098ms ✨ Done in 17.37s. ``` **Actual result** - The `resolver_generator` script does NOT populate the serverless project with alerts and events, as illustrated by the output below: ``` info Build flavor: serverless info Indexing host and alerts... Unhandled Promise rejection detected: EndpointDataLoadingError: other side closed - Local: 127.0.0.1:63688, Remote: 127.0.0.1:9200 at wrapErrorIfNeeded (utils.ts:29:7) at wrapErrorAndRejectPromise (utils.ts:32:75) at index_endpoint_hosts.ts:259:26 { meta: ConnectionError: other side closed - Local: 127.0.0.1:63688, Remote: 127.0.0.1:9200 at SniffingTransport.request (/Users/$USER/Projects/forks/$USER/kibana/node_modules/@elastic/transport/src/Transport.ts:630:17) at Client.BulkApi [as bulk] (/Users/$USER/Projects/forks/$USER/kibana/node_modules/@elastic/elasticsearch/src/api/api/bulk.ts:75:10) at index_endpoint_hosts.ts:259:26 { options: { redaction: [Object] }, meta: { body: undefined, statusCode: 0, headers: {}, meta: [Object], warnings: null } } } Terminating process... error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. ``` --- x-pack/plugins/security_solution/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 98575c1f48c26c..62a406960ceebe 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/plugins/security_solution/package.json @@ -24,7 +24,7 @@ "cypress:dw:endpoint:open": "echo '\n** WARNING **: Run script `cypress:dw:endpoint:open` no longer valid! Use `cypress:dw:open` instead\n'", "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", "test:generate": "node scripts/endpoint/resolver_generator", - "test:generate:serverless-dev": "node scripts/endpoint/resolver_generator --node http://elastic_serverless:changeme@127.0.0.1:9200 --kibana http://elastic_serverless:changeme@127.0.0.1:5601", + "test:generate:serverless-dev": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --no-warnings scripts/endpoint/resolver_generator --node https://elastic_serverless:changeme@127.0.0.1:9200 --kibana http://elastic_serverless:changeme@127.0.0.1:5601", "mappings:generate": "node scripts/mappings/mappings_generator", "mappings:load": "node scripts/mappings/mappings_loader", "junit:transform": "node scripts/junit_transformer --pathPattern '../../../target/kibana-security-solution/cypress/results/*.xml' --rootDirectory ../../../ --reportName 'Security Solution Cypress' --writeInPlace", From abc84953373673ff32bacbcecf312647d01b2e91 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Wed, 14 Aug 2024 15:53:04 +0300 Subject: [PATCH 39/92] fix: Home > Cases - Dropdown label does not inform user of related results (#190400) Closes: https://github.com/elastic/observability-accessibility/issues/134 ## Description `Home` > `Cases` - Dropdown label does not inform user of related results ### Steps to recreate Pre-requisitie: Screen reader is activated 1. Navigate to the `Serverless Observability Solution `instance. 2. Click `Cases` in Left Nav 3. Keyboard navigate to 'Severity', 'Status', et al. dropdowns Expected Result: -Screen reader reads dropdown header as well as number of entries in the dropdown, indicated by the number in the header Actual Result: -Screen reader reads only the category label ### What was changed: 1. Removed extra `aria-label` attribute. `EuiFilterButton` component is responsible for setting correct `aria-label` based on internal state. ### Screen image --- .../all_cases/multi_select_filter.test.tsx | 10 ++-- .../all_cases/multi_select_filter.tsx | 1 - .../all_cases/status_filter.test.tsx | 6 +-- .../all_cases/table_filters.test.tsx | 51 +++++++++---------- 4 files changed, 32 insertions(+), 36 deletions(-) diff --git a/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.test.tsx b/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.test.tsx index c2575b146b9f87..cecd3d60e773a7 100644 --- a/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.test.tsx @@ -28,7 +28,7 @@ describe('multi select filter', () => { render(); - userEvent.click(await screen.findByRole('button', { name: 'Tags' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-tags')); await waitForEuiPopoverOpen(); expect(await screen.findByText('4 options')).toBeInTheDocument(); @@ -52,7 +52,7 @@ describe('multi select filter', () => { const { rerender } = render(); - userEvent.click(await screen.findByRole('button', { name: 'Tags' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-tags')); await waitForEuiPopoverOpen(); expect(await screen.findByText('Limit reached')).toBeInTheDocument(); @@ -86,7 +86,7 @@ describe('multi select filter', () => { const { rerender } = render(); - userEvent.click(await screen.findByRole('button', { name: 'Tags' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-tags')); await waitForEuiPopoverOpen(); expect(screen.queryByText('Limit reached')).not.toBeInTheDocument(); @@ -123,7 +123,7 @@ describe('multi select filter', () => { render(); - userEvent.click(await screen.findByRole('button', { name: 'Tags' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-tags')); await waitForEuiPopoverOpen(); expect(await screen.findByText('Limit reached')).toBeInTheDocument(); @@ -174,7 +174,7 @@ describe('multi select filter', () => { }; render(); - userEvent.click(await screen.findByRole('button', { name: 'Tags' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-tags')); await waitForEuiPopoverOpen(); expect((await screen.findAllByTestId(TEST_ID)).length).toBe(2); }); diff --git a/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.tsx b/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.tsx index c8cc85bde823ee..eb299ee59250b5 100644 --- a/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/multi_select_filter.tsx @@ -144,7 +144,6 @@ export const MultiSelectFilter = ({ numFilters={showActiveOptionsNumber ? options.length : undefined} hasActiveFilters={showActiveOptionsNumber ? selectedOptionKeys.length > 0 : undefined} numActiveFilters={showActiveOptionsNumber ? selectedOptionKeys.length : undefined} - aria-label={buttonLabel} > {buttonLabel} 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 22ac90472a6dcd..df41f1e58c6655 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 @@ -38,7 +38,7 @@ describe('StatusFilter', () => { expect(await screen.findByTestId('options-filter-popover-button-status')).not.toBeDisabled(); - userEvent.click(await screen.findByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-status')); await waitForEuiPopoverOpen(); @@ -53,7 +53,7 @@ describe('StatusFilter', () => { it('should call onStatusChanged when changing status to open', async () => { render(); - userEvent.click(await screen.findByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-status')); await waitForEuiPopoverOpen(); userEvent.click(await screen.findByRole('option', { name: LABELS.open })); @@ -68,7 +68,7 @@ describe('StatusFilter', () => { it('should not render hidden statuses', async () => { render(); - userEvent.click(await screen.findByRole('button', { name: 'Status' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-status')); await waitForEuiPopoverOpen(); diff --git a/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx b/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx index 3d6bfa856b7a8d..fd9a3f099f639e 100644 --- a/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx +++ b/x-pack/plugins/cases/public/components/all_cases/table_filters.test.tsx @@ -367,7 +367,7 @@ describe('CasesTableFilters ', () => { /> ); - userEvent.click(screen.getByRole('button', { name: 'Solution' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-owner')); await waitForEuiPopoverOpen(); const allOptions = screen.getAllByRole('option'); @@ -490,7 +490,7 @@ describe('CasesTableFilters ', () => { it('should render its options', async () => { appMockRender.render(); - userEvent.click(await screen.findByRole('button', { name: 'Toggle' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-toggleKey')); await waitForEuiPopoverOpen(); const allOptions = screen.getAllByRole('option'); @@ -502,7 +502,7 @@ describe('CasesTableFilters ', () => { it('should call onFilterChange when On option changes', async () => { appMockRender.render(); - userEvent.click(await screen.findByRole('button', { name: 'Toggle' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-toggleKey')); await waitForEuiPopoverOpen(); userEvent.click(await screen.findByTestId('options-filter-popover-item-on')); @@ -521,7 +521,7 @@ describe('CasesTableFilters ', () => { it('should call onFilterChange when Off option changes', async () => { appMockRender.render(); - userEvent.click(await screen.findByRole('button', { name: 'Toggle' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-toggleKey')); await waitForEuiPopoverOpen(); userEvent.click(await screen.findByTestId('options-filter-popover-item-off')); @@ -552,7 +552,7 @@ describe('CasesTableFilters ', () => { }; appMockRender.render(); - userEvent.click(await screen.findByRole('button', { name: 'Toggle' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-toggleKey')); await waitForEuiPopoverOpen(); userEvent.click(await screen.findByTestId('options-filter-popover-item-off')); @@ -588,7 +588,7 @@ describe('CasesTableFilters ', () => { }; appMockRender.render(); - userEvent.click(await screen.findByRole('button', { name: 'More' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-filters')); userEvent.click(await screen.findByRole('option', { name: 'Toggle' })); expect(onFilterChanged).toHaveBeenCalledWith({ @@ -654,9 +654,7 @@ describe('CasesTableFilters ', () => { userEvent.click(screen.getByRole('button', { name: 'More' })); await waitFor(() => expect(screen.getAllByRole('option')).toHaveLength(5)); - expect(screen.queryByRole('button', { name: 'Toggle' })).not.toBeInTheDocument(); userEvent.click(screen.getByRole('option', { name: 'Toggle' })); - expect(screen.getByRole('button', { name: 'Toggle' })).toBeInTheDocument(); const filterBar = await screen.findByTestId('cases-table-filters'); const allFilters = within(filterBar).getAllByRole('button'); @@ -709,9 +707,8 @@ describe('CasesTableFilters ', () => { userEvent.click(screen.getByRole('button', { name: 'More' })); await waitFor(() => expect(screen.getAllByRole('option')).toHaveLength(5)); - expect(screen.getByRole('button', { name: 'Status' })).toBeInTheDocument(); + expect(await screen.findByTestId('options-filter-popover-button-status')).toBeInTheDocument(); userEvent.click(screen.getByRole('option', { name: 'Status' })); - expect(screen.queryByRole('button', { name: 'Status' })).not.toBeInTheDocument(); const filterBar = await screen.findByTestId('cases-table-filters'); const allFilters = within(filterBar).getAllByRole('button'); @@ -895,11 +892,11 @@ describe('CasesTableFilters ', () => { expect(allFilters[index]).toHaveTextContent(label); }); - expect(screen.getByRole('button', { name: 'Status' })).toBeInTheDocument(); - userEvent.click(screen.getByRole('button', { name: 'More' })); + expect(await screen.findByTestId('options-filter-popover-button-status')).toBeInTheDocument(); + userEvent.click(await screen.findByTestId('options-filter-popover-button-filters')); userEvent.click(await screen.findByRole('option', { name: 'Status' })); - userEvent.click(screen.getByRole('button', { name: 'More' })); + userEvent.click(await screen.findByTestId('options-filter-popover-button-filters')); userEvent.click(await screen.findByRole('option', { name: 'Status' })); allFilters = within(filterBar).getAllByRole('button'); @@ -1030,12 +1027,12 @@ describe('CasesTableFilters ', () => { appMockRender.render(); const filters = [ - { name: 'Status', active: 2 }, - { name: 'Severity', active: 1 }, - { name: 'Tags', active: 1 }, - { name: 'Categories', active: 1 }, - { name: 'Toggle', active: 1 }, - { name: 'click to filter assignees', active: 1 }, + { testId: 'options-filter-popover-button-status', active: 2 }, + { testId: 'options-filter-popover-button-severity', active: 1 }, + { testId: 'options-filter-popover-button-tags', active: 1 }, + { testId: 'options-filter-popover-button-category', active: 1 }, + { testId: 'options-filter-popover-button-toggle', active: 1 }, + { testId: 'options-filter-popover-button-assignees', active: 1 }, ]; await waitForComponentToUpdate(); @@ -1045,7 +1042,7 @@ describe('CasesTableFilters ', () => { expect(totalFilters.length).toBe(filters.length + 1); for (const filter of filters) { - const button = await screen.findByRole('button', { name: filter.name }); + const button = await screen.findByTestId(filter.testId); expect(button).toBeInTheDocument(); expect( await within(button).findByLabelText(`${filter.active} active filters`) @@ -1077,12 +1074,12 @@ describe('CasesTableFilters ', () => { appMockRender.render(); const filters = [ - { name: 'Status', active: 2 }, - { name: 'Severity', active: 1 }, - { name: 'Tags', active: 1 }, - { name: 'Categories', active: 1 }, - { name: 'Toggle', active: 1 }, - { name: 'click to filter assignees', active: 1 }, + { testId: 'options-filter-popover-button-status', active: 2 }, + { testId: 'options-filter-popover-button-severity', active: 1 }, + { testId: 'options-filter-popover-button-tags', active: 1 }, + { testId: 'options-filter-popover-button-category', active: 1 }, + { testId: 'options-filter-popover-button-toggle', active: 1 }, + { testId: 'options-filter-popover-button-assignees', active: 1 }, ]; await waitForComponentToUpdate(); @@ -1092,7 +1089,7 @@ describe('CasesTableFilters ', () => { expect(totalFilters.length).toBe(filters.length + 1); for (const filter of filters) { - const button = await screen.findByRole('button', { name: filter.name }); + const button = await screen.findByTestId(filter.testId); expect(button).toBeInTheDocument(); expect( await within(button).findByLabelText(`${filter.active} active filters`) From 95736fb536a1a5d3e1d4416f37a51cbf399356cc Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:24:32 +0200 Subject: [PATCH 40/92] [RCA] Start investigation from alert details page (#190307) Resolves https://github.com/elastic/kibana/issues/190320 and https://github.com/elastic/kibana/issues/190396 - Start investigation from Custom threshold alert details page - Go to ongoing investigation instead of creating new one if one already exists - Initial investigation status is set as `ongoing` - Investigation origin is set as `alert` "Start investigation" is hidden for other alert types and when investigate plugin is disabled. ### Testing - Add the following in `kibana.dev.yml` ``` xpack.investigate.enabled: true xpack.investigateApp.enabled: true ``` - Create Custom threshold rule - Open Custom threshold alert details page - Click on "Start investigation" - Verify that a new saved object is created for the investigation https://github.com/user-attachments/assets/6dfe8a5f-287b-4cc5-92ae-e4c315c7420b --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Kevin Delemme --- .../investigate/common/index.ts | 8 ++ .../common/schema/create.ts | 4 +- .../common/schema/find.ts | 1 + .../common/schema/get.ts | 0 .../common/schema/investigation.ts | 5 +- .../investigate/common/schema/origin.ts | 17 +++++ .../public/hooks/query_key_factory.ts | 1 + .../hooks/use_fetch_investigation_list.ts | 2 +- .../public/hooks/use_get_alert_details.tsx | 68 +++++++++++++++++ .../hooks/use_get_investigation_details.tsx | 68 +++++++++++++++++ .../details/investigation_details_page.tsx | 69 ++++++++++++++++-- .../server/models/investigation.ts | 5 +- ...investigate_app_server_route_repository.ts | 6 +- .../server/saved_objects/investigation.ts | 8 +- .../server/services/create_investigation.ts | 17 ++++- .../server/services/find_investigations.ts | 13 +++- .../server/services/get_investigation.ts | 3 +- .../services/investigation_repository.ts | 5 +- .../investigate_app/tsconfig.json | 2 + .../observability/kibana.jsonc | 1 + .../components/header_actions.test.tsx | 5 ++ .../components/header_actions.tsx | 73 +++++++++++++++++++ .../hooks/use_create_investigation.tsx | 47 ++++++++++++ .../use_fetch_investigations_by_alert.tsx | 68 +++++++++++++++++ .../observability/public/plugin.ts | 2 + .../observability/tsconfig.json | 1 + 26 files changed, 477 insertions(+), 22 deletions(-) rename x-pack/plugins/observability_solution/{investigate_app => investigate}/common/schema/create.ts (88%) rename x-pack/plugins/observability_solution/{investigate_app => investigate}/common/schema/find.ts (97%) rename x-pack/plugins/observability_solution/{investigate_app => investigate}/common/schema/get.ts (100%) rename x-pack/plugins/observability_solution/{investigate_app => investigate}/common/schema/investigation.ts (75%) create mode 100644 x-pack/plugins/observability_solution/investigate/common/schema/origin.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx create mode 100644 x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx diff --git a/x-pack/plugins/observability_solution/investigate/common/index.ts b/x-pack/plugins/observability_solution/investigate/common/index.ts index 7846f257f64fe4..71585c294f7763 100644 --- a/x-pack/plugins/observability_solution/investigate/common/index.ts +++ b/x-pack/plugins/observability_solution/investigate/common/index.ts @@ -14,3 +14,11 @@ export type { export { mergePlainObjects } from './utils/merge_plain_objects'; export { InvestigateWidgetColumnSpan } from './types'; + +export type { CreateInvestigationInput, CreateInvestigationResponse } from './schema/create'; +export type { GetInvestigationParams } from './schema/get'; +export type { FindInvestigationsResponse } from './schema/find'; + +export { createInvestigationParamsSchema } from './schema/create'; +export { getInvestigationParamsSchema } from './schema/get'; +export { findInvestigationsParamsSchema } from './schema/find'; diff --git a/x-pack/plugins/observability_solution/investigate_app/common/schema/create.ts b/x-pack/plugins/observability_solution/investigate/common/schema/create.ts similarity index 88% rename from x-pack/plugins/observability_solution/investigate_app/common/schema/create.ts rename to x-pack/plugins/observability_solution/investigate/common/schema/create.ts index 050fa67d5cbaf7..f2ba04de9e88ad 100644 --- a/x-pack/plugins/observability_solution/investigate_app/common/schema/create.ts +++ b/x-pack/plugins/observability_solution/investigate/common/schema/create.ts @@ -6,14 +6,16 @@ */ import * as t from 'io-ts'; import { investigationResponseSchema } from './investigation'; +import { alertOriginSchema, blankOriginSchema } from './origin'; const createInvestigationParamsSchema = t.type({ body: t.type({ id: t.string, title: t.string, - parameters: t.type({ + params: t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), + origin: t.union([alertOriginSchema, blankOriginSchema]), }), }); diff --git a/x-pack/plugins/observability_solution/investigate_app/common/schema/find.ts b/x-pack/plugins/observability_solution/investigate/common/schema/find.ts similarity index 97% rename from x-pack/plugins/observability_solution/investigate_app/common/schema/find.ts rename to x-pack/plugins/observability_solution/investigate/common/schema/find.ts index dc76a39fce679d..4eb9d6f9bf66c3 100644 --- a/x-pack/plugins/observability_solution/investigate_app/common/schema/find.ts +++ b/x-pack/plugins/observability_solution/investigate/common/schema/find.ts @@ -9,6 +9,7 @@ import { investigationResponseSchema } from './investigation'; const findInvestigationsParamsSchema = t.partial({ query: t.partial({ + alertId: t.string, page: t.string, perPage: t.string, }), diff --git a/x-pack/plugins/observability_solution/investigate_app/common/schema/get.ts b/x-pack/plugins/observability_solution/investigate/common/schema/get.ts similarity index 100% rename from x-pack/plugins/observability_solution/investigate_app/common/schema/get.ts rename to x-pack/plugins/observability_solution/investigate/common/schema/get.ts diff --git a/x-pack/plugins/observability_solution/investigate_app/common/schema/investigation.ts b/x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts similarity index 75% rename from x-pack/plugins/observability_solution/investigate_app/common/schema/investigation.ts rename to x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts index 3046a5c4c6d8ac..23247bba88ab88 100644 --- a/x-pack/plugins/observability_solution/investigate_app/common/schema/investigation.ts +++ b/x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts @@ -5,15 +5,18 @@ * 2.0. */ import * as t from 'io-ts'; +import { alertOriginSchema, blankOriginSchema } from './origin'; const investigationResponseSchema = t.type({ id: t.string, title: t.string, createdAt: t.number, createdBy: t.string, - parameters: t.type({ + params: t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), + origin: t.union([alertOriginSchema, blankOriginSchema]), + status: t.union([t.literal('ongoing'), t.literal('closed')]), }); type InvestigationResponse = t.OutputOf; diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/origin.ts b/x-pack/plugins/observability_solution/investigate/common/schema/origin.ts new file mode 100644 index 00000000000000..1c00f5ad73de81 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate/common/schema/origin.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import * as t from 'io-ts'; + +const blankOriginSchema = t.type({ type: t.literal('blank') }); +const alertOriginSchema = t.type({ type: t.literal('alert'), id: t.string }); + +type AlertOrigin = t.OutputOf; +type BlankOrigin = t.OutputOf; + +export { alertOriginSchema, blankOriginSchema }; + +export type { AlertOrigin, BlankOrigin }; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts index a5ff06fa24a264..5ce96f5a2061c8 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/query_key_factory.ts @@ -9,6 +9,7 @@ export const investigationKeys = { all: ['investigation'] as const, list: (params: { page: number; perPage: number }) => [...investigationKeys.all, 'list', params] as const, + fetch: (params: { id: string }) => [...investigationKeys.all, 'fetch', params] as const, }; export type InvestigationKeys = typeof investigationKeys; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts index a3ca59519211a5..fef9ce274d63e8 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts @@ -6,7 +6,7 @@ */ import { useQuery } from '@tanstack/react-query'; -import { FindInvestigationsResponse } from '../../common/schema/find'; +import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; import { investigationKeys } from './query_key_factory'; import { useKibana } from './use_kibana'; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx new file mode 100644 index 00000000000000..5f3bc3f3c9b6a1 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { BASE_RAC_ALERTS_API_PATH, EcsFieldsResponse } from '@kbn/rule-registry-plugin/common'; +import { useKibana } from './use_kibana'; + +export interface AlertParams { + id: string; +} + +export interface UseFetchAlertResponse { + isInitialLoading: boolean; + isLoading: boolean; + isRefetching: boolean; + isSuccess: boolean; + isError: boolean; + data: EcsFieldsResponse | undefined | null; +} + +export function useFetchAlert({ id }: AlertParams): UseFetchAlertResponse { + const { + core: { + http, + notifications: { toasts }, + }, + } = useKibana(); + + const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data } = useQuery({ + queryKey: ['fetchAlert', id], + queryFn: async ({ signal }) => { + return await http.get(BASE_RAC_ALERTS_API_PATH, { + query: { + id, + }, + signal, + }); + }, + cacheTime: 0, + refetchOnWindowFocus: false, + retry: (failureCount, error) => { + if (String(error) === 'Error: Forbidden') { + return false; + } + + return failureCount < 3; + }, + onError: (error: Error) => { + toasts.addError(error, { + title: 'Something went wrong while fetching alert', + }); + }, + enabled: Boolean(id), + }); + + return { + data, + isInitialLoading, + isLoading, + isRefetching, + isSuccess, + isError, + }; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx new file mode 100644 index 00000000000000..796d8bc5615751 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { GetInvestigationResponse } from '@kbn/investigate-plugin/common/schema/get'; +import { investigationKeys } from './query_key_factory'; +import { useKibana } from './use_kibana'; + +export interface FetchInvestigationParams { + id: string; +} + +export interface UseFetchInvestigationResponse { + isInitialLoading: boolean; + isLoading: boolean; + isRefetching: boolean; + isSuccess: boolean; + isError: boolean; + data: GetInvestigationResponse | undefined; +} + +export function useFetchInvestigation({ + id, +}: FetchInvestigationParams): UseFetchInvestigationResponse { + const { + core: { + http, + notifications: { toasts }, + }, + } = useKibana(); + + const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data } = useQuery({ + queryKey: investigationKeys.fetch({ id }), + queryFn: async ({ signal }) => { + return await http.get(`/api/observability/investigations/${id}`, { + version: '2023-10-31', + signal, + }); + }, + cacheTime: 0, + refetchOnWindowFocus: false, + retry: (failureCount, error) => { + if (String(error) === 'Error: Forbidden') { + return false; + } + + return failureCount < 3; + }, + onError: (error: Error) => { + toasts.addError(error, { + title: 'Something went wrong while fetching Investigation', + }); + }, + }); + + return { + data, + isInitialLoading, + isLoading, + isRefetching, + isSuccess, + isError, + }; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx index 008ae1a18524aa..ed749ce925ea18 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx @@ -5,11 +5,16 @@ * 2.0. */ -import { EuiButton } from '@elastic/eui'; +import { EuiButton, EuiButtonEmpty, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { ALERT_RULE_CATEGORY } from '@kbn/rule-data-utils/src/default_alerts_as_data'; +import { AlertOrigin } from '@kbn/investigate-plugin/common/schema/origin'; import { paths } from '../../../common/paths'; import { useKibana } from '../../hooks/use_kibana'; +import { useFetchInvestigation } from '../../hooks/use_get_investigation_details'; +import { useInvestigateParams } from '../../hooks/use_investigate_params'; +import { useFetchAlert } from '../../hooks/use_get_alert_details'; import { InvestigationDetails } from './components/investigation_details'; export function InvestigationDetailsPage() { @@ -22,8 +27,46 @@ export function InvestigationDetailsPage() { }, } = useKibana(); + const { + path: { id }, + } = useInvestigateParams('/{id}'); + const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate; + const { + data: investigationDetails, + isLoading: isFetchInvestigationLoading, + isError: isFetchInvestigationError, + } = useFetchInvestigation({ id }); + + const alertId = investigationDetails ? (investigationDetails.origin as AlertOrigin).id : ''; + + const { + data: alertDetails, + isLoading: isFetchAlertLoading, + isError: isFetchAlertError, + } = useFetchAlert({ id: alertId }); + + if (isFetchInvestigationLoading || isFetchAlertLoading) { + return ( +

+ {i18n.translate('xpack.investigateApp.fetchInvestigation.loadingLabel', { + defaultMessage: 'Loading...', + })} +

+ ); + } + + if (isFetchInvestigationError || isFetchAlertError) { + return ( +

+ {i18n.translate('xpack.investigateApp.fetchInvestigation.errorLabel', { + defaultMessage: 'Error while fetching investigation', + })} +

+ ); + } + return ( + {alertDetails && ( + + + {`[Alert] ${alertDetails?.[ALERT_RULE_CATEGORY]} breached`} + + + )} + {investigationDetails &&
{investigationDetails.title}
} + + ), rightSideItems: [ - - {i18n.translate('xpack.investigateApp.investigateDetailsPage.escalateButtonLabel', { + + {i18n.translate('xpack.investigateApp.investigationDetails.escalateButtonLabel', { defaultMessage: 'Escalate', })} , diff --git a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts index f079d922d1a9dd..041b1d217c2088 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { alertOriginSchema, blankOriginSchema } from '@kbn/investigate-plugin/common/schema/origin'; import * as t from 'io-ts'; export const investigationSchema = t.type({ @@ -12,9 +13,11 @@ export const investigationSchema = t.type({ title: t.string, createdAt: t.number, createdBy: t.string, - parameters: t.type({ + params: t.type({ timeRange: t.type({ from: t.number, to: t.number }), }), + origin: t.union([alertOriginSchema, blankOriginSchema]), + status: t.union([t.literal('ongoing'), t.literal('closed')]), }); export type Investigation = t.TypeOf; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts b/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts index 7565330316fed1..f745b46bb54b89 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts @@ -5,13 +5,13 @@ * 2.0. */ -import { findInvestigationsParamsSchema } from '../../common/schema/find'; -import { createInvestigationParamsSchema } from '../../common/schema/create'; +import { createInvestigationParamsSchema } from '@kbn/investigate-plugin/common'; +import { findInvestigationsParamsSchema } from '@kbn/investigate-plugin/common'; +import { getInvestigationParamsSchema } from '@kbn/investigate-plugin/common'; import { createInvestigation } from '../services/create_investigation'; import { investigationRepositoryFactory } from '../services/investigation_repository'; import { createInvestigateAppServerRoute } from './create_investigate_app_server_route'; import { findInvestigations } from '../services/find_investigations'; -import { getInvestigationParamsSchema } from '../../common/schema/get'; import { getInvestigation } from '../services/get_investigation'; const createInvestigationRoute = createInvestigateAppServerRoute({ diff --git a/x-pack/plugins/observability_solution/investigate_app/server/saved_objects/investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/saved_objects/investigation.ts index 47fa9f17749c15..eeb937fb16cfa3 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/saved_objects/investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/saved_objects/investigation.ts @@ -15,12 +15,18 @@ export const investigation: SavedObjectsType = { name: SO_INVESTIGATION_TYPE, hidden: false, namespaceType: 'multiple-isolated', - switchToModelVersionAt: '8.10.0', mappings: { dynamic: false, properties: { id: { type: 'keyword' }, title: { type: 'text' }, + origin: { + properties: { + type: { type: 'keyword' }, + id: { type: 'keyword' }, + }, + }, + status: { type: 'keyword' }, }, }, management: { diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts index 9d28136c06f6c6..52b5953fb80951 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts @@ -5,14 +5,27 @@ * 2.0. */ -import { CreateInvestigationInput, CreateInvestigationResponse } from '../../common/schema/create'; +import { + CreateInvestigationInput, + CreateInvestigationResponse, +} from '@kbn/investigate-plugin/common'; import { InvestigationRepository } from './investigation_repository'; +enum InvestigationStatus { + ongoing = 'ongoing', + closed = 'closed', +} + export async function createInvestigation( params: CreateInvestigationInput, repository: InvestigationRepository ): Promise { - const investigation = { ...params, createdAt: Date.now(), createdBy: 'elastic' }; + const investigation = { + ...params, + createdAt: Date.now(), + createdBy: 'elastic', + status: InvestigationStatus.ongoing, + }; await repository.save(investigation); return investigation; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts index 2c08125aff734e..0db6f2eb587b8a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts @@ -5,18 +5,18 @@ * 2.0. */ +import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; import { FindInvestigationsParams, - FindInvestigationsResponse, findInvestigationsResponseSchema, -} from '../../common/schema/find'; +} from '@kbn/investigate-plugin/common/schema/find'; import { InvestigationRepository } from './investigation_repository'; export async function findInvestigations( params: FindInvestigationsParams, repository: InvestigationRepository ): Promise { - const investigations = await repository.search(toPagination(params)); + const investigations = await repository.search(toFilter(params), toPagination(params)); return findInvestigationsResponseSchema.encode(investigations); } @@ -29,3 +29,10 @@ function toPagination(params: FindInvestigationsParams) { perPage: params.perPage ? parseInt(params.perPage, 10) : DEFAULT_PER_PAGE, }; } + +function toFilter(params: FindInvestigationsParams) { + if (params.alertId) { + return `investigation.attributes.origin.id:(${params.alertId}) AND investigation.attributes.status: ongoing`; + } + return ''; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts index 9bd6025f8e8a23..e57111af99e323 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { GetInvestigationParams, GetInvestigationResponse } from '../../common/schema/get'; +import { GetInvestigationParams } from '@kbn/investigate-plugin/common'; +import { GetInvestigationResponse } from '@kbn/investigate-plugin/common/schema/get'; import { InvestigationRepository } from './investigation_repository'; export async function getInvestigation( diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts index 6d9c5ddbc0d03e..090930351fc14a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/investigation_repository.ts @@ -15,7 +15,7 @@ export interface InvestigationRepository { save(investigation: Investigation): Promise; findById(id: string): Promise; deleteById(id: string): Promise; - search(pagination: Pagination): Promise>; + search(filter: string, pagination: Pagination): Promise>; } export function investigationRepositoryFactory({ @@ -89,11 +89,12 @@ export function investigationRepositoryFactory({ await soClient.delete(SO_INVESTIGATION_TYPE, response.saved_objects[0].id); }, - async search(pagination: Pagination): Promise> { + async search(filter: string, pagination: Pagination): Promise> { const response = await soClient.find({ type: SO_INVESTIGATION_TYPE, page: pagination.page, perPage: pagination.perPage, + filter, }); return { diff --git a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json index b4b586601ebaa9..6647b16356984a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json @@ -52,5 +52,7 @@ "@kbn/esql-datagrid", "@kbn/server-route-repository-utils", "@kbn/core-saved-objects-server", + "@kbn/rule-registry-plugin", + "@kbn/rule-data-utils", ], } diff --git a/x-pack/plugins/observability_solution/observability/kibana.jsonc b/x-pack/plugins/observability_solution/observability/kibana.jsonc index 997b6196def4b6..8e97ea707641d0 100644 --- a/x-pack/plugins/observability_solution/observability/kibana.jsonc +++ b/x-pack/plugins/observability_solution/observability/kibana.jsonc @@ -51,6 +51,7 @@ "serverless", "guidedOnboarding", "observabilityAIAssistant", + "investigate" ], "requiredBundles": [ "data", diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.test.tsx index b3e28ba222c5a3..d484773e0b14a6 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.test.tsx @@ -34,6 +34,10 @@ const mockHttp = { }, }; +const mockNavigateToApp = { + mockNavigateToApp: jest.fn(), +}; + const mockGetEditRuleFlyout = jest.fn(() => (
mocked component
)); @@ -48,6 +52,7 @@ const mockKibana = () => { }, cases: mockCases, http: mockHttp, + application: mockNavigateToApp, }, }); }; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx index 3d47e340029458..6ea43b165fe7a6 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/header_actions.tsx @@ -25,13 +25,22 @@ import { ALERT_RULE_UUID, ALERT_STATUS_ACTIVE, ALERT_UUID, + ALERT_RULE_CATEGORY, + ALERT_START, + ALERT_END, + ALERT_RULE_TYPE_ID, + OBSERVABILITY_THRESHOLD_RULE_TYPE_ID, } from '@kbn/rule-data-utils'; +import { v4 as uuidv4 } from 'uuid'; +import { getPaddedAlertTimeRange } from '@kbn/observability-get-padded-alert-time-range-util'; import { useKibana } from '../../../utils/kibana_react'; import { useFetchRule } from '../../../hooks/use_fetch_rule'; import type { TopAlert } from '../../../typings/alerts'; import { paths } from '../../../../common/locators/paths'; import { useBulkUntrackAlerts } from '../hooks/use_bulk_untrack_alerts'; +import { useCreateInvestigation } from '../hooks/use_create_investigation'; +import { useFetchInvestigationsByAlert } from '../hooks/use_fetch_investigations_by_alert'; export interface HeaderActionsProps { alert: TopAlert | null; @@ -52,12 +61,18 @@ export function HeaderActions({ }, triggersActionsUi: { getEditRuleFlyout: EditRuleFlyout, getRuleSnoozeModal: RuleSnoozeModal }, http, + application: { navigateToApp }, + investigate: investigatePlugin, } = useKibana().services; const { rule, refetch } = useFetchRule({ ruleId: alert?.fields[ALERT_RULE_UUID] || '', }); + const { data: investigations } = useFetchInvestigationsByAlert({ + alertId: alert?.fields[ALERT_UUID] ?? '', + }); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [ruleConditionsFlyoutOpen, setRuleConditionsFlyoutOpen] = useState(false); const [snoozeModalOpen, setSnoozeModalOpen] = useState(false); @@ -109,9 +124,67 @@ export function HeaderActions({ setSnoozeModalOpen(true); }; + const { mutateAsync: createInvestigation } = useCreateInvestigation(); + + const alertStart = alert?.fields[ALERT_START]; + const alertEnd = alert?.fields[ALERT_END]; + + const createOrOpenInvestigation = async () => { + if (!alert) return; + + if (!investigations || investigations.results.length === 0) { + const paddedAlertTimeRange = getPaddedAlertTimeRange(alertStart!, alertEnd); + + const investigationResponse = await createInvestigation({ + investigation: { + id: uuidv4(), + title: `Investigate ${alert.fields[ALERT_RULE_CATEGORY]} breached`, + params: { + timeRange: { + from: new Date(paddedAlertTimeRange.from).getTime(), + to: new Date(paddedAlertTimeRange.to).getTime(), + }, + }, + origin: { + type: 'alert', + id: alert.fields[ALERT_UUID], + }, + }, + }); + + navigateToApp('investigate', { path: `/${investigationResponse.id}`, replace: false }); + } else { + navigateToApp('investigate', { + path: `/${investigations.results[0].id}`, + replace: false, + }); + } + }; + return ( <> + {Boolean(investigatePlugin) && + alert?.fields[ALERT_RULE_TYPE_ID] === OBSERVABILITY_THRESHOLD_RULE_TYPE_ID && ( + + { + createOrOpenInvestigation(); + }} + fill + data-test-subj="investigate-alert-button" + > + + {i18n.translate('xpack.observability.alertDetails.investigateAlert', { + defaultMessage: + !investigations || investigations.results.length === 0 + ? 'Start investigation' + : 'Ongoing investigation', + })} + + + + )} ; + +export function useCreateInvestigation() { + const { + http, + notifications: { toasts }, + } = useKibana().services; + + return useMutation< + CreateInvestigationResponse, + ServerError, + { investigation: CreateInvestigationInput }, + { previousData?: FindInvestigationsResponse; queryKey?: QueryKey } + >( + ['createInvestigation'], + ({ investigation }) => { + const body = JSON.stringify(investigation); + return http.post(`/api/observability/investigations`, { body }); + }, + { + onError: (error, { investigation }, context) => { + toasts.addError(new Error(error.body?.message ?? error.message), { + title: i18n.translate('xpack.observability.create.errorNotification', { + defaultMessage: 'Something went wrong while creating investigation', + }), + }); + }, + } + ); +} diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx new file mode 100644 index 00000000000000..d9376f30d95797 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; +import { useKibana } from '../../../utils/kibana_react'; + +export interface InvestigationsByAlertParams { + alertId: string; +} + +export interface UseFetchInvestigationsByAlertResponse { + isInitialLoading: boolean; + isLoading: boolean; + isRefetching: boolean; + isSuccess: boolean; + isError: boolean; + data: FindInvestigationsResponse | undefined; +} + +export function useFetchInvestigationsByAlert({ + alertId, +}: InvestigationsByAlertParams): UseFetchInvestigationsByAlertResponse { + const { + http, + notifications: { toasts }, + investigate: investigatePlugin, + } = useKibana().services; + + const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data } = useQuery({ + queryKey: ['fetchInvestigationsByAlert', alertId], + queryFn: async ({ signal }) => { + return await http.get('/api/observability/investigations', { + query: { alertId }, + version: '2023-10-31', + signal, + }); + }, + cacheTime: 0, + refetchOnWindowFocus: false, + retry: (failureCount, error) => { + if (String(error) === 'Error: Forbidden') { + return false; + } + + return failureCount < 3; + }, + onError: (error: Error) => { + toasts.addError(error, { + title: 'Something went wrong while fetching Investigations', + }); + }, + enabled: Boolean(investigatePlugin), + }); + + return { + data, + isInitialLoading, + isLoading, + isRefetching, + isSuccess, + isError, + }; +} diff --git a/x-pack/plugins/observability_solution/observability/public/plugin.ts b/x-pack/plugins/observability_solution/observability/public/plugin.ts index a97085f0c036d9..b2d0e526f3c64c 100644 --- a/x-pack/plugins/observability_solution/observability/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability/public/plugin.ts @@ -70,6 +70,7 @@ import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public' import type { PresentationUtilPluginStart } from '@kbn/presentation-util-plugin/public'; import { DataViewFieldEditorStart } from '@kbn/data-view-field-editor-plugin/public'; import { LicenseManagementUIPluginSetup } from '@kbn/license-management-plugin/public'; +import { InvestigatePublicStart } from '@kbn/investigate-plugin/public'; import { observabilityAppId, observabilityFeatureId } from '../common'; import { ALERTS_PATH, @@ -161,6 +162,7 @@ export interface ObservabilityPublicPluginsStart { theme: CoreStart['theme']; dataViewFieldEditor: DataViewFieldEditorStart; toastNotifications: ToastsStart; + investigate?: InvestigatePublicStart; } export type ObservabilityPublicStart = ReturnType; diff --git a/x-pack/plugins/observability_solution/observability/tsconfig.json b/x-pack/plugins/observability_solution/observability/tsconfig.json index 28f06a81d17c04..53390c6c2d5357 100644 --- a/x-pack/plugins/observability_solution/observability/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability/tsconfig.json @@ -110,6 +110,7 @@ "@kbn/license-management-plugin", "@kbn/observability-alerting-rule-utils", "@kbn/core-ui-settings-server-mocks", + "@kbn/investigate-plugin", ], "exclude": [ "target/**/*" From f74d479014bd851b1f88f25d3b9886a71b8781d2 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Wed, 14 Aug 2024 15:39:30 +0200 Subject: [PATCH 41/92] [Lens] unskip flaky test (#190419) ## Summary Fixes https://github.com/elastic/kibana/issues/164623 --- .../apps/lens/group1/ad_hoc_data_view.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts index a97577696b0c64..4af556b8c83b8a 100644 --- a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts +++ b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts @@ -73,6 +73,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(await dataViews.isAdHoc()).to.be(true); }; + const waitForPageReady = async () => { + await PageObjects.header.waitUntilLoadingHasFinished(); + await retry.waitFor('page ready after refresh', async () => { + const queryBarVisible = await testSubjects.exists('globalQueryBar'); + return queryBarVisible; + }); + }; + describe('lens ad hoc data view tests', () => { it('should allow building a chart based on ad hoc data view', async () => { await setupAdHocDataView(); @@ -225,9 +233,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const [lensHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(lensHandle); }); - - // Failing: See https://github.com/elastic/kibana/issues/164623 - it.skip('should navigate to discover from embeddable correctly', async () => { + it('should navigate to discover from embeddable correctly', async () => { const [lensHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(lensHandle); await PageObjects.header.waitUntilLoadingHasFinished(); @@ -247,6 +253,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'new' ); + await PageObjects.header.waitUntilLoadingHasFinished(); await checkDiscoverNavigationResult(); await browser.closeCurrentWindow(); @@ -256,6 +263,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // adhoc data view should be persisted after refresh await browser.refresh(); + await waitForPageReady(); await checkDiscoverNavigationResult(); await browser.closeCurrentWindow(); From 5ce361170ca078285ad6cf1e3ae1df448b7bb7a8 Mon Sep 17 00:00:00 2001 From: Maryam Saeidi Date: Wed, 14 Aug 2024 15:41:25 +0200 Subject: [PATCH 42/92] Fix translation (#190504) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not sure why CI didn't fail in the [main PR](https://github.com/elastic/kibana/pull/190031), but it did in the [backport](https://github.com/elastic/kibana/pull/190494) 🤔 --- .../observability/server/lib/rules/custom_threshold/utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts index 74f6089af312f5..ca9b378d74eaa5 100644 --- a/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts +++ b/x-pack/plugins/observability_solution/observability/server/lib/rules/custom_threshold/utils.ts @@ -59,7 +59,8 @@ export const validateKQLStringFilter = (value: string) => { }); } catch (e) { return i18n.translate('xpack.observability.customThreshold.rule.schema.invalidFilterQuery', { - defaultMessage: `filterQuery must be a valid KQL filter (error: ${e.message})`, + defaultMessage: 'filterQuery must be a valid KQL filter (error: {errorMessage})', + values: { errorMessage: e?.message }, }); } }; From 211170c3f05dcab80870d7a94db7cb9b5819f207 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Wed, 14 Aug 2024 16:50:30 +0200 Subject: [PATCH 43/92] Run serverless jest integration with security enabled (#190414) --- .../src/create_serverless_root.ts | 7 ++++--- .../core-test-helpers-kbn-server/tsconfig.json | 1 + .../elasticsearch/capabilities_serverless.test.ts | 10 +++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_serverless_root.ts b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_serverless_root.ts index 4dd1486589dbe8..e024d3320f8c43 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_serverless_root.ts +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/src/create_serverless_root.ts @@ -14,6 +14,8 @@ import { REPO_ROOT } from '@kbn/repo-info'; import { ToolingLog } from '@kbn/tooling-log'; import { esTestConfig } from '@kbn/test'; import { CliArgs } from '@kbn/config'; +import { kibanaDevServiceAccount } from '@kbn/dev-utils'; +import { systemIndicesSuperuser } from '@kbn/test'; import { createRoot, type TestElasticsearchUtils, type TestKibanaUtils } from './create_root'; export type TestServerlessESUtils = Pick & { @@ -27,7 +29,6 @@ export interface TestServerlessUtils { } const ES_BASE_PATH_DIR = Path.join(REPO_ROOT, '.es/es_test_serverless'); - const projectType: ServerlessProjectType = 'es'; /** @@ -97,8 +98,6 @@ function createServerlessES() { kill: true, waitForReady: true, ...esServerlessImageParams, - // security is enabled by default, if needed kibana requires serviceAccountToken - esArgs: ['xpack.security.enabled=false'], }); const client = getServerlessESClient({ port: esPort }); @@ -116,6 +115,7 @@ const getServerlessESClient = ({ port }: { port: number }) => { return new Client({ node: `http://localhost:${port}`, Connection: HttpConnection, + auth: { ...systemIndicesSuperuser }, }); }; @@ -130,6 +130,7 @@ const getServerlessDefault = () => { }, elasticsearch: { hosts: [`http://localhost:${esTestConfig.getPort()}`], + serviceAccountToken: kibanaDevServiceAccount.token, }, migrations: { algorithm: 'zdt', diff --git a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json index 8afae2b7d74c30..85d14bb04ab59f 100644 --- a/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json +++ b/packages/core/test-helpers/core-test-helpers-kbn-server/tsconfig.json @@ -19,6 +19,7 @@ "@kbn/repo-info", "@kbn/repo-packages", "@kbn/es", + "@kbn/dev-utils", ], "exclude": [ "target/**/*", diff --git a/src/core/server/integration_tests/elasticsearch/capabilities_serverless.test.ts b/src/core/server/integration_tests/elasticsearch/capabilities_serverless.test.ts index 314fa311cf7056..eb1f7343478340 100644 --- a/src/core/server/integration_tests/elasticsearch/capabilities_serverless.test.ts +++ b/src/core/server/integration_tests/elasticsearch/capabilities_serverless.test.ts @@ -31,7 +31,15 @@ describe('ES capabilities for serverless ES', () => { }); it('returns the correct capabilities', async () => { - const capabilities = await getCapabilitiesFromClient(client); + const capabilities = await Promise.race([ + getCapabilitiesFromClient(client), + new Promise((_, reject) => + setTimeout( + () => reject('Waited 10+ seconds to get capabilities from ES, timed out...'), + 10_000 + ) + ), + ]); expect(capabilities).toEqual({ serverless: true, }); From 286e0e0a9fffcb9b90d339551e67cdb1c5c60183 Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 14 Aug 2024 08:15:29 -0700 Subject: [PATCH 44/92] [OAS][DOCS] Edit linting rule severity (#190470) --- oas_docs/.spectral.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/oas_docs/.spectral.yaml b/oas_docs/.spectral.yaml index ec05decbc1fe48..b2968ad80eb474 100644 --- a/oas_docs/.spectral.yaml +++ b/oas_docs/.spectral.yaml @@ -16,9 +16,12 @@ rules: # Operations operation-operationId: error operation-operationId-unique: error - operation-operationId-valid-in-url: error + operation-operationId-valid-in-url: false operation-tag-defined: warn operation-tags: warn + # Parameters + # Lower severity to allow optional path parameters + path-params: warn # Responses operation-success-response: warn # Schema From 12e6a92ee14c9f190d0f1d906048a35cc82b1ee5 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Wed, 14 Aug 2024 09:23:52 -0600 Subject: [PATCH 45/92] [ES|QL] document ES|QL testing (#190252) ## Summary Adds documentation for how we currently test our validation and autocomplete engines. --------- Co-authored-by: Stratoula Kalafateli Co-authored-by: Elastic Machine --- .../README.md | 157 +++++++++++++++++- .../autocomplete.suggest.test.ts | 8 +- 2 files changed, 155 insertions(+), 10 deletions(-) rename packages/kbn-esql-validation-autocomplete/src/autocomplete/{ => __tests__}/autocomplete.suggest.test.ts (87%) diff --git a/packages/kbn-esql-validation-autocomplete/README.md b/packages/kbn-esql-validation-autocomplete/README.md index b5a4fc4d71c614..f964033090c2d2 100644 --- a/packages/kbn-esql-validation-autocomplete/README.md +++ b/packages/kbn-esql-validation-autocomplete/README.md @@ -209,12 +209,157 @@ Note that autocomplete works most of the time with incomplete/invalid queries, s Once the AST is produced there's a `getAstContext` function that finds the cursor position node (and its parent command), together with some hint like the type of current context: `expression`, `function`, `newCommand`, `option`. The most complex case is the `expression` as it can cover a multitude of cases. The function is highly commented in order to identify the specific cases, but there's probably some obscure area still to comment/clarify. -### Adding new commands/options/functions/etc... +### Automated testing -To update the definitions: +Both the validation and autocomplete engine are covered by extensive suites of tests. -1. open either appropriate definition file within the `definitions` folder and add a new entry to the relative array -2. if you are adding a function, run `yarn maketests` to add a set of fundamental validation tests for the new definition. If any of the suggested tests are wrong, feel free to correct them by hand. If it seems like a general problem, open an issue with the details so that we can update the generator code. -3. write new tests for validation and autocomplete +#### Running the tests -- if a new function requires a new type of test, make sure to write it manually +All the tests can be run using the `yarn jest:tests packages/kbn-esql-validation-autocomplete/path/to/test/file` command at the root of the repository. + +To run all autocomplete and validation tests you can specifically run + +`yarn test:jest packages/kbn-esql-validation-autocomplete/` + +#### Ongoing refactor + +The test suites are in a state of transition from an older pattern to a newer pattern and so they are more complicated than we would like. We aim to improve and simplify the DX over time. + +The older pattern is + +- a single test file for each engine, one for validation, one for autocomplete. These were always large files and have only grown. +- custom test methods: `testSuggestions` / `testErrorsAndWarnings` +- validation cases are recorded in a JSON file which is then used to check our results against a live Elasticsearch instance in a functional test + +The newer pattern is + +- splitting the tests into multiple smaller files, all found in `__tests__` directories +- standard test methods (`it`, `test`) with custom _assertion_ helpers +- validation cases are checked against Elasticsearch by injecting assertion helpers run API integration tests. This does not require a JSON file. + +#### Validation + +##### The new way + +Validation test logic is found in `packages/kbn-esql-validation-autocomplete/src/validation/__tests__`. + +Tests are found in files named with the following convention: `validation.some-description.test.ts`. + +Here is an example of a block in the new test format. + +```ts +describe('METRICS [ [ BY ]]', () => { + test('errors on invalid command start', async () => { + const { expectErrors } = await setup(); + + await expectErrors('m', [ + "SyntaxError: mismatched input 'm' expecting {'explain', 'from', 'meta', 'metrics', 'row', 'show'}", + ]); + await expectErrors('metrics ', [ + "SyntaxError: mismatched input '' expecting {UNQUOTED_SOURCE, QUOTED_STRING}", + ]); + }); +}); +``` + +`expectErrors` is created in the `setup()` factory. It has a very similar API to `testErrorsAndWarnings` however it is not itself a Jest test case. It is simply an assertion that is wrapped in a test case defined with the standard `test` or `it` function. + +##### The old way + +The old validation tests look like this + +```ts +testErrorsAndWarnings(`ROW var = NOT 5 LIKE "?a"`, [ + `Argument of [LIKE] must be [text], found value [5] type [integer]`, +]); +``` + +and are found in `packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts`. + +`testErrorsAndWarnings` supports `skip` and `only` modifiers e.g. `testErrorsAndWarnings.only('...')`. + +It accepts + +1. a query +2. a list of expected errors (can be empty) +3. a list of expected warnings (can be empty or omitted) + +The bulk of the validation tests are auto-generated from function definitions. All the generated function tests are found within the following describe block + +```ts +describe(FUNCTION_DESCRIBE_BLOCK_NAME, () => { + ... +}); +``` + +They are currently generated in CI when a new function definition is added. The generator script is at `packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts`. + +The generator can be run locally using the `cd packages/kbn-esql-validation-autocomplete && yarn make:tests`. + +It is not perfect and occasionally creates a test case that is invalid for a particular function. So, humans are allowed to edit the expected assertions for any test case—those edits will not be overwritten by the generator script. However, if a human deletes a test case, it will be added back next time the generator runs. So, we should edit the test cases to make them valid, not delete them. + +Running the tests in `validation.test.ts` populates `packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json` which is then used in `test/api_integration/apis/esql/errors.ts` to make sure our validator isn't giving users false positives. Therefore, the validation test suite should always be run after any changes have been made to it so that the JSON file stays in sync. + +#### Autocomplete + +##### The new way + +The new tests are found in `packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__`. + +They look like this. + +```ts +test('lists possible aggregations on space after command', async () => { + const { assertSuggestions } = await setup(); + const expected = ['var0 = ', ...allAggFunctions, ...allEvaFunctions]; + + await assertSuggestions('from a | stats /', expected); + await assertSuggestions('FROM a | STATS /', expected); +}); +``` + +`assertSuggestions` is created by the `setup` factory. It does not set up a Jest test case internally, so it needs to be wrapped in `test` or `it`. + +The suggestion position is calculated from the placement of `/` in the query. + +The arguments are as follows + +1. the query +2. the expected suggestions (`Array`) +3. options + +Options is + +```ts +export interface SuggestOptions { + triggerCharacter?: string; + callbacks?: ESQLCallbacks; +} +``` + +So, that allows you to customize the [trigger kind](https://microsoft.github.io/monaco-editor/typedoc/enums/languages.CompletionTriggerKind.html) in the `ctx` object and the field list and other callback results in `callbacks`. + +##### The old way + +All the legacy autocomplete tests are found in `packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts`. + +They look like this + +```ts +testSuggestions('from a | eval a = 1 year /', [ + ',', + '| ', + ...getFunctionSignaturesByReturnType('eval', 'any', { builtin: true, skipAssign: true }, [ + 'time_interval', + ]), +]); +``` + +Similarly to `testErrorsAndWarnings`, `testSuggestions` is an all-in-one utility that sets up a Jest test case internally. + +Its parameters are as follows + +1. the query +2. the expected suggestions (can be strings or `Partial`) +3. the trigger character. This should only be included if the test is intended to validate a "Trigger Character" trigger kind from Monaco ([ref](https://microsoft.github.io/monaco-editor/typedoc/enums/languages.CompletionTriggerKind.html#TriggerCharacter)) +4. custom callback data such as a list of indicies or a field list diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.suggest.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.test.ts similarity index 87% rename from packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.suggest.test.ts rename to packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.test.ts index 7bb96f602c0dc0..bafd33a56c204d 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.suggest.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.suggest.test.ts @@ -7,10 +7,10 @@ */ import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; -import { ESQLCallbacks } from '../shared/types'; -import * as autocomplete from './autocomplete'; -import { getCallbackMocks } from '../__tests__/helpers'; -import { EditorContext } from './types'; +import { ESQLCallbacks } from '../../shared/types'; +import * as autocomplete from '../autocomplete'; +import { getCallbackMocks } from '../../__tests__/helpers'; +import { EditorContext } from '../types'; const setup = async (caret = '?') => { if (caret.length !== 1) throw new Error('Caret must be a single character'); From 8e736c4918afdf3f038c03ae3ea75e37259ad431 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 14 Aug 2024 17:27:41 +0200 Subject: [PATCH 46/92] [Fleet] Avoid extra fetch package policy calls (#190398) ## Summary i noticed few extra calls which can be prevented during package policy updates/creation while investigating synthetics project monitor API call !! --------- Co-authored-by: Nicolas Chaulet --- .../fleet/common/types/rest_spec/common.ts | 1 + .../agent_policies/full_agent_policy.ts | 11 ++++- .../fleet/server/services/agent_policy.ts | 49 ++++++++++++++----- .../server/services/agent_policy_update.ts | 8 +-- .../services/fleet_server/index.test.ts | 1 + .../server/services/fleet_server/index.ts | 6 ++- .../fleet/server/services/package_policy.ts | 10 +++- 7 files changed, 66 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/fleet/common/types/rest_spec/common.ts b/x-pack/plugins/fleet/common/types/rest_spec/common.ts index 07bd3c7019c168..2eda7dd7f99830 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/common.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/common.ts @@ -13,6 +13,7 @@ export interface ListWithKuery extends HttpFetchQuery { sortField?: string; sortOrder?: 'desc' | 'asc'; kuery?: string; + fields?: string[]; } export interface ListResult { diff --git a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts index 0cfce9eb264f45..19d01af65a5c6d 100644 --- a/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policies/full_agent_policy.ts @@ -25,6 +25,7 @@ import type { FullAgentPolicyOutput, FleetProxy, FleetServerHost, + AgentPolicy, } from '../../types'; import type { FullAgentPolicyMonitoring, @@ -67,11 +68,17 @@ async function fetchAgentPolicy(soClient: SavedObjectsClientContract, id: string export async function getFullAgentPolicy( soClient: SavedObjectsClientContract, id: string, - options?: { standalone: boolean } + options?: { standalone?: boolean; agentPolicy?: AgentPolicy } ): Promise { const standalone = options?.standalone ?? false; - const agentPolicy = await fetchAgentPolicy(soClient, id); + let agentPolicy: AgentPolicy | null; + if (options?.agentPolicy?.package_policies) { + agentPolicy = options.agentPolicy; + } else { + agentPolicy = await fetchAgentPolicy(soClient, id); + } + if (!agentPolicy) { return null; } diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index 42bede95986b6c..a7176083a718f7 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -121,7 +121,7 @@ class AgentPolicyService { esClient: ElasticsearchClient, action: 'created' | 'updated' | 'deleted', agentPolicyId: string, - options?: { skipDeploy?: boolean; spaceId?: string } + options?: { skipDeploy?: boolean; spaceId?: string; agentPolicy?: AgentPolicy | null } ) => { return agentPolicyUpdateEventHandler(esClient, action, agentPolicyId, options); }; @@ -132,10 +132,16 @@ class AgentPolicyService { id: string, agentPolicy: Partial, user?: AuthenticatedUser, - options: { bumpRevision: boolean; removeProtection: boolean; skipValidation: boolean } = { + options: { + bumpRevision: boolean; + removeProtection: boolean; + skipValidation: boolean; + returnUpdatedPolicy?: boolean; + } = { bumpRevision: true, removeProtection: false, skipValidation: false, + returnUpdatedPolicy: true, } ): Promise { auditLoggingService.writeCustomSoAuditLog({ @@ -173,6 +179,7 @@ class AgentPolicyService { getAllowedOutputTypeForPolicy(existingAgentPolicy) ); } + await soClient.update(SAVED_OBJECT_TYPE, id, { ...agentPolicy, ...(options.bumpRevision ? { revision: existingAgentPolicy.revision + 1 } : {}), @@ -183,9 +190,14 @@ class AgentPolicyService { updated_by: user ? user.username : 'system', }); + const newAgentPolicy = await this.get(soClient, id, false); + + newAgentPolicy!.package_policies = existingAgentPolicy.package_policies; + if (options.bumpRevision || options.removeProtection) { await this.triggerAgentPolicyUpdatedEvent(esClient, 'updated', id, { spaceId: soClient.getCurrentNamespace(), + agentPolicy: newAgentPolicy, }); } logger.debug( @@ -193,7 +205,10 @@ class AgentPolicyService { options.bumpRevision ? existingAgentPolicy.revision + 1 : existingAgentPolicy.revision }` ); - return (await this.get(soClient, id)) as AgentPolicy; + if (options.returnUpdatedPolicy !== false) { + return (await this.get(soClient, id)) as AgentPolicy; + } + return newAgentPolicy as AgentPolicy; } public async ensurePreconfiguredAgentPolicy( @@ -772,14 +787,13 @@ class AgentPolicyService { esClient: ElasticsearchClient, id: string, options?: { user?: AuthenticatedUser; removeProtection?: boolean } - ): Promise { - const res = await this._update(soClient, esClient, id, {}, options?.user, { + ): Promise { + await this._update(soClient, esClient, id, {}, options?.user, { bumpRevision: true, removeProtection: options?.removeProtection ?? false, skipValidation: false, + returnUpdatedPolicy: false, }); - - return res; } /** @@ -1132,11 +1146,19 @@ class AgentPolicyService { }; } - public async deployPolicy(soClient: SavedObjectsClientContract, agentPolicyId: string) { - await this.deployPolicies(soClient, [agentPolicyId]); + public async deployPolicy( + soClient: SavedObjectsClientContract, + agentPolicyId: string, + agentPolicy?: AgentPolicy | null + ) { + await this.deployPolicies(soClient, [agentPolicyId], agentPolicy ? [agentPolicy] : undefined); } - public async deployPolicies(soClient: SavedObjectsClientContract, agentPolicyIds: string[]) { + public async deployPolicies( + soClient: SavedObjectsClientContract, + agentPolicyIds: string[], + agentPolicies?: AgentPolicy[] + ) { // Use internal ES client so we have permissions to write to .fleet* indices const esClient = appContextService.getInternalUserESClient(); const defaultOutputId = await outputService.getDefaultDataOutputId(soClient); @@ -1158,7 +1180,10 @@ class AgentPolicyService { // There are some potential performance concerns around using `getFullAgentPolicy` in this context, e.g. // re-fetching outputs, settings, and upgrade download source URI data for each policy. This could potentially // be a bottleneck in environments with several thousand agent policies being deployed here. - (agentPolicyId) => agentPolicyService.getFullAgentPolicy(soClient, agentPolicyId), + (agentPolicyId) => + agentPolicyService.getFullAgentPolicy(soClient, agentPolicyId, { + agentPolicy: agentPolicies?.find((policy) => policy.id === agentPolicyId), + }), { concurrency: 50, } @@ -1359,7 +1384,7 @@ class AgentPolicyService { public async getFullAgentPolicy( soClient: SavedObjectsClientContract, id: string, - options?: { standalone: boolean } + options?: { standalone?: boolean; agentPolicy?: AgentPolicy } ): Promise { return getFullAgentPolicy(soClient, id, options); } diff --git a/x-pack/plugins/fleet/server/services/agent_policy_update.ts b/x-pack/plugins/fleet/server/services/agent_policy_update.ts index 54203900a7dc11..b295c2ca6d7448 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy_update.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy_update.ts @@ -8,6 +8,8 @@ import type { KibanaRequest } from '@kbn/core/server'; import type { ElasticsearchClient } from '@kbn/core/server'; +import type { AgentPolicy } from '../../common'; + import { generateEnrollmentAPIKey, deleteEnrollmentApiKeyForAgentPolicyId } from './api_keys'; import { unenrollForAgentPolicyId } from './agents'; import { agentPolicyService } from './agent_policy'; @@ -32,7 +34,7 @@ export async function agentPolicyUpdateEventHandler( esClient: ElasticsearchClient, action: string, agentPolicyId: string, - options?: { skipDeploy?: boolean; spaceId?: string } + options?: { skipDeploy?: boolean; spaceId?: string; agentPolicy?: AgentPolicy | null } ) { // `soClient` from ingest `appContextService` is used to create policy change actions // to ensure encrypted SOs are handled correctly @@ -47,12 +49,12 @@ export async function agentPolicyUpdateEventHandler( forceRecreate: true, }); if (!options?.skipDeploy) { - await agentPolicyService.deployPolicy(internalSoClient, agentPolicyId); + await agentPolicyService.deployPolicy(internalSoClient, agentPolicyId, options?.agentPolicy); } } if (action === 'updated') { - await agentPolicyService.deployPolicy(internalSoClient, agentPolicyId); + await agentPolicyService.deployPolicy(internalSoClient, agentPolicyId, options?.agentPolicy); } if (action === 'deleted') { diff --git a/x-pack/plugins/fleet/server/services/fleet_server/index.test.ts b/x-pack/plugins/fleet/server/services/fleet_server/index.test.ts index 7faea8c5268192..ac97411a5b92fc 100644 --- a/x-pack/plugins/fleet/server/services/fleet_server/index.test.ts +++ b/x-pack/plugins/fleet/server/services/fleet_server/index.test.ts @@ -45,6 +45,7 @@ describe('checkFleetServerVersionsForSecretsStorage', () => { afterEach(() => { appContextService.stop(); jest.clearAllMocks(); + jest.restoreAllMocks(); }); const esClientMock = elasticsearchServiceMock.createElasticsearchClient(); diff --git a/x-pack/plugins/fleet/server/services/fleet_server/index.ts b/x-pack/plugins/fleet/server/services/fleet_server/index.ts index a0d508f0929e93..7a5c4a48695d6b 100644 --- a/x-pack/plugins/fleet/server/services/fleet_server/index.ts +++ b/x-pack/plugins/fleet/server/services/fleet_server/index.ts @@ -113,18 +113,20 @@ export async function checkFleetServerVersionsForSecretsStorage( let hasMore = true; const policyIds = new Set(); let page = 1; + const perPage = 200; while (hasMore) { const res = await packagePolicyService.list(soClient, { page: page++, - perPage: 20, + perPage, kuery: 'ingest-package-policies.package.name:fleet_server', + fields: ['policy_ids'], }); for (const item of res.items) { item.policy_ids.forEach((id) => policyIds.add(id)); } - if (res.items.length === 0) { + if (res.items.length < perPage) { hasMore = false; } } diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index 65495d51f0f60c..cafb7e85d9d32a 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -739,7 +739,14 @@ class PackagePolicyClientImpl implements PackagePolicyClient { soClient: SavedObjectsClientContract, options: ListWithKuery & { spaceId?: string } ): Promise> { - const { page = 1, perPage = 20, sortField = 'updated_at', sortOrder = 'desc', kuery } = options; + const { + page = 1, + perPage = 20, + sortField = 'updated_at', + sortOrder = 'desc', + kuery, + fields, + } = options; const packagePolicies = await soClient.find({ type: SAVED_OBJECT_TYPE, @@ -747,6 +754,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { sortOrder, page, perPage, + fields, filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, namespaces: options.spaceId ? [options.spaceId] : undefined, }); From 4d0cfdf943078348c0b2854153f6f76b8bb7fafe Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 14 Aug 2024 17:31:47 +0200 Subject: [PATCH 47/92] [ES|QL] Fixes console error when creating ES|QL charts (#190503) ## Summary Closes https://github.com/elastic/kibana/issues/190442 This is causing the error, as it is not needed. The abortController when passed to the search strategy is handled by it --- .../shared/edit_on_the_fly/lens_configuration_flyout.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx index 6c66c463f92d49..440b70ab4b8a3c 100644 --- a/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx +++ b/x-pack/plugins/lens/public/app_plugin/shared/edit_on_the_fly/lens_configuration_flyout.tsx @@ -153,9 +153,6 @@ export function LensEditConfigurationFlyout({ } }; getESQLGridAttrs(); - return () => { - abortController.abort(); - }; }, [adHocDataViews, dataGridAttrs, query, startDependencies]); const attributesChanged: boolean = useMemo(() => { From 0caa6cdfa71813a913d2516c5c483d94c0db665f Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Wed, 14 Aug 2024 18:00:07 +0200 Subject: [PATCH 48/92] [kbn/server-route-repository] Add zod support (#190244) This PR adds support for using `zod` as the validation library alongside of `io-ts`. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../index.ts | 2 + .../src/typings.ts | 25 +- .../tsconfig.json | 1 + .../kbn-server-route-repository/README.md | 25 +- packages/kbn-server-route-repository/index.ts | 4 +- .../src/decode_request_params.test.ts | 85 +--- .../src/decode_request_params.ts | 24 +- .../src/make_zod_validation_object.test.ts | 50 ++ .../src/make_zod_validation_object.ts | 27 ++ .../src/register_routes.test.ts | 444 +++++++++++++----- .../src/register_routes.ts | 31 +- .../src/route_validation_object.ts | 20 - .../strip_nullish_request_parameters.test.ts | 35 ++ .../src/strip_nullish_request_parameters.ts | 26 + .../src/test_types.ts | 102 +++- .../src/validate_and_decode_params.test.ts | 69 +++ .../src/validate_and_decode_params.ts | 35 ++ .../src/validation_objects.ts | 27 ++ .../kbn-server-route-repository/tsconfig.json | 2 +- .../apm_routes/register_apm_server_routes.ts | 21 +- .../server/routes/register_routes.ts | 12 +- .../server/routes/register_routes.ts | 12 +- .../server/routes/register_routes.ts | 12 +- .../slo/server/routes/register_routes.ts | 12 +- 24 files changed, 800 insertions(+), 303 deletions(-) create mode 100644 packages/kbn-server-route-repository/src/make_zod_validation_object.test.ts create mode 100644 packages/kbn-server-route-repository/src/make_zod_validation_object.ts delete mode 100644 packages/kbn-server-route-repository/src/route_validation_object.ts create mode 100644 packages/kbn-server-route-repository/src/strip_nullish_request_parameters.test.ts create mode 100644 packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts create mode 100644 packages/kbn-server-route-repository/src/validate_and_decode_params.test.ts create mode 100644 packages/kbn-server-route-repository/src/validate_and_decode_params.ts create mode 100644 packages/kbn-server-route-repository/src/validation_objects.ts diff --git a/packages/kbn-server-route-repository-utils/index.ts b/packages/kbn-server-route-repository-utils/index.ts index bfcc03c0e64c56..ce2139badd8e64 100644 --- a/packages/kbn-server-route-repository-utils/index.ts +++ b/packages/kbn-server-route-repository-utils/index.ts @@ -24,4 +24,6 @@ export type { DefaultClientOptions, DefaultRouteCreateOptions, DefaultRouteHandlerResources, + IoTsParamsObject, + ZodParamsObject, } from './src/typings'; diff --git a/packages/kbn-server-route-repository-utils/src/typings.ts b/packages/kbn-server-route-repository-utils/src/typings.ts index 0539d9ea1d38e5..ff93e760a580ac 100644 --- a/packages/kbn-server-route-repository-utils/src/typings.ts +++ b/packages/kbn-server-route-repository-utils/src/typings.ts @@ -9,13 +9,14 @@ import type { HttpFetchOptions } from '@kbn/core-http-browser'; import type { IKibanaResponse } from '@kbn/core-http-server'; import type { - RequestHandlerContext, + KibanaRequest, + KibanaResponseFactory, Logger, + RequestHandlerContext, RouteConfigOptions, RouteMethod, - KibanaRequest, - KibanaResponseFactory, } from '@kbn/core/server'; +import { z } from '@kbn/zod'; import * as t from 'io-ts'; import { RequiredKeys } from 'utility-types'; @@ -30,7 +31,13 @@ type WithoutIncompatibleMethods = Omit t.Encoder; }; -export type RouteParamsRT = WithoutIncompatibleMethods< +export type ZodParamsObject = z.ZodObject<{ + path?: any; + query?: any; + body?: any; +}>; + +export type IoTsParamsObject = WithoutIncompatibleMethods< t.Type<{ path?: any; query?: any; @@ -38,6 +45,8 @@ export type RouteParamsRT = WithoutIncompatibleMethods< }> >; +export type RouteParamsRT = IoTsParamsObject | ZodParamsObject; + export interface RouteState { [endpoint: string]: ServerRoute; } @@ -82,6 +91,10 @@ type ClientRequestParamsOfType = ? MaybeOptional<{ params: t.OutputOf; }> + : TRouteParamsRT extends z.Schema + ? MaybeOptional<{ + params: z.TypeOf; + }> : {}; type DecodedRequestParamsOfType = @@ -89,6 +102,10 @@ type DecodedRequestParamsOfType = ? MaybeOptional<{ params: t.TypeOf; }> + : TRouteParamsRT extends z.Schema + ? MaybeOptional<{ + params: z.TypeOf; + }> : {}; export type EndpointOf = diff --git a/packages/kbn-server-route-repository-utils/tsconfig.json b/packages/kbn-server-route-repository-utils/tsconfig.json index 0f3dd221ec6b77..cb5d9846f6cc88 100644 --- a/packages/kbn-server-route-repository-utils/tsconfig.json +++ b/packages/kbn-server-route-repository-utils/tsconfig.json @@ -19,5 +19,6 @@ "@kbn/core-http-browser", "@kbn/core-http-server", "@kbn/core", + "@kbn/zod", ] } diff --git a/packages/kbn-server-route-repository/README.md b/packages/kbn-server-route-repository/README.md index f46a8f3ee36770..f42bfb4390a208 100644 --- a/packages/kbn-server-route-repository/README.md +++ b/packages/kbn-server-route-repository/README.md @@ -127,22 +127,22 @@ The client translates the endpoint and the options (including request parameters ## Request parameter validation -When creating your routes, you can also provide an `io-ts` codec to be used when validating incoming requests. +When creating your routes, you can provide either a `zod` schema or an `io-ts` codec to be used when validating incoming requests. ```javascript -import * as t from 'io-ts'; +import { z } from '@kbn/zod'; const myRoute = createMyPluginServerRoute({ - endpoint: 'GET /internal/my_plugin/route/{my_path_param}', - params: t.type({ - path: t.type({ - my_path_param: t.string, + endpoint: 'POST /internal/my_plugin/route/{my_path_param}', + params: z.object({ + path: z.object({ + my_path_param: z.string(), }), - query: t.type({ - my_query_param: t.string, + query: z.object({ + my_query_param: z.string(), }), - body: t.type({ - my_body_param: t.string, + body: z.object({ + my_body_param: z.string(), }), }), handler: async (resources) => { @@ -162,7 +162,7 @@ The `params` object is added to the route resources. When calling this endpoint, it will look like this: ```javascript -client('GET /internal/my_plugin/route/{my_path_param}', { +client('POST /internal/my_plugin/route/{my_path_param}', { params: { path: { my_path_param: 'some_path_value', @@ -179,6 +179,9 @@ client('GET /internal/my_plugin/route/{my_path_param}', { Where the shape of `params` is typed to match the expected shape, meaning you don't need to manually use the codec when calling the route. +> When using `zod` you also opt into the Kibana platforms automatic OpenAPI specification generation tooling. +> By adding `server.oas.enabled: true` to your `kibana.yml` and visiting `/api/oas?pluginId=yourPluginId` you can see the generated specification. + ## Public routes To define a public route, you need to change the endpoint path and add a version. diff --git a/packages/kbn-server-route-repository/index.ts b/packages/kbn-server-route-repository/index.ts index e4e43523d25c34..5a2bcb89ec3a42 100644 --- a/packages/kbn-server-route-repository/index.ts +++ b/packages/kbn-server-route-repository/index.ts @@ -9,7 +9,8 @@ export { formatRequest, parseEndpoint } from '@kbn/server-route-repository-utils'; export { createServerRouteFactory } from './src/create_server_route_factory'; export { decodeRequestParams } from './src/decode_request_params'; -export { routeValidationObject } from './src/route_validation_object'; +export { stripNullishRequestParameters } from './src/strip_nullish_request_parameters'; +export { passThroughValidationObject } from './src/validation_objects'; export { registerRoutes } from './src/register_routes'; export type { @@ -24,4 +25,5 @@ export type { RouteState, DefaultRouteCreateOptions, DefaultRouteHandlerResources, + IoTsParamsObject, } from '@kbn/server-route-repository-utils'; diff --git a/packages/kbn-server-route-repository/src/decode_request_params.test.ts b/packages/kbn-server-route-repository/src/decode_request_params.test.ts index 0cb8d280f28e47..9041f68643317b 100644 --- a/packages/kbn-server-route-repository/src/decode_request_params.test.ts +++ b/packages/kbn-server-route-repository/src/decode_request_params.test.ts @@ -5,7 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ -import { jsonRt } from '@kbn/io-ts-utils'; + import * as t from 'io-ts'; import { decodeRequestParams } from './decode_request_params'; @@ -14,10 +14,9 @@ describe('decodeRequestParams', () => { const decode = () => { return decodeRequestParams( { - params: { + path: { serviceName: 'opbeans-java', }, - body: null, query: { start: '', }, @@ -48,11 +47,10 @@ describe('decodeRequestParams', () => { const decode = () => { return decodeRequestParams( { - params: { + path: { serviceName: 'opbeans-java', extraKey: '', }, - body: null, query: { start: '', }, @@ -74,81 +72,4 @@ describe('decodeRequestParams', () => { path.extraKey" `); }); - - it('returns the decoded output', () => { - const decode = () => { - return decodeRequestParams( - { - params: {}, - query: { - _inspect: 'true', - }, - body: null, - }, - t.type({ - query: t.type({ - _inspect: jsonRt.pipe(t.boolean), - }), - }) - ); - }; - - expect(decode).not.toThrow(); - - expect(decode()).toEqual({ - query: { - _inspect: true, - }, - }); - }); - - it('strips empty params', () => { - const decode = () => { - return decodeRequestParams( - { - params: {}, - query: {}, - body: {}, - }, - t.type({ - body: t.any, - }) - ); - }; - - expect(decode).not.toThrow(); - - expect(decode()).toEqual({}); - }); - - it('allows excess keys in an any type', () => { - const decode = () => { - return decodeRequestParams( - { - params: {}, - query: {}, - body: { - body: { - query: 'foo', - }, - }, - }, - t.type({ - body: t.type({ - body: t.any, - }), - }) - ); - }; - - expect(decode).not.toThrow(); - - expect(decode()).toEqual({ - body: { - body: { - query: 'foo', - }, - }, - }); - }); }); diff --git a/packages/kbn-server-route-repository/src/decode_request_params.ts b/packages/kbn-server-route-repository/src/decode_request_params.ts index bae6e4d4a0e12e..fe7c93b2e7397e 100644 --- a/packages/kbn-server-route-repository/src/decode_request_params.ts +++ b/packages/kbn-server-route-repository/src/decode_request_params.ts @@ -7,32 +7,16 @@ */ import Boom from '@hapi/boom'; import { formatErrors, strictKeysRt } from '@kbn/io-ts-utils'; -import { RouteParamsRT } from '@kbn/server-route-repository-utils'; +import { IoTsParamsObject } from '@kbn/server-route-repository-utils'; import { isLeft } from 'fp-ts/lib/Either'; import * as t from 'io-ts'; -import { isEmpty, isPlainObject, omitBy } from 'lodash'; -interface KibanaRequestParams { - body: unknown; - query: unknown; - params: unknown; -} - -export function decodeRequestParams( - params: KibanaRequestParams, +export function decodeRequestParams( + params: Partial<{ path: any; query: any; body: any }>, paramsRt: T ): t.OutputOf { - const paramMap = omitBy( - { - path: params.params, - body: params.body, - query: params.query, - }, - (val) => val === null || val === undefined || (isPlainObject(val) && isEmpty(val)) - ); - // decode = validate - const result = strictKeysRt(paramsRt).decode(paramMap); + const result = strictKeysRt(paramsRt).decode(params); if (isLeft(result)) { throw Boom.badRequest(formatErrors(result.left)); diff --git a/packages/kbn-server-route-repository/src/make_zod_validation_object.test.ts b/packages/kbn-server-route-repository/src/make_zod_validation_object.test.ts new file mode 100644 index 00000000000000..b06bfebe613c5e --- /dev/null +++ b/packages/kbn-server-route-repository/src/make_zod_validation_object.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 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 { z } from '@kbn/zod'; +import { makeZodValidationObject } from './make_zod_validation_object'; +import { noParamsValidationObject } from './validation_objects'; + +describe('makeZodValidationObject', () => { + it('translate path to params', () => { + const schema = z.object({ + path: z.object({}), + }); + + expect(makeZodValidationObject(schema)).toMatchObject({ + params: expect.anything(), + }); + }); + + it('makes all object types strict', () => { + const schema = z.object({ + path: z.object({}), + query: z.object({}), + body: z.string(), + }); + + const pathStrictSpy = jest.spyOn(schema.shape.path, 'strict'); + const queryStrictSpy = jest.spyOn(schema.shape.query, 'strict'); + + expect(makeZodValidationObject(schema)).toEqual({ + params: pathStrictSpy.mock.results[0].value, + query: queryStrictSpy.mock.results[0].value, + body: schema.shape.body, + }); + }); + + it('sets key to strict empty if schema is missing key', () => { + const schema = z.object({}); + + expect(makeZodValidationObject(schema)).toStrictEqual({ + params: noParamsValidationObject.params, + query: noParamsValidationObject.query, + body: noParamsValidationObject.body, + }); + }); +}); diff --git a/packages/kbn-server-route-repository/src/make_zod_validation_object.ts b/packages/kbn-server-route-repository/src/make_zod_validation_object.ts new file mode 100644 index 00000000000000..5e3634f6f0333f --- /dev/null +++ b/packages/kbn-server-route-repository/src/make_zod_validation_object.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { ZodObject, ZodAny } from '@kbn/zod'; +import { ZodParamsObject } from '@kbn/server-route-repository-utils'; +import { noParamsValidationObject } from './validation_objects'; + +export function makeZodValidationObject(params: ZodParamsObject) { + return { + params: params.shape.path ? asStrict(params.shape.path) : noParamsValidationObject.params, + query: params.shape.query ? asStrict(params.shape.query) : noParamsValidationObject.query, + body: params.shape.body ? asStrict(params.shape.body) : noParamsValidationObject.body, + }; +} + +function asStrict(schema: ZodAny) { + if (schema instanceof ZodObject) { + return schema.strict(); + } else { + return schema; + } +} diff --git a/packages/kbn-server-route-repository/src/register_routes.test.ts b/packages/kbn-server-route-repository/src/register_routes.test.ts index 39180a093835af..8be38bb5891cc7 100644 --- a/packages/kbn-server-route-repository/src/register_routes.test.ts +++ b/packages/kbn-server-route-repository/src/register_routes.test.ts @@ -6,59 +6,39 @@ * Side Public License, v 1. */ -import * as t from 'io-ts'; import { CoreSetup, kibanaResponseFactory } from '@kbn/core/server'; import { loggerMock } from '@kbn/logging-mocks'; -import { registerRoutes } from './register_routes'; -import { routeValidationObject } from './route_validation_object'; +import { z } from '@kbn/zod'; +import * as t from 'io-ts'; import { NEVER } from 'rxjs'; +import * as makeZodValidationObject from './make_zod_validation_object'; +import { registerRoutes } from './register_routes'; +import { passThroughValidationObject, noParamsValidationObject } from './validation_objects'; describe('registerRoutes', () => { - const get = jest.fn(); - - const getAddVersion = jest.fn(); - const getWithVersion = jest.fn((_options) => { + const post = jest.fn(); + const postAddVersion = jest.fn(); + const postWithVersion = jest.fn((_options) => { return { - addVersion: getAddVersion, + addVersion: postAddVersion, }; }); - const createRouter = jest.fn().mockReturnValue({ - get, + post, versioned: { - get: getWithVersion, + post: postWithVersion, }, }); - - const internalOptions = { - internal: true, - }; - const publicOptions = { - public: true, - }; - - const internalHandler = jest.fn().mockResolvedValue('internal'); - const publicHandler = jest - .fn() - .mockResolvedValue( - kibanaResponseFactory.custom({ statusCode: 201, body: { message: 'public' } }) - ); - const errorHandler = jest.fn().mockRejectedValue(new Error('error')); - + const coreSetup = { + http: { + createRouter, + }, + } as unknown as CoreSetup; const mockLogger = loggerMock.create(); const mockService = jest.fn(); const mockContext = {}; const mockRequest = { - body: { - bodyParam: 'body', - }, - query: { - queryParam: 'query', - }, - params: { - pathParam: 'path', - }, events: { aborted$: NEVER, }, @@ -66,99 +46,129 @@ describe('registerRoutes', () => { beforeEach(() => { jest.clearAllMocks(); + }); - const coreSetup = { - http: { - createRouter, - }, - } as unknown as CoreSetup; - - const paramsRt = t.type({ - body: t.type({ - bodyParam: t.string, - }), - query: t.type({ - queryParam: t.string, - }), - path: t.type({ - pathParam: t.string, - }), - }); - - registerRoutes({ - core: coreSetup, - repository: { - 'GET /internal/app/feature': { - endpoint: 'GET /internal/app/feature', - handler: internalHandler, - params: paramsRt, - options: internalOptions, - }, - 'GET /api/app/feature version': { - endpoint: 'GET /api/app/feature version', - handler: publicHandler, - params: paramsRt, - options: publicOptions, - }, - 'GET /internal/app/feature/error': { - endpoint: 'GET /internal/app/feature/error', - handler: errorHandler, - params: paramsRt, - options: internalOptions, + it('creates a router and defines the routes', () => { + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + handler: jest.fn(), + options: { + internal: true, }, }, - dependencies: { - aService: mockService, + 'POST /api/public_route version': { + endpoint: 'POST /api/public_route version', + handler: jest.fn(), + options: { + public: true, + }, }, - logger: mockLogger, }); - }); - it('creates a router and defines the routes', () => { expect(createRouter).toHaveBeenCalledTimes(1); - expect(get).toHaveBeenCalledTimes(2); + expect(post).toHaveBeenCalledTimes(1); - const [internalRoute] = get.mock.calls[0]; - expect(internalRoute.path).toEqual('/internal/app/feature'); - expect(internalRoute.options).toEqual(internalOptions); - expect(internalRoute.validate).toEqual(routeValidationObject); + const [internalRoute] = post.mock.calls[0]; + expect(internalRoute.path).toEqual('/internal/route'); + expect(internalRoute.options).toEqual({ + internal: true, + }); + expect(internalRoute.validate).toEqual(noParamsValidationObject); - expect(getWithVersion).toHaveBeenCalledTimes(1); - const [publicRoute] = getWithVersion.mock.calls[0]; - expect(publicRoute.path).toEqual('/api/app/feature'); - expect(publicRoute.options).toEqual(publicOptions); + expect(postWithVersion).toHaveBeenCalledTimes(1); + const [publicRoute] = postWithVersion.mock.calls[0]; + expect(publicRoute.path).toEqual('/api/public_route'); + expect(publicRoute.options).toEqual({ + public: true, + }); expect(publicRoute.access).toEqual('public'); - expect(getAddVersion).toHaveBeenCalledTimes(1); - const [versionedRoute] = getAddVersion.mock.calls[0]; + expect(postAddVersion).toHaveBeenCalledTimes(1); + const [versionedRoute] = postAddVersion.mock.calls[0]; expect(versionedRoute.version).toEqual('version'); expect(versionedRoute.validate).toEqual({ - request: routeValidationObject, + request: noParamsValidationObject, }); }); + it('does not allow any params if no schema is provided', () => { + const pathDoesNotAllowExcessKeys = () => { + noParamsValidationObject.params.parse({ + unexpectedKey: 'not_allowed', + }); + }; + const queryDoesNotAllowExcessKeys = () => { + noParamsValidationObject.query.parse({ + unexpectedKey: 'not_allowed', + }); + }; + const bodyDoesNotAllowExcessKeys = () => { + noParamsValidationObject.body.parse({ + unexpectedKey: 'not_allowed', + }); + }; + + expect(pathDoesNotAllowExcessKeys).toThrowErrorMatchingInlineSnapshot(` + "[ + { + \\"code\\": \\"unrecognized_keys\\", + \\"keys\\": [ + \\"unexpectedKey\\" + ], + \\"path\\": [], + \\"message\\": \\"Unrecognized key(s) in object: 'unexpectedKey'\\" + } + ]" + `); + expect(queryDoesNotAllowExcessKeys).toThrowErrorMatchingInlineSnapshot(` + "[ + { + \\"code\\": \\"unrecognized_keys\\", + \\"keys\\": [ + \\"unexpectedKey\\" + ], + \\"path\\": [], + \\"message\\": \\"Unrecognized key(s) in object: 'unexpectedKey'\\" + } + ]" + `); + expect(bodyDoesNotAllowExcessKeys).toThrowErrorMatchingInlineSnapshot(` + "[ + { + \\"code\\": \\"unrecognized_keys\\", + \\"keys\\": [ + \\"unexpectedKey\\" + ], + \\"path\\": [], + \\"message\\": \\"Unrecognized key(s) in object: 'unexpectedKey'\\" + } + ]" + `); + }); + it('calls the route handler with all dependencies', async () => { - const [_, internalRouteHandler] = get.mock.calls[0]; - await internalRouteHandler(mockContext, mockRequest, kibanaResponseFactory); + const handler = jest.fn(); + + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + handler, + }, + }); - const [args] = internalHandler.mock.calls[0]; + const [_, wrappedHandler] = post.mock.calls[0]; + await wrappedHandler(mockContext, mockRequest, kibanaResponseFactory); + + expect(handler).toBeCalledTimes(1); + const [args] = handler.mock.calls[0]; expect(Object.keys(args).sort()).toEqual( ['aService', 'request', 'response', 'context', 'params', 'logger'].sort() ); const { params, logger, aService, request, response, context } = args; - expect(params).toEqual({ - body: { - bodyParam: 'body', - }, - query: { - queryParam: 'query', - }, - path: { - pathParam: 'path', - }, - }); + expect(params).toEqual(undefined); expect(request).toBe(mockRequest); expect(response).toBe(kibanaResponseFactory); expect(context).toBe(mockContext); @@ -167,38 +177,226 @@ describe('registerRoutes', () => { }); it('wraps a plain route handler result into a response', async () => { - const [_, internalRouteHandler] = get.mock.calls[0]; - const internalResult = await internalRouteHandler( - mockContext, - mockRequest, - kibanaResponseFactory - ); + const handler = jest.fn().mockResolvedValue('result'); - expect(internalHandler).toHaveBeenCalledTimes(1); - expect(internalResult).toEqual({ + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + handler, + }, + }); + + const [_, wrappedHandler] = post.mock.calls[0]; + const result = await wrappedHandler(mockContext, mockRequest, kibanaResponseFactory); + + expect(handler).toHaveBeenCalledTimes(1); + expect(result).toEqual({ status: 200, - payload: 'internal', - options: { body: 'internal' }, + payload: 'result', + options: { body: 'result' }, }); }); it('allows for route handlers to define a custom response', async () => { - const [_, publicRouteHandler] = getAddVersion.mock.calls[0]; - const publicResult = await publicRouteHandler(mockContext, mockRequest, kibanaResponseFactory); + const handler = jest + .fn() + .mockResolvedValue( + kibanaResponseFactory.custom({ statusCode: 201, body: { message: 'result' } }) + ); + + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + handler, + }, + }); - expect(publicHandler).toHaveBeenCalledTimes(1); - expect(publicResult).toEqual({ status: 201, payload: { message: 'public' }, options: {} }); + const [_, wrappedHandler] = post.mock.calls[0]; + const result = await wrappedHandler(mockContext, mockRequest, kibanaResponseFactory); + + expect(handler).toHaveBeenCalledTimes(1); + expect(result).toEqual({ status: 201, payload: { message: 'result' }, options: {} }); }); it('translates errors thrown in a route handler to an error response', async () => { - const [_, errorRouteHandler] = get.mock.calls[1]; - const errorResult = await errorRouteHandler(mockContext, mockRequest, kibanaResponseFactory); + const handler = jest.fn().mockRejectedValue(new Error('error')); + + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + handler, + }, + }); - expect(errorHandler).toHaveBeenCalledTimes(1); - expect(errorResult).toEqual({ + const [_, wrappedHandler] = post.mock.calls[0]; + const error = await wrappedHandler(mockContext, mockRequest, kibanaResponseFactory); + + expect(handler).toHaveBeenCalledTimes(1); + expect(error).toEqual({ status: 500, payload: { message: 'error', attributes: { data: {} } }, options: {}, }); }); + + describe('when using zod', () => { + const makeZodValidationObjectSpy = jest.spyOn( + makeZodValidationObject, + 'makeZodValidationObject' + ); + + const zodParamsRt = z.object({ + body: z.object({ + bodyParam: z.string(), + }), + query: z.object({ + queryParam: z.string(), + }), + path: z.object({ + pathParam: z.string(), + }), + }); + + it('uses Core validation', () => { + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + params: zodParamsRt, + handler: jest.fn, + }, + }); + + const [internalRoute] = post.mock.calls[0]; + expect(makeZodValidationObjectSpy).toHaveBeenCalledWith(zodParamsRt); + expect(internalRoute.validate).toEqual(makeZodValidationObjectSpy.mock.results[0].value); + }); + + it('passes on params', async () => { + const handler = jest.fn(); + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + params: zodParamsRt, + handler, + }, + }); + + const [_, wrappedHandler] = post.mock.calls[0]; + + await wrappedHandler( + mockContext, + { + ...mockRequest, + params: { + pathParam: 'path', + }, + query: { + queryParam: 'query', + }, + body: { + bodyParam: 'body', + }, + }, + kibanaResponseFactory + ); + + expect(handler).toBeCalledTimes(1); + const [args] = handler.mock.calls[0]; + const { params } = args; + expect(params).toEqual({ + path: { + pathParam: 'path', + }, + query: { + queryParam: 'query', + }, + body: { + bodyParam: 'body', + }, + }); + }); + }); + + describe('when using io-ts', () => { + const iotsParamsRt = t.type({ + body: t.type({ + bodyParam: t.string, + }), + query: t.type({ + queryParam: t.string, + }), + path: t.type({ + pathParam: t.string, + }), + }); + + it('bypasses Core validation', () => { + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + params: iotsParamsRt, + handler: jest.fn, + }, + }); + + const [internalRoute] = post.mock.calls[0]; + expect(internalRoute.validate).toEqual(passThroughValidationObject); + }); + + it('decodes params', async () => { + const handler = jest.fn(); + callRegisterRoutes({ + 'POST /internal/route': { + endpoint: 'POST /internal/route', + params: iotsParamsRt, + handler, + }, + }); + + const [_, wrappedHandler] = post.mock.calls[0]; + + await wrappedHandler( + mockContext, + { + ...mockRequest, + params: { + pathParam: 'path', + }, + query: { + queryParam: 'query', + }, + body: { + bodyParam: 'body', + }, + }, + kibanaResponseFactory + ); + + expect(handler).toBeCalledTimes(1); + const [args] = handler.mock.calls[0]; + const { params } = args; + expect(params).toEqual({ + path: { + pathParam: 'path', + }, + query: { + queryParam: 'query', + }, + body: { + bodyParam: 'body', + }, + }); + }); + }); + + function callRegisterRoutes(repository: any) { + registerRoutes({ + core: coreSetup, + logger: mockLogger, + dependencies: { + aService: mockService, + }, + repository, + }); + } }); diff --git a/packages/kbn-server-route-repository/src/register_routes.ts b/packages/kbn-server-route-repository/src/register_routes.ts index fcf3c5c3281ee1..56f42fb499225a 100644 --- a/packages/kbn-server-route-repository/src/register_routes.ts +++ b/packages/kbn-server-route-repository/src/register_routes.ts @@ -5,6 +5,7 @@ * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ + import { errors } from '@elastic/elasticsearch'; import { isBoom } from '@hapi/boom'; import type { RequestHandlerContext } from '@kbn/core-http-request-handler-context-server'; @@ -12,15 +13,17 @@ import type { KibanaRequest, KibanaResponseFactory } from '@kbn/core-http-server import { isKibanaResponse } from '@kbn/core-http-server'; import type { CoreSetup } from '@kbn/core-lifecycle-server'; import type { Logger } from '@kbn/logging'; -import * as t from 'io-ts'; -import { merge, pick } from 'lodash'; import { ServerRoute, ServerRouteCreateOptions, + ZodParamsObject, parseEndpoint, } from '@kbn/server-route-repository-utils'; -import { decodeRequestParams } from './decode_request_params'; -import { routeValidationObject } from './route_validation_object'; +import { isZod } from '@kbn/zod'; +import { merge } from 'lodash'; +import { passThroughValidationObject, noParamsValidationObject } from './validation_objects'; +import { validateAndDecodeParams } from './validate_and_decode_params'; +import { makeZodValidationObject } from './make_zod_validation_object'; const CLIENT_CLOSED_REQUEST = { statusCode: 499, @@ -55,12 +58,7 @@ export function registerRoutes>({ response: KibanaResponseFactory ) => { try { - const runtimeType = params || t.strict({}); - - const validatedParams = decodeRequestParams( - pick(request, 'params', 'body', 'query'), - runtimeType - ); + const validatedParams = validateAndDecodeParams(request, params); const { aborted, result } = await Promise.race([ handler({ @@ -122,12 +120,21 @@ export function registerRoutes>({ logger.debug(`Registering endpoint ${endpoint}`); + let validationObject; + if (params === undefined) { + validationObject = noParamsValidationObject; + } else if (isZod(params)) { + validationObject = makeZodValidationObject(params as ZodParamsObject); + } else { + validationObject = passThroughValidationObject; + } + if (!version) { router[method]( { path: pathname, options, - validate: routeValidationObject, + validate: validationObject, }, wrappedHandler ); @@ -140,7 +147,7 @@ export function registerRoutes>({ { version, validate: { - request: routeValidationObject, + request: validationObject, }, }, wrappedHandler diff --git a/packages/kbn-server-route-repository/src/route_validation_object.ts b/packages/kbn-server-route-repository/src/route_validation_object.ts deleted file mode 100644 index 9d033e31fc324a..00000000000000 --- a/packages/kbn-server-route-repository/src/route_validation_object.ts +++ /dev/null @@ -1,20 +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 { schema } from '@kbn/config-schema'; - -const anyObject = schema.object({}, { unknowns: 'allow' }); - -export const routeValidationObject = { - // `body` can be null, but `validate` expects non-nullable types - // if any validation is defined. Not having validation currently - // means we don't get the payload. See - // https://github.com/elastic/kibana/issues/50179 - body: schema.nullable(schema.oneOf([anyObject, schema.string()])), - params: anyObject, - query: anyObject, -}; diff --git a/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.test.ts b/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.test.ts new file mode 100644 index 00000000000000..b76c28048aeb37 --- /dev/null +++ b/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { stripNullishRequestParameters } from './strip_nullish_request_parameters'; + +describe('stripNullishRequestParameters', () => { + it('translate params to path', () => { + expect( + stripNullishRequestParameters({ + params: { + something: 'test', + }, + }) + ).toEqual({ + path: { + something: 'test', + }, + }); + }); + + it('removes invalid values', () => { + expect( + stripNullishRequestParameters({ + params: undefined, + query: null, + body: {}, + }) + ).toEqual({}); + }); +}); diff --git a/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts b/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts new file mode 100644 index 00000000000000..06668ac55a95ac --- /dev/null +++ b/packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { omitBy, isPlainObject, isEmpty } from 'lodash'; + +interface KibanaRequestParams { + body?: unknown; + query?: unknown; + params?: unknown; +} + +export function stripNullishRequestParameters(params: KibanaRequestParams) { + return omitBy<{ path: any; body: any; query: any }>( + { + path: params.params, + query: params.query, + body: params.body, + }, + (val) => val === null || val === undefined || (isPlainObject(val) && isEmpty(val)) + ); +} diff --git a/packages/kbn-server-route-repository/src/test_types.ts b/packages/kbn-server-route-repository/src/test_types.ts index 16447a6ef000f8..ce4fbb6303c5cb 100644 --- a/packages/kbn-server-route-repository/src/test_types.ts +++ b/packages/kbn-server-route-repository/src/test_types.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ import * as t from 'io-ts'; +import { z } from '@kbn/zod'; import { kibanaResponseFactory } from '@kbn/core/server'; import { EndpointOf, ReturnOf, RouteRepositoryClient } from '@kbn/server-route-repository-utils'; import { createServerRouteFactory } from './create_server_route_factory'; @@ -39,6 +40,18 @@ createServerRouteFactory<{}, {}>()({ }, }); +createServerRouteFactory<{}, {}>()({ + endpoint: 'GET /internal/endpoint_with_params', + params: z.object({ + path: z.object({ + serviceName: z.string(), + }), + }), + handler: async (resources) => { + assertType<{ params: { path: { serviceName: string } } }>(resources); + }, +}); + // Resources should be passed to the request handler. createServerRouteFactory<{ context: { getSpaceId: () => string } }, {}>()({ endpoint: 'GET /internal/endpoint_with_params', @@ -53,6 +66,19 @@ createServerRouteFactory<{ context: { getSpaceId: () => string } }, {}>()({ }, }); +createServerRouteFactory<{ context: { getSpaceId: () => string } }, {}>()({ + endpoint: 'GET /internal/endpoint_with_params', + params: z.object({ + path: z.object({ + serviceName: z.string(), + }), + }), + handler: async ({ context }) => { + const spaceId = context.getSpaceId(); + assertType(spaceId); + }, +}); + // Create options are available when registering a route. createServerRouteFactory<{}, { options: { tags: string[] } }>()({ endpoint: 'GET /internal/endpoint_with_params', @@ -125,6 +151,36 @@ const repository = { }; }, }), + ...createServerRoute({ + endpoint: 'GET /internal/endpoint_with_params_zod', + params: z.object({ + path: z.object({ + serviceName: z.string(), + }), + }), + handler: async () => { + return { + yesParamsForMe: true, + }; + }, + }), + ...createServerRoute({ + endpoint: 'GET /internal/endpoint_with_optional_params_zod', + params: z + .object({ + path: z + .object({ + serviceName: z.string(), + }) + .partial(), + }) + .partial(), + handler: async () => { + return { + someParamsForMe: true, + }; + }, + }), ...createServerRoute({ endpoint: 'GET /internal/endpoint_returning_result', handler: async () => { @@ -153,6 +209,10 @@ assertType>>([ 'GET /internal/endpoint_with_params', 'GET /internal/endpoint_without_params', 'GET /internal/endpoint_with_optional_params', + 'GET /internal/endpoint_with_params_zod', + 'GET /internal/endpoint_with_optional_params_zod', + 'GET /internal/endpoint_returning_result', + 'GET /internal/endpoint_returning_kibana_response', ]); // @ts-expect-error Type '"this_endpoint_does_not_exist"' is not assignable to type '"endpoint_without_params" | "endpoint_with_params" | "endpoint_with_optional_params"' @@ -208,11 +268,23 @@ client('GET /internal/endpoint_with_params', { timeout: 1, }); +client('GET /internal/endpoint_with_params_zod', { + params: { + // @ts-expect-error property 'serviceName' is missing in type '{}' + path: {}, + }, + timeout: 1, +}); + // Params are optional if the codec has no required keys client('GET /internal/endpoint_with_optional_params', { timeout: 1, }); +client('GET /internal/endpoint_with_optional_params_zod', { + timeout: 1, +}); + // If optional, an error will still occur if the params do not match client('GET /internal/endpoint_with_optional_params', { timeout: 1, @@ -222,6 +294,14 @@ client('GET /internal/endpoint_with_optional_params', { }, }); +client('GET /internal/endpoint_with_optional_params_zod', { + timeout: 1, + params: { + // @ts-expect-error Object literal may only specify known properties, and 'path' does not exist in type + path: '', + }, +}); + // The return type is correctly inferred client('GET /internal/endpoint_with_params', { params: { @@ -241,6 +321,24 @@ client('GET /internal/endpoint_with_params', { }>(res); }); +client('GET /internal/endpoint_with_params_zod', { + params: { + path: { + serviceName: '', + }, + }, + timeout: 1, +}).then((res) => { + assertType<{ + noParamsForMe: boolean; + // @ts-expect-error Property 'noParamsForMe' is missing in type + }>(res); + + assertType<{ + yesParamsForMe: boolean; + }>(res); +}); + client('GET /internal/endpoint_returning_result', { timeout: 1, }).then((res) => { @@ -261,7 +359,7 @@ client('GET /internal/endpoint_returning_kibana_response', { assertType<{ path: { serviceName: string } }>( decodeRequestParams( { - params: { + path: { serviceName: 'serviceName', }, body: undefined, @@ -275,7 +373,7 @@ assertType<{ path: { serviceName: boolean } }>( // @ts-expect-error The types of 'path.serviceName' are incompatible between these types. decodeRequestParams( { - params: { + path: { serviceName: 'serviceName', }, body: undefined, diff --git a/packages/kbn-server-route-repository/src/validate_and_decode_params.test.ts b/packages/kbn-server-route-repository/src/validate_and_decode_params.test.ts new file mode 100644 index 00000000000000..a60c6322f1d7a3 --- /dev/null +++ b/packages/kbn-server-route-repository/src/validate_and_decode_params.test.ts @@ -0,0 +1,69 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { KibanaRequest } from '@kbn/core-http-server'; +import { z } from '@kbn/zod'; +import * as t from 'io-ts'; +import { validateAndDecodeParams } from './validate_and_decode_params'; + +describe('validateAndDecodeParams', () => { + it('does nothing if no schema is provided', () => { + const request = {} as KibanaRequest; + expect(validateAndDecodeParams(request, undefined)).toEqual(undefined); + }); + + it('only does formatting when using zod', () => { + const request = { + params: { + my_path_param: 'test', + }, + query: {}, + } as KibanaRequest; + + expect(validateAndDecodeParams(request, z.object({}))).toEqual({ + path: { + my_path_param: 'test', + }, + }); + }); + + it('additionally performs validation when using zod', () => { + const schema = t.type({ + path: t.type({ + my_path_param: t.string, + }), + }); + + const validRequest = { + params: { + my_path_param: 'test', + }, + query: {}, + } as KibanaRequest; + + expect(validateAndDecodeParams(validRequest, schema)).toEqual({ + path: { + my_path_param: 'test', + }, + }); + + const invalidRequest = { + params: { + my_unexpected_param: 'test', + }, + } as KibanaRequest; + const shouldThrow = () => { + return validateAndDecodeParams(invalidRequest, schema); + }; + + expect(shouldThrow).toThrowErrorMatchingInlineSnapshot(` + "Failed to validate: + in /path/my_path_param: undefined does not match expected type string" + `); + }); +}); diff --git a/packages/kbn-server-route-repository/src/validate_and_decode_params.ts b/packages/kbn-server-route-repository/src/validate_and_decode_params.ts new file mode 100644 index 00000000000000..36faf00e40afd8 --- /dev/null +++ b/packages/kbn-server-route-repository/src/validate_and_decode_params.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { KibanaRequest } from '@kbn/core-http-server'; +import { ZodParamsObject, IoTsParamsObject } from '@kbn/server-route-repository-utils'; +import { isZod } from '@kbn/zod'; +import { decodeRequestParams } from './decode_request_params'; +import { stripNullishRequestParameters } from './strip_nullish_request_parameters'; + +export function validateAndDecodeParams( + request: KibanaRequest, + paramsSchema: ZodParamsObject | IoTsParamsObject | undefined +) { + if (paramsSchema === undefined) { + return undefined; + } + + const params = stripNullishRequestParameters({ + params: request.params, + body: request.body, + query: request.query, + }); + + if (isZod(paramsSchema)) { + // Already validated by platform + return params; + } + + return decodeRequestParams(params, paramsSchema); +} diff --git a/packages/kbn-server-route-repository/src/validation_objects.ts b/packages/kbn-server-route-repository/src/validation_objects.ts new file mode 100644 index 00000000000000..9b4bab477ae3c1 --- /dev/null +++ b/packages/kbn-server-route-repository/src/validation_objects.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { z } from '@kbn/zod'; + +export const passThroughValidationObject = { + body: z.any(), + params: z.any(), + query: z.any(), +}; + +export const noParamsValidationObject = { + params: z.object({}).strict(), + query: z.object({}).strict(), + body: z.union([ + // If the route uses POST, the body should be empty object or null + z.object({}).strict(), + z.null(), + // If the route uses GET, body is undefined, + z.undefined(), + ]), +}; diff --git a/packages/kbn-server-route-repository/tsconfig.json b/packages/kbn-server-route-repository/tsconfig.json index 5202a5bf0c422a..bb8a0847c39b68 100644 --- a/packages/kbn-server-route-repository/tsconfig.json +++ b/packages/kbn-server-route-repository/tsconfig.json @@ -12,7 +12,6 @@ "**/*.ts" ], "kbn_references": [ - "@kbn/config-schema", "@kbn/io-ts-utils", "@kbn/core-http-request-handler-context-server", "@kbn/core-http-server", @@ -21,6 +20,7 @@ "@kbn/core", "@kbn/logging-mocks", "@kbn/server-route-repository-utils", + "@kbn/zod", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/register_apm_server_routes.ts b/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/register_apm_server_routes.ts index 36f6d107653b8c..5a2af3e7dc066d 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/register_apm_server_routes.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/apm_routes/register_apm_server_routes.ts @@ -10,12 +10,16 @@ import * as t from 'io-ts'; import { Logger, KibanaRequest, KibanaResponseFactory, RouteRegistrar } from '@kbn/core/server'; import { errors } from '@elastic/elasticsearch'; import agent from 'elastic-apm-node'; -import { ServerRouteRepository } from '@kbn/server-route-repository'; +import { + IoTsParamsObject, + ServerRouteRepository, + stripNullishRequestParameters, +} from '@kbn/server-route-repository'; import { merge } from 'lodash'; import { decodeRequestParams, parseEndpoint, - routeValidationObject, + passThroughValidationObject, } from '@kbn/server-route-repository'; import { jsonRt, mergeRt } from '@kbn/io-ts-utils'; import { InspectResponse } from '@kbn/observability-plugin/typings/common'; @@ -24,7 +28,6 @@ import { VersionedRouteRegistrar } from '@kbn/core-http-server'; import { IRuleDataClient } from '@kbn/rule-registry-plugin/server'; import type { APMIndices } from '@kbn/apm-data-access-plugin/server'; import { ApmFeatureFlags } from '../../../common/apm_feature_flags'; -import { pickKeys } from '../../../common/utils/pick_keys'; import type { APMCore, MinimalApmPluginRequestHandlerContext, @@ -94,10 +97,14 @@ export function registerRoutes({ inspectableEsQueriesMap.set(request, []); try { - const runtimeType = params ? mergeRt(params, inspectRt) : inspectRt; + const runtimeType = params ? mergeRt(params as IoTsParamsObject, inspectRt) : inspectRt; const validatedParams = decodeRequestParams( - pickKeys(request, 'params', 'body', 'query'), + stripNullishRequestParameters({ + params: request.params, + body: request.body, + query: request.query, + }), runtimeType ); @@ -210,7 +217,7 @@ export function registerRoutes({ { path: pathname, options, - validate: routeValidationObject, + validate: passThroughValidationObject, }, wrappedHandler ); @@ -228,7 +235,7 @@ export function registerRoutes({ { version, validate: { - request: routeValidationObject, + request: passThroughValidationObject, }, }, wrappedHandler diff --git a/x-pack/plugins/observability_solution/dataset_quality/server/routes/register_routes.ts b/x-pack/plugins/observability_solution/dataset_quality/server/routes/register_routes.ts index 94eb3103c39d45..4e1970d7fc8875 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_solution/dataset_quality/server/routes/register_routes.ts @@ -8,10 +8,12 @@ import { errors } from '@elastic/elasticsearch'; import Boom from '@hapi/boom'; import { CoreSetup, Logger, RouteRegistrar } from '@kbn/core/server'; import { + IoTsParamsObject, ServerRouteRepository, decodeRequestParams, + stripNullishRequestParameters, parseEndpoint, - routeValidationObject, + passThroughValidationObject, } from '@kbn/server-route-repository'; import * as t from 'io-ts'; import { DatasetQualityRequestHandlerContext } from '../types'; @@ -43,18 +45,18 @@ export function registerRoutes({ (router[method] as RouteRegistrar)( { path: pathname, - validate: routeValidationObject, + validate: passThroughValidationObject, options, }, async (context, request, response) => { try { const decodedParams = decodeRequestParams( - { + stripNullishRequestParameters({ params: request.params, body: request.body, query: request.query, - }, - params ?? t.strict({}) + }), + (params as IoTsParamsObject) ?? t.strict({}) ); const data = (await handler({ diff --git a/x-pack/plugins/observability_solution/observability/server/routes/register_routes.ts b/x-pack/plugins/observability_solution/observability/server/routes/register_routes.ts index f0f41a70bec811..b885050eb64c7e 100644 --- a/x-pack/plugins/observability_solution/observability/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_solution/observability/server/routes/register_routes.ts @@ -10,9 +10,11 @@ import { RulesClientApi } from '@kbn/alerting-plugin/server/types'; import { CoreSetup, KibanaRequest, Logger, RouteRegistrar } from '@kbn/core/server'; import { RuleDataPluginService } from '@kbn/rule-registry-plugin/server'; import { + IoTsParamsObject, decodeRequestParams, + stripNullishRequestParameters, parseEndpoint, - routeValidationObject, + passThroughValidationObject, } from '@kbn/server-route-repository'; import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; import axios from 'axios'; @@ -57,18 +59,18 @@ export function registerRoutes({ config, repository, core, logger, dependencies (router[method] as RouteRegistrar)( { path: pathname, - validate: routeValidationObject, + validate: passThroughValidationObject, options, }, async (context, request, response) => { try { const decodedParams = decodeRequestParams( - { + stripNullishRequestParameters({ params: request.params, body: request.body, query: request.query, - }, - params ?? t.strict({}) + }), + (params as IoTsParamsObject) ?? t.strict({}) ); const data = await handler({ diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/register_routes.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/register_routes.ts index 9603d97e63faaf..8fe51623510ebf 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/register_routes.ts @@ -9,10 +9,12 @@ import Boom from '@hapi/boom'; import type { IKibanaResponse } from '@kbn/core/server'; import { CoreSetup, Logger, RouteRegistrar } from '@kbn/core/server'; import { + IoTsParamsObject, ServerRouteRepository, decodeRequestParams, + stripNullishRequestParameters, parseEndpoint, - routeValidationObject, + passThroughValidationObject, } from '@kbn/server-route-repository'; import * as t from 'io-ts'; import { ObservabilityOnboardingConfig } from '..'; @@ -52,18 +54,18 @@ export function registerRoutes({ (router[method] as RouteRegistrar)( { path: pathname, - validate: routeValidationObject, + validate: passThroughValidationObject, options, }, async (context, request, response) => { try { const decodedParams = decodeRequestParams( - { + stripNullishRequestParameters({ params: request.params, body: request.body, query: request.query, - }, - params ?? t.strict({}) + }), + (params as IoTsParamsObject) ?? t.strict({}) ); const data = (await handler({ diff --git a/x-pack/plugins/observability_solution/slo/server/routes/register_routes.ts b/x-pack/plugins/observability_solution/slo/server/routes/register_routes.ts index 8ddabede0d190d..6a7d2d08bdd1b3 100644 --- a/x-pack/plugins/observability_solution/slo/server/routes/register_routes.ts +++ b/x-pack/plugins/observability_solution/slo/server/routes/register_routes.ts @@ -14,9 +14,11 @@ import { RuleRegistryPluginSetupContract, } from '@kbn/rule-registry-plugin/server'; import { + IoTsParamsObject, decodeRequestParams, + stripNullishRequestParameters, parseEndpoint, - routeValidationObject, + passThroughValidationObject, } from '@kbn/server-route-repository'; import { SpacesPluginStart } from '@kbn/spaces-plugin/server'; import axios from 'axios'; @@ -59,18 +61,18 @@ export function registerRoutes({ config, repository, core, logger, dependencies (router[method] as RouteRegistrar)( { path: pathname, - validate: routeValidationObject, + validate: passThroughValidationObject, options, }, async (context, request, response) => { try { const decodedParams = decodeRequestParams( - { + stripNullishRequestParameters({ params: request.params, body: request.body, query: request.query, - }, - params ?? t.strict({}) + }), + (params as IoTsParamsObject) ?? t.strict({}) ); const data = await handler({ From 00860397d52965e12d046d6d4deb6704a9dbeec2 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 14 Aug 2024 17:19:39 +0100 Subject: [PATCH 49/92] skip flaky suite (#178457) --- .../plugins/cases/public/components/create/template.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/create/template.test.tsx b/x-pack/plugins/cases/public/components/create/template.test.tsx index d3b1c59b712544..837b87827e5910 100644 --- a/x-pack/plugins/cases/public/components/create/template.test.tsx +++ b/x-pack/plugins/cases/public/components/create/template.test.tsx @@ -13,7 +13,8 @@ import { createAppMockRenderer } from '../../common/mock'; import { templatesConfigurationMock } from '../../containers/mock'; import { TemplateSelector } from './templates'; -describe('CustomFields', () => { +// FLAKY: https://github.com/elastic/kibana/issues/178457 +describe.skip('CustomFields', () => { let appMockRender: AppMockRenderer; const onTemplateChange = jest.fn(); From b336eecb2e132ec11d23d1f3d57de06cbd1c82f7 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 14 Aug 2024 17:20:54 +0100 Subject: [PATCH 50/92] skip flaky suite (#169753) --- x-pack/test/api_integration/apis/synthetics/get_monitor.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts index 98fbefd89acc27..fc75de4107440f 100644 --- a/x-pack/test/api_integration/apis/synthetics/get_monitor.ts +++ b/x-pack/test/api_integration/apis/synthetics/get_monitor.ts @@ -60,7 +60,8 @@ export default function ({ getService }: FtrProviderContext) { monitors = _monitors; }); - describe('get many monitors', () => { + // FLAKY: https://github.com/elastic/kibana/issues/169753 + describe.skip('get many monitors', () => { it('without params', async () => { const [mon1, mon2] = await Promise.all(monitors.map(saveMonitor)); From a13f8d983c38736478f2430efa090fedb1c50784 Mon Sep 17 00:00:00 2001 From: Jatin Kathuria Date: Wed, 14 Aug 2024 18:27:14 +0200 Subject: [PATCH 51/92] [Security Solution] Copies over settings from timeline template (#190511) ## Summary Handles : https://github.com/elastic/kibana/issues/189992 When user had created a timeline template and attached it to the rule, the columns were not being copied over from template to the timeline created from the alert generated by same rule. This PR fixes that as shown in demo below : https://github.com/user-attachments/assets/4237672e-943a-43f9-b160-5449399a5fd8 > [!Caution] > This PR checks below objects that are needed to be copied over from template > - columns > - data providers > > If we think, more things should be copied over, please comment below. ## Test Results ![grafik](https://github.com/user-attachments/assets/ad527eda-a1c2-49f0-bcfe-0ea449c29b34) ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../components/alerts_table/actions.tsx | 4 +- .../use_investigate_in_timeline.test.tsx | 338 ++++++++++++++++-- .../use_investigate_in_timeline.tsx | 12 +- 3 files changed, 332 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx index fdfe314094be69..c83fa2bf222111 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/actions.tsx @@ -1085,7 +1085,9 @@ export const sendAlertToTimelineAction = async ({ }); } } - } catch { + } catch (error) { + /* eslint-disable-next-line no-console */ + console.error(error); updateTimelineIsLoading({ id: TimelineId.active, isLoading: false }); return createTimeline({ from, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.test.tsx index 417774d7b2bc31..6d20ef39733376 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.test.tsx @@ -5,21 +5,30 @@ * 2.0. */ import { renderHook, act } from '@testing-library/react-hooks'; -import { fireEvent, render } from '@testing-library/react'; +import { fireEvent, render, waitFor } from '@testing-library/react'; +import { of } from 'rxjs'; import { TestProviders } from '../../../../common/mock'; -import { KibanaServices, useKibana } from '../../../../common/lib/kibana'; +import { useKibana } from '../../../../common/lib/kibana'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; import { useInvestigateInTimeline } from './use_investigate_in_timeline'; import * as actions from '../actions'; -import { coreMock } from '@kbn/core/public/mocks'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import type { AlertTableContextMenuItem } from '../types'; import React from 'react'; import { EuiPopover, EuiContextMenu } from '@elastic/eui'; +import * as timelineActions from '../../../../timelines/store/actions'; +import { getTimelineTemplate } from '../../../../timelines/containers/api'; +import type { TimelineEventsDetailsItem } from '@kbn/timelines-plugin/common'; + +jest.mock('../../../../common/lib/kibana'); +jest.mock('../../../../timelines/containers/api'); +jest.mock('../../../../common/lib/apm/use_start_transaction'); +jest.mock('../../../../common/hooks/use_app_toasts'); const ecsRowData: Ecs = { _id: '1', agent: { type: ['blah'] }, + host: { name: ['some host name'] }, kibana: { alert: { workflow_status: ['open'], @@ -31,32 +40,207 @@ const ecsRowData: Ecs = { }, }; -jest.mock('../../../../common/lib/kibana'); -jest.mock('../../../../common/lib/apm/use_start_transaction'); -jest.mock('../../../../common/hooks/use_app_toasts'); -jest.mock('../actions'); +const nonECSRowData: TimelineEventsDetailsItem[] = [ + { + category: 'agent', + isObjectArray: false, + field: 'agent.type', + values: ['blah'], + }, + { + category: 'kibana', + isObjectArray: false, + field: 'kibana.alert.workflow_status', + values: ['open'], + }, + { + category: 'kibana', + isObjectArray: false, + field: 'kibana.alert.rule.uuid', + values: ['testId'], + }, + { + category: 'host', + isObjectArray: false, + field: 'host.name', + values: ['some host name'], + }, +]; -(KibanaServices.get as jest.Mock).mockReturnValue(coreMock.createStart()); -const mockSendAlertToTimeline = jest.spyOn(actions, 'sendAlertToTimelineAction'); -(useKibana as jest.Mock).mockReturnValue({ - services: { - data: { - search: { - searchStrategyClient: jest.fn(), +const getEcsDataWithRuleTypeAndTimelineTemplate = (ruleType: string, ecsData: Ecs = ecsRowData) => { + return { + ...ecsData, + kibana: { + ...(ecsData?.kibana ?? {}), + alert: { + ...(ecsData.kibana?.alert ?? {}), + rule: { + ...(ecsData.kibana?.alert.rule ?? {}), + type: [ruleType], + timeline_id: ['dummyTimelineTemplateId'], + }, }, - query: jest.fn(), }, - }, -}); + } as Ecs; +}; + +const getNonEcsDataWithRuleTypeAndTimelineTemplate = ( + ruleType: string, + nonEcsData: TimelineEventsDetailsItem[] = nonECSRowData +) => { + return [ + ...nonEcsData, + { + category: 'kibana', + isObjectArray: false, + field: 'kibana.alert.rule.type', + values: [ruleType], + }, + { + category: 'kibana', + isObjectArray: false, + field: 'kibana.alert.rule.timeline_id', + values: ['dummyTimelineTemplateId'], + }, + ]; +}; + +const mockSendAlertToTimeline = jest.spyOn(actions, 'sendAlertToTimelineAction'); + (useAppToasts as jest.Mock).mockReturnValue({ addError: jest.fn(), }); +const mockTimelineTemplateResponse = { + data: { + getOneTimeline: { + savedObjectId: '15bc8185-06ef-4956-b7e7-be8e289b13c2', + version: 'WzIzMzUsMl0=', + columns: [ + { + columnHeaderType: 'not-filtered', + id: '@timestamp', + type: 'date', + }, + { + columnHeaderType: 'not-filtered', + id: 'host.name', + }, + { + columnHeaderType: 'not-filtered', + id: 'user.name', + }, + ], + dataProviders: [ + { + and: [], + enabled: true, + id: 'some-random-id', + name: 'host.name', + excluded: false, + kqlQuery: '', + queryMatch: { + field: 'host.name', + value: '{host.name}', + operator: ':', + }, + type: 'template', + }, + ], + dataViewId: 'security-solution-default', + description: '', + eqlOptions: { + eventCategoryField: 'event.category', + tiebreakerField: '', + timestampField: '@timestamp', + query: '', + size: 100, + }, + eventType: 'all', + excludedRowRendererIds: [ + 'alert', + 'alerts', + 'auditd', + 'auditd_file', + 'library', + 'netflow', + 'plain', + 'registry', + 'suricata', + 'system', + 'system_dns', + 'system_endgame_process', + 'system_file', + 'system_fim', + 'system_security_event', + 'system_socket', + 'threat_match', + 'zeek', + ], + favorite: [], + filters: [], + indexNames: ['.alerts-security.alerts-default', 'auditbeat-*', 'filebeat-*', 'packetbeat-*'], + kqlMode: 'filter', + kqlQuery: { + filterQuery: { + kuery: { + kind: 'kuery', + expression: '*', + }, + serializedQuery: '{"query_string":{"query":"*"}}', + }, + }, + title: 'Named Template', + templateTimelineId: 'c755cda6-8a65-4ec2-b6ff-35a5356de8b9', + templateTimelineVersion: 1, + dateRange: { + start: '2024-08-13T22:00:00.000Z', + end: '2024-08-14T21:59:59.999Z', + }, + savedQueryId: null, + created: 1723625359467, + createdBy: 'elastic', + updated: 1723625359988, + updatedBy: 'elastic', + timelineType: 'template', + status: 'active', + sort: [ + { + columnId: '@timestamp', + columnType: 'date', + sortDirection: 'desc', + esTypes: ['date'], + }, + ], + savedSearchId: null, + eventIdToNoteIds: [], + noteIds: [], + notes: [], + pinnedEventIds: [], + pinnedEventsSaveObject: [], + }, + }, +}; + const props = { ecsRowData, - onInvestigateInTimelineAlertClick: () => {}, + onInvestigateInTimelineAlertClick: jest.fn(), }; +const addTimelineSpy = jest.spyOn(timelineActions, 'addTimeline'); + +const RULE_TYPES_TO_BE_TESTED = [ + 'query', + 'esql', + 'eql', + 'machine_learning', + /* TODO: Complete test suites for below rule types */ + // 'new_terms', + // 'eql', + // 'threshold', + // 'threat_match', +]; + const renderContextMenu = (items: AlertTableContextMenuItem[]) => { const panels = [{ id: 0, items }]; return render( @@ -72,11 +256,28 @@ const renderContextMenu = (items: AlertTableContextMenuItem[]) => { ); }; -describe('use investigate in timeline hook', () => { +describe('useInvestigateInTimeline', () => { + let mockSearchStrategyClient = { + search: jest + .fn() + .mockReturnValue(of({ data: getNonEcsDataWithRuleTypeAndTimelineTemplate('query') })), + }; + beforeEach(() => { + (getTimelineTemplate as jest.Mock).mockResolvedValue(mockTimelineTemplateResponse); + // by default we return data for query rule type + (useKibana as jest.Mock).mockReturnValue({ + services: { + data: { + search: mockSearchStrategyClient, + query: jest.fn(), + }, + }, + }); + }); afterEach(() => { jest.clearAllMocks(); }); - test('it creates a component and click handler', () => { + test('creates a component and click handler', () => { const { result } = renderHook(() => useInvestigateInTimeline(props), { wrapper: TestProviders, }); @@ -98,4 +299,101 @@ describe('use investigate in timeline hook', () => { expect(mockSendAlertToTimeline).toHaveBeenCalledTimes(1); }); }); + + describe('investigate an alert with timeline template', () => { + describe.each(RULE_TYPES_TO_BE_TESTED)('Rule type : %s', (ruleType: string) => { + test('should copy columns over from template', async () => { + mockSearchStrategyClient = { + search: jest + .fn() + .mockReturnValue(of({ data: getNonEcsDataWithRuleTypeAndTimelineTemplate(ruleType) })), + }; + const ecsData = getEcsDataWithRuleTypeAndTimelineTemplate(ruleType); + const { result } = renderHook( + () => useInvestigateInTimeline({ ...props, ecsRowData: ecsData }), + { + wrapper: TestProviders, + } + ); + + const expectedColumns = [ + { + columnHeaderType: 'not-filtered', + id: '@timestamp', + type: 'date', + initialWidth: 215, + }, + { + columnHeaderType: 'not-filtered', + id: 'host.name', + initialWidth: undefined, + }, + { + columnHeaderType: 'not-filtered', + id: 'user.name', + initialWidth: undefined, + }, + ]; + + const investigateAction = result.current.investigateInTimelineAlertClick; + await investigateAction(); + + await waitFor(() => { + expect(addTimelineSpy).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ + timeline: expect.objectContaining({ + columns: expectedColumns, + }), + }) + ); + }); + }); + test('should copy dataProviders over from template', async () => { + mockSearchStrategyClient = { + search: jest + .fn() + .mockReturnValue(of({ data: getNonEcsDataWithRuleTypeAndTimelineTemplate(ruleType) })), + }; + const ecsData: Ecs = getEcsDataWithRuleTypeAndTimelineTemplate(ruleType); + const { result } = renderHook( + () => useInvestigateInTimeline({ ...props, ecsRowData: ecsData }), + { + wrapper: TestProviders, + } + ); + + const expectedDataProvider = [ + { + and: [], + enabled: true, + id: 'some-random-id', + name: 'some host name', + excluded: false, + kqlQuery: '', + queryMatch: { + field: 'host.name', + value: 'some host name', + operator: ':', + }, + type: 'default', + }, + ]; + + const investigateAction = result.current.investigateInTimelineAlertClick; + await investigateAction(); + + await waitFor(() => { + expect(addTimelineSpy).toHaveBeenNthCalledWith( + 1, + expect.objectContaining({ + timeline: expect.objectContaining({ + dataProviders: expectedDataProvider, + }), + }) + ); + }); + }); + }); + }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx index 2056de93a63be6..211bfd0db2dc12 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_investigate_in_timeline.tsx @@ -18,6 +18,7 @@ import { useApi } from '@kbn/securitysolution-list-hooks'; import type { Filter } from '@kbn/es-query'; import type { EcsSecurityExtension as Ecs } from '@kbn/securitysolution-ecs'; +import { isEmpty } from 'lodash'; import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; import { createHistoryEntry } from '../../../../common/utils/global_query_string/helpers'; import { useKibana } from '../../../../common/lib/kibana'; @@ -147,10 +148,19 @@ export const useInvestigateInTimeline = ({ const unifiedComponentsInTimelineDisabled = useIsExperimentalFeatureEnabled( 'unifiedComponentsInTimelineDisabled' ); + const updateTimeline = useUpdateTimeline(); const createTimeline = useCallback( async ({ from: fromTimeline, timeline, to: toTimeline, ruleNote }: CreateTimelineProps) => { + const newColumns = timeline.columns; + const newColumnsOverride = + !newColumns || isEmpty(newColumns) + ? !unifiedComponentsInTimelineDisabled + ? defaultUdtHeaders + : defaultHeaders + : newColumns; + await clearActiveTimeline(); updateTimelineIsLoading({ id: TimelineId.active, isLoading: false }); updateTimeline({ @@ -160,7 +170,7 @@ export const useInvestigateInTimeline = ({ notes: [], timeline: { ...timeline, - columns: !unifiedComponentsInTimelineDisabled ? defaultUdtHeaders : defaultHeaders, + columns: newColumnsOverride, indexNames: timeline.indexNames ?? [], show: true, excludedRowRendererIds: From 96d3325524b6dfb68fd7382c030a1735df9608bb Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Wed, 14 Aug 2024 18:43:08 +0200 Subject: [PATCH 52/92] [ftr] add roleScopedSupertest service for deployment-agnostic tests (#190279) ## Summary Adding new service that acts as a wrapper of `supertestWithoutAuth` service authenticated with role-based API key and enriched with request headers. The proposed change streamlines test design by centralizing the management of API key and internal/common headers, eliminating the need to pass these arguments individually in every API call. This approach reduces code duplication and enhances maintainability Before: ```ts const samlAuth = getService('samlAuth'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); const internalHeaders = samlAuth.getInternalRequestHeader(); await supertestWithoutAuth .get('/api/console/api_server') .set(roleAuthc.apiKeyHeader) .set(internalHeaders) .set('kbn-xsrf', 'true') .expect(200); ``` After: ```ts const roleScopedSupertest = getService('roleScopedSupertest'); const supertestWithAdminScope = await roleScopedSupertest.getSupertestWithRoleScope('admin', { withInternalHeaders: true, withCustomHeaders: {'kbn-xsrf': 'true'}, }); await supertestWithAdminScope .get('/api/console/api_server') .expect(200); ``` Use this service to easily test API endpoints with role-specific authorization and custom headers, both in serverless and stateful environments. closes #190228 --------- Co-authored-by: Aleh Zasypkin --- .../index.ts | 3 + .../deployment_agnostic/README.md | 21 ++- .../apis/console/spec_definitions.ts | 23 ++-- .../apis/core/compression.ts | 28 ++-- .../apis/painless_lab/painless_lab.ts | 26 ++-- .../deployment_agnostic/services/index.ts | 3 + .../services/role_scoped_supertest.ts | 121 ++++++++++++++++++ 7 files changed, 165 insertions(+), 60 deletions(-) create mode 100644 x-pack/test/api_integration/deployment_agnostic/services/role_scoped_supertest.ts diff --git a/packages/kbn-ftr-common-functional-services/index.ts b/packages/kbn-ftr-common-functional-services/index.ts index 4bd3eca34c45c0..3cc6df44adf017 100644 --- a/packages/kbn-ftr-common-functional-services/index.ts +++ b/packages/kbn-ftr-common-functional-services/index.ts @@ -25,4 +25,7 @@ export type SupertestWithoutAuthProviderType = ProvidedType; + export type { FtrProviderContext } from './services/ftr_provider_context'; diff --git a/x-pack/test/api_integration/deployment_agnostic/README.md b/x-pack/test/api_integration/deployment_agnostic/README.md index 93165007d9b610..da0a9d3f3e18ba 100644 --- a/x-pack/test/api_integration/deployment_agnostic/README.md +++ b/x-pack/test/api_integration/deployment_agnostic/README.md @@ -94,26 +94,23 @@ Add test files to `x-pack/test//deployment_agnost test example ```ts export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { - const samlAuth = getService('samlAuth'); - const supertestWithoutAuth = getService('supertestWithoutAuth'); - let roleAuthc: RoleCredentials; - let internalHeaders: InternalRequestHeader; + const roleScopedSupertest = getService('roleScopedSupertest'); + let supertestWithAdminScope: SupertestWithRoleScopeType; describe('compression', () => { before(async () => { - roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); - internalHeaders = samlAuth.getInternalRequestHeader(); + supertestWithAdminScope = await roleScopedSupertest.getSupertestWithRoleScope('admin', { + withInternalHeaders: true, + withCustomHeaders: { 'accept-encoding': 'gzip' }, + }); }); after(async () => { - await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); + // always invalidate API key for the scoped role in the end + await supertestWithAdminScope.destroy(); }); describe('against an application page', () => { it(`uses compression when there isn't a referer`, async () => { - const response = await supertestWithoutAuth - .get('/app/kibana') - .set('accept-encoding', 'gzip') - .set(internalHeaders) - .set(roleAuthc.apiKeyHeader); + const response = await supertestWithAdminScope.get('/app/kibana'); expect(response.header).to.have.property('content-encoding', 'gzip'); }); }); diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/console/spec_definitions.ts b/x-pack/test/api_integration/deployment_agnostic/apis/console/spec_definitions.ts index a2c8115e4ea0d2..9b4a2f92b7036f 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/console/spec_definitions.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/console/spec_definitions.ts @@ -6,30 +6,25 @@ */ import expect from '@kbn/expect'; -import { RoleCredentials, InternalRequestHeader } from '@kbn/ftr-common-functional-services'; import { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +import { SupertestWithRoleScopeType } from '../../services'; export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { - const samlAuth = getService('samlAuth'); - const supertestWithoutAuth = getService('supertestWithoutAuth'); - let roleAuthc: RoleCredentials; - let internalHeaders: InternalRequestHeader; + const roleScopedSupertest = getService('roleScopedSupertest'); + let supertestWithAdminScope: SupertestWithRoleScopeType; describe('GET /api/console/api_server', () => { before(async () => { - roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); - internalHeaders = samlAuth.getInternalRequestHeader(); + supertestWithAdminScope = await roleScopedSupertest.getSupertestWithRoleScope('admin', { + withInternalHeaders: true, + withCustomHeaders: { 'kbn-xsrf': 'true' }, + }); }); after(async () => { - await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); + await supertestWithAdminScope.destroy(); }); it('returns autocomplete definitions', async () => { - const { body } = await supertestWithoutAuth - .get('/api/console/api_server') - .set(roleAuthc.apiKeyHeader) - .set(internalHeaders) - .set('kbn-xsrf', 'true') - .expect(200); + const { body } = await supertestWithAdminScope.get('/api/console/api_server').expect(200); expect(body.es).to.be.ok(); const { es: { name, globals, endpoints }, diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/core/compression.ts b/x-pack/test/api_integration/deployment_agnostic/apis/core/compression.ts index d1aa1cfb451532..3873274a5c3b85 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/core/compression.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/core/compression.ts @@ -6,40 +6,32 @@ */ import expect from '@kbn/expect'; -import { RoleCredentials, InternalRequestHeader } from '@kbn/ftr-common-functional-services'; import { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +import { SupertestWithRoleScopeType } from '../../services'; export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { - const samlAuth = getService('samlAuth'); - const supertestWithoutAuth = getService('supertestWithoutAuth'); - let roleAuthc: RoleCredentials; - let internalHeaders: InternalRequestHeader; + const roleScopedSupertest = getService('roleScopedSupertest'); + let supertestWithAdminScope: SupertestWithRoleScopeType; describe('compression', () => { before(async () => { - roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); - internalHeaders = samlAuth.getInternalRequestHeader(); + supertestWithAdminScope = await roleScopedSupertest.getSupertestWithRoleScope('admin', { + withCustomHeaders: { 'accept-encoding': 'gzip' }, + }); }); after(async () => { - await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); + await supertestWithAdminScope.destroy(); }); describe('against an application page', () => { it(`uses compression when there isn't a referer`, async () => { - const response = await supertestWithoutAuth - .get('/app/kibana') - .set('accept-encoding', 'gzip') - .set(internalHeaders) - .set(roleAuthc.apiKeyHeader); + const response = await supertestWithAdminScope.get('/app/kibana'); expect(response.header).to.have.property('content-encoding', 'gzip'); }); it(`uses compression when there is a whitelisted referer`, async () => { - const response = await supertestWithoutAuth + const response = await supertestWithAdminScope .get('/app/kibana') - .set('accept-encoding', 'gzip') - .set(internalHeaders) - .set('referer', 'https://some-host.com') - .set(roleAuthc.apiKeyHeader); + .set('referer', 'https://some-host.com'); expect(response.header).to.have.property('content-encoding', 'gzip'); }); }); diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/painless_lab/painless_lab.ts b/x-pack/test/api_integration/deployment_agnostic/apis/painless_lab/painless_lab.ts index 7e7047ac9cb579..0bbf125270ec0a 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/painless_lab/painless_lab.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/painless_lab/painless_lab.ts @@ -6,35 +6,32 @@ */ import expect from '@kbn/expect'; -import { RoleCredentials, InternalRequestHeader } from '@kbn/ftr-common-functional-services'; import { DeploymentAgnosticFtrProviderContext } from '../../ftr_provider_context'; +import { SupertestWithRoleScopeType } from '../../services'; const API_BASE_PATH = '/api/painless_lab'; export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { - const samlAuth = getService('samlAuth'); - const supertestWithoutAuth = getService('supertestWithoutAuth'); - let roleAuthc: RoleCredentials; - let internalHeaders: InternalRequestHeader; + const roleScopedSupertest = getService('roleScopedSupertest'); + let supertestWithAdminScope: SupertestWithRoleScopeType; describe('Painless Lab Routes', function () { before(async () => { - roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('admin'); - internalHeaders = samlAuth.getInternalRequestHeader(); + supertestWithAdminScope = await roleScopedSupertest.getSupertestWithRoleScope('admin', { + withInternalHeaders: true, + withCustomHeaders: { 'Content-Type': 'application/json;charset=UTF-8' }, + }); }); after(async () => { - await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); + await supertestWithAdminScope.destroy(); }); describe('Execute', () => { it('should execute a valid painless script', async () => { const script = '"{\\n \\"script\\": {\\n \\"source\\": \\"return true;\\",\\n \\"params\\": {\\n \\"string_parameter\\": \\"string value\\",\\n \\"number_parameter\\": 1.5,\\n \\"boolean_parameter\\": true\\n}\\n }\\n}"'; - const { body } = await supertestWithoutAuth + const { body } = await supertestWithAdminScope .post(`${API_BASE_PATH}/execute`) - .set(internalHeaders) - .set(roleAuthc.apiKeyHeader) - .set('Content-Type', 'application/json;charset=UTF-8') .send(script) .expect(200); @@ -47,11 +44,8 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { const invalidScript = '"{\\n \\"script\\": {\\n \\"source\\": \\"foobar\\",\\n \\"params\\": {\\n \\"string_parameter\\": \\"string value\\",\\n \\"number_parameter\\": 1.5,\\n \\"boolean_parameter\\": true\\n}\\n }\\n}"'; - const { body } = await supertestWithoutAuth + const { body } = await supertestWithAdminScope .post(`${API_BASE_PATH}/execute`) - .set(internalHeaders) - .set('Content-Type', 'application/json;charset=UTF-8') - .set(roleAuthc.apiKeyHeader) .send(invalidScript) .expect(200); diff --git a/x-pack/test/api_integration/deployment_agnostic/services/index.ts b/x-pack/test/api_integration/deployment_agnostic/services/index.ts index fcb767cdb2436d..6988400e89fa39 100644 --- a/x-pack/test/api_integration/deployment_agnostic/services/index.ts +++ b/x-pack/test/api_integration/deployment_agnostic/services/index.ts @@ -9,6 +9,7 @@ import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; import { deploymentAgnosticServices } from './deployment_agnostic_services'; import { DataViewApiProvider } from './data_view_api'; import { SloApiProvider } from './slo_api'; +import { RoleScopedSupertestProvider, SupertestWithRoleScope } from './role_scoped_supertest'; export type { InternalRequestHeader, @@ -22,7 +23,9 @@ export const services = { samlAuth: commonFunctionalServices.samlAuth, dataViewApi: DataViewApiProvider, sloApi: SloApiProvider, + roleScopedSupertest: RoleScopedSupertestProvider, // create a new deployment-agnostic service and load here }; +export type SupertestWithRoleScopeType = SupertestWithRoleScope; export type DeploymentAgnosticCommonServices = typeof services; diff --git a/x-pack/test/api_integration/deployment_agnostic/services/role_scoped_supertest.ts b/x-pack/test/api_integration/deployment_agnostic/services/role_scoped_supertest.ts new file mode 100644 index 00000000000000..4240fe8c6fbf0c --- /dev/null +++ b/x-pack/test/api_integration/deployment_agnostic/services/role_scoped_supertest.ts @@ -0,0 +1,121 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + RoleCredentials, + SupertestWithoutAuthProviderType, + SamlAuthProviderType, +} from '@kbn/ftr-common-functional-services'; +import { Test } from 'supertest'; +import { DeploymentAgnosticFtrProviderContext } from '../ftr_provider_context'; + +export interface RequestHeadersOptions { + withInternalHeaders?: boolean; + withCommonHeaders?: boolean; + withCustomHeaders?: Record; +} + +export class SupertestWithRoleScope { + private roleAuthc: RoleCredentials | null; + private readonly supertestWithoutAuth: SupertestWithoutAuthProviderType; + private samlAuth: SamlAuthProviderType; + private readonly options: RequestHeadersOptions; + + constructor( + roleAuthc: RoleCredentials, + supertestWithoutAuth: SupertestWithoutAuthProviderType, + samlAuth: SamlAuthProviderType, + options: RequestHeadersOptions + ) { + this.roleAuthc = roleAuthc; + this.supertestWithoutAuth = supertestWithoutAuth; + this.samlAuth = samlAuth; + this.options = options; + } + + async destroy() { + if (this.roleAuthc) { + await this.samlAuth.invalidateM2mApiKeyWithRoleScope(this.roleAuthc); + this.roleAuthc = null; + } + } + + private addHeaders(agent: Test): Test { + const { withInternalHeaders, withCommonHeaders, withCustomHeaders } = this.options; + + if (!this.roleAuthc) { + throw new Error('The instance has already been destroyed.'); + } + // set role-based API key by default + agent.set(this.roleAuthc.apiKeyHeader); + + if (withInternalHeaders) { + agent.set(this.samlAuth.getInternalRequestHeader()); + } + + if (withCommonHeaders) { + agent.set(this.samlAuth.getCommonRequestHeader()); + } + + if (withCustomHeaders) { + agent.set(withCustomHeaders); + } + + return agent; + } + + private request(method: 'post' | 'get' | 'put' | 'delete', url: string): Test { + if (!this.roleAuthc) { + throw new Error('Instance has been destroyed and cannot be used for making requests.'); + } + const agent = this.supertestWithoutAuth[method](url); + return this.addHeaders(agent); + } + + post(url: string) { + return this.request('post', url); + } + + get(url: string) { + return this.request('get', url); + } + + put(url: string) { + return this.request('put', url); + } + + delete(url: string) { + return this.request('delete', url); + } +} + +/** + * Provides a customized 'supertest' instance that is authenticated using a role-based API key + * and enriched with the appropriate request headers. This service allows you to perform + * HTTP requests with specific authentication and header configurations, ensuring that + * the requests are scoped to the provided role and environment. + * + * Use this service to easily test API endpoints with role-specific authorization and + * custom headers, both in serverless and stateful environments. + */ +export function RoleScopedSupertestProvider({ getService }: DeploymentAgnosticFtrProviderContext) { + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const samlAuth = getService('samlAuth'); + + return { + async getSupertestWithRoleScope( + role: string, + options: RequestHeadersOptions = { + withCommonHeaders: false, + withInternalHeaders: false, + } + ) { + const roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope(role); + return new SupertestWithRoleScope(roleAuthc, supertestWithoutAuth, samlAuth, options); + }, + }; +} From 1144c0cea7118c6df0354edbf1fe4c0038e8ba5d Mon Sep 17 00:00:00 2001 From: Lisa Cawley Date: Wed, 14 Aug 2024 09:52:18 -0700 Subject: [PATCH 53/92] [OAS][DOCS] Temporarily omit security APIs from docs (#190467) --- oas_docs/README.md | 9 +- oas_docs/makefile | 13 +- oas_docs/output/kibana.serverless.yaml | 28127 +++---------- oas_docs/output/kibana.yaml | 32661 ++++------------ oas_docs/overlays/kibana.overlays.yaml | 8 +- oas_docs/scripts/merge_ess_oas.js | 6 - oas_docs/scripts/merge_ess_oas_staging.js | 39 + oas_docs/scripts/merge_serverless_oas.js | 8 +- .../scripts/merge_serverless_oas_staging.js | 39 + 9 files changed, 12979 insertions(+), 47931 deletions(-) create mode 100644 oas_docs/scripts/merge_ess_oas_staging.js create mode 100644 oas_docs/scripts/merge_serverless_oas_staging.js diff --git a/oas_docs/README.md b/oas_docs/README.md index 2e11c838241a93..f5317ed0848936 100644 --- a/oas_docs/README.md +++ b/oas_docs/README.md @@ -1,8 +1,9 @@ The `bundle.json` and `bundle.serverless.json` files are generated automatically. See `node scripts/capture_oas_snapshot --help` for more info. -The `output/kibana.serverless.yaml` file is a temporary OpenAPI document created by joining some manually-maintained files. -To create it and lint it, run `make api-docs` or `make api-docs-serverless` and `make api-docs-lint` or `make api-docs-lint-serverless`. +The `output/kibana.serverless.yaml` and `output/kibana.yaml` files join some manually-maintained files with the automatically generated files. +To add integrate more files into this bundle, edit the appropriate `oas_docs/scripts/merge*.js` files. +To generate the bundled files, run `make api-docs` (or `make api-docs-serverless` and `make api-docs-stateful`). +To lint them, run `make api-docs-lint` (or `make api-docs-lint-serverless` and `make api-lint-stateful`). -The `output/kibana.yaml` file is a temporary OpenAPI document created by joining some manually-maintained files. -To create it and lint it, run `make api-docs` or `make api-docs-stateful` and `make api-docs-lint` or `make api-docs-lint-stateful`. \ No newline at end of file +To apply some overlays that perform some post-processing and append some content, run `make api-docs-overlay`. \ No newline at end of file diff --git a/oas_docs/makefile b/oas_docs/makefile index 6e300734cdd17b..673e46c546a80c 100644 --- a/oas_docs/makefile +++ b/oas_docs/makefile @@ -18,19 +18,18 @@ api-docs: ## Generate Serverless and ESS Kibana OpenAPI bundles with kbn-openapi @node scripts/merge_serverless_oas.js @node scripts/merge_ess_oas.js -.PHONY: api-docs-redocly -api-docs-redocly: ## Generate kibana.serverless.yaml and kibana.yaml with Redocly CLI - @npx @redocly/cli join "kibana.info.serverless.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml" "../packages/core/saved-objects/docs/openapi/bundled_serverless.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.serverless.json" -o "output/kibana.serverless.yaml" --prefix-components-with-info-prop title - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title +.PHONY: api-docs-staging +api-docs-staging: ## Generate Serverless and ESS Kibana OpenAPI bundles with kbn-openapi-bundler + @node scripts/merge_serverless_oas_staging.js + @node scripts/merge_ess_oas_staging.js .PHONY: api-docs-stateful api-docs-stateful: ## Generate only kibana.yaml - @npx @redocly/cli join "kibana.info.yaml" "../x-pack/plugins/alerting/docs/openapi/bundled.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/cases/docs/openapi/bundled.yaml" "../x-pack/plugins/actions/docs/openapi/bundled.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis.yaml" "../packages/core/saved-objects/docs/openapi/bundled.yaml" "bundle.json" -o "output/kibana.yaml" --prefix-components-with-info-prop title -# Temporarily omit "../x-pack/plugins/fleet/common/openapi/bundled.yaml" due to internals tag and tag sorting + @node scripts/merge_ess_oas.js .PHONY: api-docs-serverless api-docs-serverless: ## Generate only kibana.serverless.yaml - @npx @redocly/cli join "kibana.info.serverless.yaml" "../x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml" "../x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml" "../src/plugins/data_views/docs/openapi/bundled.yaml" "../x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml" "../packages/core/saved-objects/docs/openapi/bundled_serverless.yaml" "../x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml" "bundle.serverless.json" -o "output/kibana.serverless.yaml" --prefix-components-with-info-prop title + @node scripts/merge_serverless_oas.js .PHONY: api-docs-lint api-docs-lint: ## Run spectral API docs linter diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 0626823f8739ad..e516603dfe2406 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -3,18 +3,26 @@ info: contact: name: Kibana Team description: > - The Kibana REST APIs enable you to manage resources such as connectors, data - views, and saved objects. + **Technical preview** - The API calls are stateless. + This functionality is in technical preview and may be changed or removed in + a future release. - Each request that you make happens in isolation from other calls and must - include all of the necessary information for Kibana to fulfill the + Elastic will work to fix any issues, but features in technical preview are + not subject to the support SLA of official GA features. - request. - API requests return JSON output, which is a format that is machine-readable - and works well for automation. + The Kibana REST APIs for Elastic serverless enable you to manage resources + + such as connectors, data views, and saved objects. The API calls are + + stateless. Each request that you make happens in isolation from other calls + + and must include all of the necessary information for Kibana to fulfill the + + request. API requests return JSON output, which is a format that is + + machine-readable and works well for automation. To interact with Kibana APIs, use the following operations: @@ -22,8 +30,6 @@ info: - GET: Fetches the information. - - PATCH: Applies partial modifications to the existing information. - - POST: Adds new information. - PUT: Updates the existing information. @@ -32,9 +38,8 @@ info: You can prepend any Kibana API endpoint with `kbn:` and run the request in - **Dev Tools → Console**. - For example: + **Dev Tools → Console**. For example: ``` @@ -42,20 +47,30 @@ info: GET kbn:/api/data_views ``` - - - For more information about the console, refer to [Run API - requests](https://www.elastic.co/guide/en/kibana/current/console-kibana.html). license: name: Elastic License 2.0 url: 'https://www.elastic.co/licensing/elastic-license' - title: Kibana APIs + title: Kibana Serverless APIs version: 1.0.2 servers: + - url: 'http://{kibana_host}:{port}' + variables: + kibana_host: + default: localhost + port: + default: '5601' + - url: 'http://localhost:5622' + - url: 'https://{kibanaUrl}' + variables: + kibanaUrl: + default: 'localhost:5601' - url: 'https://{kibana_url}' variables: kibana_url: default: 'localhost:5601' + - url: / + - description: local + url: 'http://localhost:5601' paths: /api/actions/connector: post: @@ -479,255 +494,6 @@ paths: summary: Search for annotations tags: - APM annotations - /api/asset_criticality: - delete: - operationId: DeleteAssetCriticalityRecord - parameters: - - description: The ID value of the asset. - in: query - name: id_value - required: true - schema: - type: string - - description: The field representing the ID. - example: host.name - in: query - name: id_field - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField - - description: If 'wait_for' the request will wait for the index refresh. - in: query - name: refresh - required: false - schema: - enum: - - wait_for - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - deleted: - description: >- - If the record was deleted. If false the record did not - exist. - type: boolean - record: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - required: - - deleted - description: Successful response - '400': - description: Invalid request - summary: Delete Criticality Record - tags: - - Security Solution Entity Analytics API - get: - operationId: GetAssetCriticalityRecord - parameters: - - description: The ID value of the asset. - in: query - name: id_value - required: true - schema: - type: string - - description: The field representing the ID. - example: host.name - in: query - name: id_field - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - description: Successful response - '400': - description: Invalid request - '404': - description: Criticality record not found - summary: Get Criticality Record - tags: - - Security Solution Entity Analytics API - post: - operationId: CreateAssetCriticalityRecord - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - - type: object - properties: - refresh: - description: >- - If 'wait_for' the request will wait for the index - refresh. - enum: - - wait_for - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - description: Successful response - '400': - description: Invalid request - summary: Create Criticality Record - tags: - - Security Solution Entity Analytics API - /api/asset_criticality/bulk: - post: - operationId: BulkUpsertAssetCriticalityRecords - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - example: - records: - - criticality_level: low_impact - id_field: host.name - id_value: host-1 - - criticality_level: medium_impact - id_field: host.name - id_value: host-2 - type: object - properties: - records: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - maxItems: 1000 - minItems: 1 - type: array - required: - - records - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - example: - errors: - - index: 0 - message: Invalid ID field - stats: - failed: 1 - successful: 1 - total: 2 - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem - type: array - stats: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats - required: - - errors - - stats - description: Bulk upload successful - '413': - description: File too large - summary: >- - Bulk upsert asset criticality data, creating or updating records as - needed - tags: - - Security Solution Entity Analytics API - /api/asset_criticality/list: - post: - operationId: FindAssetCriticalityRecords - parameters: - - description: The field to sort by. - in: query - name: sort_field - required: false - schema: - enum: - - id_value - - id_field - - criticality_level - - \@timestamp - type: string - - description: The order to sort by. - in: query - name: sort_direction - required: false - schema: - enum: - - asc - - desc - type: string - - description: The page number to return. - in: query - name: page - required: false - schema: - minimum: 1 - type: integer - - description: The number of records to return per page. - in: query - name: per_page - required: false - schema: - maximum: 1000 - minimum: 1 - type: integer - - description: The kuery to filter by. - in: query - name: kuery - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - page: - minimum: 1 - type: integer - per_page: - maximum: 1000 - minimum: 1 - type: integer - records: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - type: array - total: - minimum: 0 - type: integer - required: - - records - - page - - per_page - - total - description: Bulk upload successful - summary: 'List asset criticality data, filtering and sorting as needed' - tags: - - Security Solution Entity Analytics API /api/data_views: get: operationId: getAllDataViewsDefault @@ -1252,23134 +1018,6398 @@ paths: summary: Preview a saved object reference swap tags: - data views - /api/detection_engine/privileges: + /api/ml/saved_objects/sync: get: description: > - Retrieves whether or not the user is authenticated, and the user's - Kibana - - space and index privileges, which determine if the user can create an - - index for the Elastic Security alerts generated by - - detection engine rules. - operationId: ReadPrivileges - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - has_encryption_key: - type: boolean - is_authenticated: - type: boolean - required: - - is_authenticated - - has_encryption_key - description: Successful response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Returns user privileges for the Kibana space - tags: - - Security Solution Detections API - - Privileges API - /api/detection_engine/rules: - delete: - description: Delete a detection rule using the `rule_id` or `id` field. - operationId: DeleteRule - parameters: - - description: The rule's `id` value. - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - - description: The rule's `rule_id` value. - in: query - name: rule_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Delete a detection rule - tags: - - Security Solution Detections API - - Rules API - get: - description: Retrieve a detection rule using the `rule_id` or `id` field. - operationId: ReadRule + Synchronizes Kibana saved objects for machine learning jobs and trained + models. This API runs automatically when you start Kibana and + periodically thereafter. + operationId: mlSync parameters: - - description: The rule's `id` value. - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - - description: The rule's `rule_id` value. - in: query - name: rule_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + syncExample: + $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Retrieve a detection rule - tags: - - Security Solution Detections API - - Rules API - patch: - description: >- - Update specific fields of an existing detection rule using the `rule_id` - or `id` field. - operationId: PatchRule - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps - required: true - responses: - '200': + $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' + description: Indicates a successful call + '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Patch a detection rule + $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' + description: Authorization information is missing or invalid. + summary: Sync machine learning saved objects tags: - - Security Solution Detections API - - Rules API + - ml + /api/saved_objects/_export: post: - description: Create a new detection rule. - operationId: CreateRule - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Create a detection rule - tags: - - Security Solution Detections API - - Rules API - put: description: > - Update a detection rule using the `rule_id` or `id` field. The original - rule is replaced, and all unspecified fields are deleted. + Retrieve sets of saved objects that you want to import into Kibana. + + You must include `type` or `objects` in the request body. + - > info + Exported saved objects are not backwards compatible and cannot be + imported into an older version of Kibana. + + + NOTE: The `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be exported. - > You cannot modify the `id` or `rule_id` values. - operationId: UpdateRule + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: exportSavedObjectsDefault + parameters: + - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: + examples: + exportSavedObjectsRequest: $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Update a detection rule - tags: - - Security Solution Detections API - - Rules API - /api/detection_engine/rules/_bulk_action: - post: - description: >- - Apply a bulk action, such as bulk edit, duplicate, or delete, to - multiple detection rules. The bulk action is applied to all rules that - match the query or to the rules listed by their IDs. - operationId: PerformRulesBulkAction - parameters: - - description: Enables dry run mode for the request call. - in: query - name: dry_run - required: false - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDeleteRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDisableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEnableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDuplicateRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkManualRuleRun - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditRules - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportActionResponse - description: OK - summary: Apply a bulk action to detection rules - tags: - - Security Solution Detections API - - Bulk API - /api/detection_engine/rules/_export: - post: - description: > - Export detection rules to an `.ndjson` file. The following configuration - items are also included in the `.ndjson` file: - - - Actions - - - Exception lists - - > info - - > You cannot export prebuilt rules. - operationId: ExportRules - parameters: - - description: Determines whether a summary of the exported rules is returned. - in: query - name: exclude_export_details - required: false - schema: - default: false - type: boolean - - description: File name for saving the exported rules. - in: query - name: file_name - required: false - schema: - default: export.ndjson - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: + #/components/examples/Serverless_saved_objects_export_objects_request schema: - nullable: true type: object properties: - objects: + excludeExportDetails: + default: false + description: Do not add export details entry at the end of the stream. + type: boolean + includeReferencesDeep: description: >- - Array of `rule_id` fields. Exports all rules when - unspecified. + Includes all of the referenced objects in the exported + objects. + type: boolean + objects: + description: A list of objects to export. items: type: object - properties: - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - required: - - rule_id type: array - required: - - objects - required: false + type: + description: >- + The saved object types to include in the export. Use `*` to + export all the types. + oneOf: + - type: string + - items: + type: string + type: array + required: true responses: '200': content: - application/ndjson; Elastic-Api-Version=2023-10-31: + application/x-ndjson; Elastic-Api-Version=2023-10-31: + examples: + exportSavedObjectsResponse: + $ref: >- + #/components/examples/Serverless_saved_objects_export_objects_response schema: - description: An `.ndjson` file containing the returned rules. - format: binary - type: string + additionalProperties: true + type: object description: Indicates a successful call. - summary: Export detection rules - tags: - - Security Solution Detections API - - Import/Export API - /api/detection_engine/rules/_find: - get: - description: >- - Retrieve a paginated list of detection rules. By default, the first page - is returned, with 20 results per page. - operationId: FindRules - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_FindRulesSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: Rules per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - summary: List all detection rules + $ref: '#/components/schemas/Serverless_saved_objects_400_response' + description: Bad request. + summary: Export saved objects tags: - - Security Solution Detections API - - Rules API - /api/detection_engine/rules/_import: + - saved objects + /api/saved_objects/_import: post: description: > - Import detection rules from an `.ndjson` file, including actions and - exception lists. The request must include: + Create sets of Kibana saved objects from a file created by the export + API. + + Saved objects can be imported only into the same version, a newer minor + on the same major, or the next major. Exported saved objects are not + backwards compatible and cannot be imported into an older version of + Kibana. - - The `Content-Type: multipart/form-data` HTTP header. - - A link to the `.ndjson` file containing the rules. - operationId: ImportRules + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: importSavedObjectsDefault parameters: - - description: >- - Determines whether existing rules with the same `rule_id` are - overwritten. - in: query - name: overwrite - required: false - schema: - default: false - type: boolean - - description: >- - Determines whether existing exception lists with the same `list_id` - are overwritten. + - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' + - description: > + Creates copies of saved objects, regenerates each object ID, and + resets the origin. When used, potential conflict errors are avoided. + NOTE: This option cannot be used with the `overwrite` and + `compatibilityMode` options. in: query - name: overwrite_exceptions + name: createNewCopies required: false schema: - default: false type: boolean - - description: >- - Determines whether existing actions with the same - `kibana.alert.rule.actions.id` are overwritten. + - description: > + Overwrites saved objects when they already exist. When used, + potential conflict errors are automatically resolved by overwriting + the destination object. NOTE: This option cannot be used with the + `createNewCopies` option. in: query - name: overwrite_action_connectors + name: overwrite required: false schema: - default: false type: boolean - - description: Generates a new list ID for each imported exception list. + - description: > + Applies various adjustments to the saved objects that are being + imported to maintain compatibility between different Kibana + versions. Use this option only if you encounter issues with imported + saved objects. NOTE: This option cannot be used with the + `createNewCopies` option. in: query - name: as_new_list + name: compatibilityMode required: false schema: - default: false type: boolean requestBody: content: multipart/form-data; Elastic-Api-Version=2023-10-31: + examples: + importObjectsRequest: + $ref: >- + #/components/examples/Serverless_saved_objects_import_objects_request schema: type: object properties: file: - description: The `.ndjson` file containing the rules. - format: binary - type: string + description: > + A file exported using the export API. NOTE: The + `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be included in + this file. Similarly, the + `savedObjects.maxImportPayloadBytes` setting limits the + overall size of the file that can be imported. required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + importObjectsResponse: + $ref: >- + #/components/examples/Serverless_saved_objects_import_objects_response schema: - additionalProperties: false type: object properties: - action_connectors_errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema - type: array - action_connectors_success: - type: boolean - action_connectors_success_count: - minimum: 0 - type: integer - action_connectors_warnings: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_WarningSchema - type: array errors: + description: > + Indicates the import was unsuccessful and specifies the + objects that failed to import. + + + NOTE: One object may result in multiple errors, which + requires separate steps to resolve. For instance, a + `missing_references` error and conflict error. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema - type: array - exceptions_errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + type: object type: array - exceptions_success: - type: boolean - exceptions_success_count: - minimum: 0 - type: integer - rules_count: - minimum: 0 - type: integer success: + description: > + Indicates when the import was successfully completed. When + set to false, some objects may not have been created. For + additional information, refer to the `errors` and + `successResults` properties. type: boolean - success_count: - minimum: 0 + successCount: + description: Indicates the number of successfully imported records. type: integer - required: - - exceptions_success - - exceptions_success_count - - exceptions_errors - - rules_count - - success - - success_count - - errors - - action_connectors_errors - - action_connectors_warnings - - action_connectors_success - - action_connectors_success_count + successResults: + description: > + Indicates the objects that are successfully imported, with + any metadata if applicable. + + + NOTE: Objects are created only when all resolvable errors + are addressed, including conflicts and missing references. + If objects are created as new copies, each entry in the + `successResults` array includes a `destinationId` + attribute. + items: + type: object + type: array description: Indicates a successful call. - summary: Import detection rules - tags: - - Security Solution Detections API - - Import/Export API - '/api/detection_engine/rules/{id}/exceptions': - post: - operationId: CreateRuleExceptionListItems - parameters: - - description: Detection rule's identifier - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_RuleId' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - items: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps - type: array - required: - - items - description: Rule exception list items - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - type: array - description: Successful response '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': + $ref: '#/components/schemas/Serverless_saved_objects_400_response' + description: Bad request. + summary: Import saved objects + tags: + - saved objects + /api/status: + get: + operationId: /api/status#0 + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: Set to "true" to get the response in v7 format. + in: query + name: v7format + required: false + schema: + type: boolean + - description: Set to "true" to get the response in v8 format. + in: query + name: v8format + required: false + schema: + type: boolean + responses: + '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' + - $ref: >- + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: Overall status is OK and Kibana should be functioning normally. + '503': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates rule exception list items + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' + - $ref: >- + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: >- + Kibana or some of it's essential services are unavailable. Kibana + may be degraded or unavailable. + summary: Get Kibana's current status tags: - - Security Solution Exceptions API - /api/detection_engine/rules/preview: - post: - operationId: RulePreview - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - anyOf: - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - discriminator: - propertyName: type - description: >- - An object containing tags to add or remove and alert ids the changes - will be applied - required: true + - system + '/s/{spaceId}/api/observability/slos': + get: + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: findSlosOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - description: A valid kql query to filter the SLO with + example: 'slo.name:latency* and slo.tags : "prod"' + in: query + name: kqlQuery + schema: + type: string + - description: 'The page to use for pagination, must be greater or equal than 1' + example: 1 + in: query + name: page + schema: + default: 1 + type: integer + - description: Number of SLOs returned by page + example: 25 + in: query + name: perPage + schema: + default: 25 + maximum: 5000 + type: integer + - description: Sort by field + example: status + in: query + name: sortBy + schema: + default: status + enum: + - sli_value + - status + - error_budget_consumed + - error_budget_remaining + type: string + - description: Sort order + example: asc + in: query + name: sortDirection + schema: + default: asc + enum: + - asc + - desc + type: string + - description: >- + Hide stale SLOs from the list as defined by stale SLO threshold in + SLO settings + in: query + name: hideStale + schema: + type: boolean responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - isAborted: - type: boolean - logs: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLogs - type: array - previewId: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - required: - - logs - description: Successful response + $ref: '#/components/schemas/SLOs_find_slo_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Preview rule alerts generated on specified time range - tags: - - Security Solution Detections API - - Rule preview API - /api/detection_engine/signals/assignees: - post: - description: | - Assign users to detection alerts, and unassign them from alerts. - > info - > You cannot add and remove the same assignee in the same request. - operationId: SetAlertAssignees - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - assignees: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertAssignees - description: Details about the assignees to assign and unassign. - ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds - description: List of alerts ids to assign and unassign passed assignees. - required: - - assignees - - ids - required: true - responses: - '200': - description: Indicates a successful call. - '400': - description: Invalid request. - summary: Assign and unassign users from detection alerts + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Get a paginated list of SLOs tags: - - Security Solution Detections API - /api/detection_engine/signals/search: + - slo post: - description: Find and/or aggregate detection alerts that match the given query. - operationId: SearchAlerts + description: > + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: createSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - description: Elasticsearch query and aggregation request - type: object - properties: - _source: - oneOf: - - type: boolean - - type: string - - items: - type: string - type: array - aggs: - additionalProperties: true - type: object - fields: - items: - type: string - type: array - query: - additionalProperties: true - type: object - runtime_mappings: - additionalProperties: true - type: object - size: - minimum: 0 - type: integer - sort: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSort - track_total_hits: - type: boolean - description: Search and/or aggregation query + $ref: '#/components/schemas/SLOs_create_slo_request' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - additionalProperties: true - description: Elasticsearch search response - type: object - description: Successful response + $ref: '#/components/schemas/SLOs_create_slo_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Find and/or aggregate detection alerts + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '409': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_409_response' + description: Conflict - The SLO id already exists + servers: + - url: 'https://localhost:5601' + summary: Create an SLO tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/signals/status: + - slo + '/s/{spaceId}/api/observability/slos/_delete_instances': post: - description: Set the status of one or more detection alerts. - operationId: SetAlertsStatus + description: > + The deletion occurs for the specified list of `sloId` and `instanceId`. + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: deleteSloInstancesOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByIds - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByQuery - description: >- - An object containing desired status and explicit alert ids or a query - to select alerts + $ref: '#/components/schemas/SLOs_delete_slo_instances_request' required: true responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: true - description: Elasticsearch update by query response - type: object - description: Successful response + '204': + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Set a detection alert status + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + servers: + - url: 'https://localhost:5601' + summary: Batch delete rollup and summary data tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/signals/tags: - post: - description: | - And tags to detection alerts, and remove them from alerts. - > info - > You cannot add and remove the same alert tag in the same request. - operationId: SetAlertTags - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertTags - required: - - ids - - tags - description: >- - An object containing tags to add or remove and alert ids the changes - will be applied - required: true + - slo + '/s/{spaceId}/api/observability/slos/{sloId}': + delete: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: deleteSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: true - description: Elasticsearch update by query response - type: object - description: Successful response + '204': + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Add and remove detection alert tags - tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/tags: - get: - description: List all unique tags from all detection rules. - operationId: ReadTags - responses: - '200': + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - description: Indicates a successful call - summary: List all detection rule tags + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Delete an SLO tags: - - Security Solution Detections API - - Tags API - /api/endpoint_list: - post: - description: Creates an endpoint list or does nothing if the list already exists - operationId: CreateEndpointList + - slo + get: + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: getSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + - description: the specific instanceId used by the summary calculation + example: host-abcde + in: query + name: instanceId + schema: + type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointList - description: Successful response + $ref: '#/components/schemas/SLOs_slo_with_summary_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '500': + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Creates an endpoint list - /api/endpoint_list/items: - delete: - operationId: DeleteEndpointListItem + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Get an SLO + tags: + - slo + put: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: updateSloOp parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_update_slo_request' + required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response + $ref: '#/components/schemas/SLOs_slo_definition_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Deletes an endpoint list item - get: - operationId: ReadEndpointListItem + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Update an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/_reset': + post: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: resetSloOp parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: - '200': + '204': content: application/json; Elastic-Api-Version=2023-10-31: schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - type: array - description: Successful response + $ref: '#/components/schemas/SLOs_slo_definition_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Reads an endpoint list item + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Reset an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/disable': post: - operationId: CreateEndpointListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: disableSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '409': + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item already exists - '500': + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Disable an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/enable': + post: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: enableSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + responses: + '204': + description: Successful request + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Creates an endpoint list item - put: - operationId: UpdateEndpointListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - description: Either `id` or `item_id` must be specified - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Updates an endpoint list item - /api/endpoint_list/items/_find: - get: - operationId: FindEndpointListItems - parameters: - - description: > - Filters the returned results according to the value of the specified - field, - - using the `:` syntax. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 0 - type: integer - - description: The number of exception list items to return per page - in: query - name: per_page - required: false - schema: - minimum: 0 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - pit: - type: string - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Finds endpoint list items - /api/endpoint/action: - get: - description: Get a list of action requests and their responses - operationId: EndpointGetActionsList - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Actions List schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action_log/{agent_id}': - get: - deprecated: true - description: Get action requests log - operationId: EndpointGetActionLog - parameters: - - in: path - name: agent_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionLogRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get action requests log schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action_status: - get: - description: Get action status - operationId: EndpointGetActionsStatus - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - agent_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse - description: OK - summary: Get Actions status schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}': - get: - description: Get action details - operationId: EndpointGetActionsDetails - parameters: - - in: path - name: action_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Action details schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}/file/{file_id}/download`': - get: - description: Download a file from an endpoint - operationId: EndpointFileDownload - parameters: - - in: path - name: action_id - required: true - schema: - type: string - - in: path - name: file_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: File Download schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}/file/{file_id}`': - get: - description: Get file info - operationId: EndpointFileInfo - parameters: - - in: path - name: action_id - required: true - schema: - type: string - - in: path - name: file_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: File Info schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/execute: - post: - description: Execute a given command on an endpoint - operationId: EndpointExecuteAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Execute Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/get_file: - post: - description: Get a file from an endpoint - operationId: EndpointGetFileAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get File Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/isolate: - post: - description: Isolate an endpoint - operationId: EndpointIsolateAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Isolate Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/kill_process: - post: - description: Kill a running process on an endpoint - operationId: EndpointKillProcessAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Kill process Action + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Enable an SLO tags: - - Security Solution Endpoint Management API - /api/endpoint/action/running_procs: - post: - description: Get list of running processes on an endpoint - operationId: EndpointGetProcessesAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Running Processes Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/scan: - post: - description: Scan a file or directory - operationId: EndpointScanAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ScanRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Scan Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/state: - get: - operationId: EndpointGetActionsState - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse - description: OK - summary: Get Action State schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/suspend_process: - post: - description: Suspend a running process on an endpoint - operationId: EndpointSuspendProcessAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Suspend process Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/unisolate: - post: - description: Release an endpoint - operationId: EndpointUnisolateAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Unisolate Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/upload: - post: - description: Upload a file to an endpoint - operationId: EndpointUploadAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UploadRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Upload Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/metadata: - get: - operationId: GetEndpointMetadataList - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ListRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata List schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/metadata/{id}': - get: - operationId: GetEndpointMetadata - parameters: - - in: path - name: id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/metadata/transforms: - get: - operationId: GetEndpointMetadataTransform - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata Transform schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/policy_response: - get: - operationId: GetPolicyResponse - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - agentId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Policy Response schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/policy/summaries: - get: - deprecated: true - operationId: GetAgentPolicySummary - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - package_name: - type: string - policy_id: - nullable: true - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Agent Policy Summary schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/protection_updates_note/{package_policy_id}': - get: - operationId: GetProtectionUpdatesNote - parameters: - - in: path - name: package_policy_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse - description: OK - summary: Get Protection Updates Note schema - tags: - - Security Solution Endpoint Management API - post: - operationId: CreateUpdateProtectionUpdatesNote - parameters: - - in: path - name: package_policy_id - required: true - schema: - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - note: - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse - description: OK - summary: Create Update Protection Updates Note schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/suggestions/{suggestion_type}': - post: - operationId: GetEndpointSuggestions - parameters: - - in: path - name: suggestion_type - required: true - schema: - enum: - - eventFilters - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - field: - type: string - fieldMeta: {} - filters: {} - query: - type: string - required: - - parameters - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get suggestions - tags: - - Security Solution Endpoint Management API - /api/exception_lists: - delete: - operationId: DeleteExceptionList - parameters: - - description: Either `id` or `list_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Either `id` or `list_id` must be specified - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Deletes an exception list - tags: - - Security Solution Exceptions API - get: - operationId: ReadExceptionList - parameters: - - description: Either `id` or `list_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Either `id` or `list_id` must be specified - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves an exception list using its `id` or `list_id` field - tags: - - Security Solution Exceptions API - post: - operationId: CreateExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion - default: 1 - required: - - name - - description - - type - description: Exception list's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates an exception list - tags: - - Security Solution Exceptions API - put: - operationId: UpdateExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion - required: - - name - - description - - type - description: Exception list's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Updates an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_duplicate: - post: - operationId: DuplicateExceptionList - parameters: - - description: Exception list's human identifier - in: query - name: list_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - - description: >- - Determines whether to include expired exceptions in the exported - list - in: query - name: include_expired_exceptions - required: true - schema: - default: 'true' - enum: - - 'true' - - 'false' - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list to duplicate not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Duplicates an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_export: - post: - description: Exports an exception list and its associated items to an .ndjson file - operationId: ExportExceptionList - parameters: - - description: Exception list's identifier - in: query - name: id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Exception list's human identifier - in: query - name: list_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - - description: >- - Determines whether to include expired exceptions in the exported - list - in: query - name: include_expired_exceptions - required: true - schema: - default: 'true' - enum: - - 'true' - - 'false' - type: string - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: >- - A `.ndjson` file containing specified exception list and its - items - format: binary - type: string - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Exports an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_find: - get: - operationId: FindExceptionLists - parameters: - - description: > - Filters the returned results according to the value of the specified - field. - - - Uses the `so type.field name:field` value syntax, where `so type` - can be: - - - - `exception-list`: Specify a space-aware exception list. - - - `exception-list-agnostic`: Specify an exception list that is - shared across spaces. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListsFilter - - description: > - Determines whether the returned containers are Kibana associated - with a Kibana space - - or available in all spaces (`agnostic` or `single`) - in: query - name: namespace_type - required: false - schema: - default: - - single - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - type: array - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 1 - type: integer - - description: The number of exception lists to return per page - in: query - name: per_page - required: false - schema: - minimum: 1 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - type: string - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - type: array - page: - minimum: 1 - type: integer - per_page: - minimum: 1 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Finds exception lists - tags: - - Security Solution Exceptions API - /api/exception_lists/_import: - post: - description: Imports an exception list and associated items - operationId: ImportExceptionList - parameters: - - description: > - Determines whether existing exception lists with the same `list_id` - are overwritten. - - If any exception items have the same `item_id`, those are also - overwritten. - in: query - name: overwrite - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false - type: boolean - - description: > - Determines whether the list being imported will have a new `list_id` - generated. - - Additional `item_id`'s are generated for each exception item. Both - the exception - - list and its items are overwritten. - in: query - name: as_new_list - required: false - schema: - default: false - type: boolean - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - description: A `.ndjson` file containing the exception list - format: binary - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - errors: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray - success: - type: boolean - success_count: - minimum: 0 - type: integer - success_count_exception_list_items: - minimum: 0 - type: integer - success_count_exception_lists: - minimum: 0 - type: integer - success_exception_list_items: - type: boolean - success_exception_lists: - type: boolean - required: - - errors - - success - - success_count - - success_exception_lists - - success_count_exception_lists - - success_exception_list_items - - success_count_exception_list_items - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Imports an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/items: - delete: - operationId: DeleteExceptionListItem - parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Deletes an exception list item - tags: - - Security Solution Exceptions API - get: - operationId: ReadExceptionListItem - parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Gets an exception list item - tags: - - Security Solution Exceptions API - post: - operationId: CreateExceptionListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - required: - - list_id - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates an exception list item - tags: - - Security Solution Exceptions API - put: - operationId: UpdateExceptionListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - description: Either `id` or `item_id` must be specified - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Updates an exception list item - tags: - - Security Solution Exceptions API - /api/exception_lists/items/_find: - get: - operationId: FindExceptionListItems - parameters: - - description: List's id - in: query - name: list_id - required: true - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - type: array - - description: > - Filters the returned results according to the value of the specified - field, - - using the `:` syntax. - in: query - name: filter - required: false - schema: - default: [] - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListItemsFilter - type: array - - description: > - Determines whether the returned containers are Kibana associated - with a Kibana space - - or available in all spaces (`agnostic` or `single`) - in: query - name: namespace_type - required: false - schema: - default: - - single - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - type: array - - in: query - name: search - required: false - schema: - type: string - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 0 - type: integer - - description: The number of exception list items to return per page - in: query - name: per_page - required: false - schema: - minimum: 0 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - type: array - page: - minimum: 1 - type: integer - per_page: - minimum: 1 - type: integer - pit: - type: string - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Finds exception list items - tags: - - Security Solution Exceptions API - /api/exception_lists/summary: - get: - operationId: ReadExceptionListSummary - parameters: - - description: Exception list's identifier generated upon creation - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Exception list's human readable identifier - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - - description: Search filter clause - in: query - name: filter - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - linux: - minimum: 0 - type: integer - macos: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - windows: - minimum: 0 - type: integer - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves an exception list summary - tags: - - Security Solution Exceptions API - /api/exceptions/shared: - post: - operationId: CreateSharedExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - required: - - name - - description - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates a shared exception list - tags: - - Security Solution Exceptions API - /api/lists: - delete: - operationId: DeleteList - parameters: - - description: List's `id` value - in: query - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - in: query - name: deleteReferences - required: false - schema: - default: false - type: boolean - - in: query - name: ignoreReferences - required: false - schema: - default: false - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes a list - tags: - - Security Solution Lists API - get: - operationId: ReadList - parameters: - - description: List's `id` value - in: query - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves a list using its id field - tags: - - Security Solution Lists API - patch: - operationId: PatchList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - version: - minimum: 1 - type: integer - required: - - id - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Patches a list - tags: - - Security Solution Lists API - post: - operationId: CreateList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - deserializer: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - serializer: - type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - version: - default: 1 - minimum: 1 - type: integer - required: - - name - - description - - type - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates a list - tags: - - Security Solution Lists API - put: - operationId: UpdateList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - version: - minimum: 1 - type: integer - required: - - id - - name - - description - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Updates a list - tags: - - Security Solution Lists API - /api/lists/_find: - get: - operationId: FindLists - parameters: - - description: The page number to return - in: query - name: page - required: false - schema: - type: integer - - description: The number of lists to return per page - in: query - name: per_page - required: false - schema: - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query - name: cursor - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsCursor' - - description: > - Filters the returned results according to the value of the specified - field, - - using the : syntax. - in: query - name: filter - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsFilter' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListsCursor - data: - items: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - - cursor - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Finds lists - tags: - - Security Solution Lists API - /api/lists/index: - delete: - operationId: DeleteListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes list data streams - tags: - - Security Solution Lists API - get: - operationId: ReadListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - list_index: - type: boolean - list_item_index: - type: boolean - required: - - list_index - - list_item_index - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream(s) not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Get list data stream existence status - tags: - - Security Solution Lists API - post: - operationId: CreateListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates necessary list data streams - tags: - - Security Solution Lists API - /api/lists/items: - delete: - operationId: DeleteListItem - parameters: - - description: Required if `list_id` and `value` are not specified - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: value - required: false - schema: - type: string - - description: >- - Determines when changes made by the request are made visible to - search - in: query - name: refresh - required: false - schema: - default: 'false' - enum: - - 'true' - - 'false' - - wait_for - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes a list item - tags: - - Security Solution Lists API - get: - operationId: ReadListItem - parameters: - - description: Required if `list_id` and `value` are not specified - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: value - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Gets a list item - tags: - - Security Solution Lists API - patch: - operationId: PatchListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - refresh: - description: >- - Determines when changes made by the request are made visible - to search - enum: - - 'true' - - 'false' - - wait_for - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - id - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Patches a list item - tags: - - Security Solution Lists API - post: - operationId: CreateListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - refresh: - description: >- - Determines when changes made by the request are made visible - to search - enum: - - 'true' - - 'false' - - wait_for - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - list_id - - value - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates a list item - tags: - - Security Solution Lists API - put: - operationId: UpdateListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - id - - value - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Updates a list item - tags: - - Security Solution Lists API - /api/lists/items/_export: - post: - description: Exports list item values from the specified list - operationId: ExportListItems - parameters: - - description: List's id to export - in: query - name: list_id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: A `.txt` file containing list items from the specified list - format: binary - type: string - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Exports list items - tags: - - Security Solution Lists API - /api/lists/items/_find: - get: - operationId: FindListItems - parameters: - - description: List's id - in: query - name: list_id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: The page number to return - in: query - name: page - required: false - schema: - type: integer - - description: The number of list items to return per page - in: query - name: per_page - required: false - schema: - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query - name: cursor - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor - - description: > - Filters the returned results according to the value of the specified - field, - - using the : syntax. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsFilter - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - - cursor - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Finds list items - tags: - - Security Solution Lists API - /api/lists/items/_import: - post: - description: > - Imports a list of items from a `.txt` or `.csv` file. The maximum file - size is 9 million bytes. - - - You can import items to a new or existing list. - operationId: ImportListItems - parameters: - - description: | - List's id. - - Required when importing to an existing list. - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: > - Type of the importing list. - - - Required when importing a new list that is `list_id` is not - specified. - in: query - name: type - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - - in: query - name: serializer - required: false - schema: - type: string - - in: query - name: deserializer - required: false - schema: - type: string - - description: >- - Determines when changes made by the request are made visible to - search - in: query - name: refresh - required: false - schema: - enum: - - 'true' - - 'false' - - wait_for - type: string - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - description: >- - A `.txt` or `.csv` file containing newline separated list - items - format: binary - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List with specified list_id does not exist response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Imports list items - tags: - - Security Solution Lists API - /api/lists/privileges: - get: - operationId: ReadListPrivileges - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - is_authenticated: - type: boolean - listItems: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemPrivileges - lists: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListPrivileges - required: - - lists - - listItems - - is_authenticated - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Gets list privileges - tags: - - Security Solution Lists API - /api/ml/saved_objects/sync: - get: - description: > - Synchronizes Kibana saved objects for machine learning jobs and trained - models. This API runs automatically when you start Kibana and - periodically thereafter. - operationId: mlSync - parameters: - - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - syncExample: - $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' - schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' - description: Indicates a successful call - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' - description: Authorization information is missing or invalid. - summary: Sync machine learning saved objects - tags: - - ml - /api/note: - delete: - operationId: DeleteNote - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - nullable: true - type: object - properties: - noteId: - type: string - required: - - noteId - - type: object - properties: - noteIds: - items: - type: string - nullable: true - type: array - required: - - noteIds - description: The id of the note to delete. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - description: Indicates the note was successfully deleted. - summary: Deletes a note from a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - get: - description: Gets notes - operationId: GetNotes - parameters: - - in: query - name: documentIds - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DocumentIds' - - in: query - name: page - schema: - nullable: true - type: number - - in: query - name: perPage - schema: - nullable: true - type: number - - in: query - name: search - schema: - nullable: true - type: string - - in: query - name: sortField - schema: - nullable: true - type: string - - in: query - name: sortOrder - schema: - nullable: true - type: string - - in: query - name: filter - schema: - nullable: true - type: string - responses: - '200': - description: Indicates the requested notes were returned. - summary: Get all notes for a given document. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - patch: - operationId: PersistNoteRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - eventDataView: - nullable: true - type: string - eventIngested: - nullable: true - type: string - eventTimestamp: - nullable: true - type: string - note: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - noteId: - nullable: true - type: string - overrideOwner: - nullable: true - type: boolean - version: - nullable: true - type: string - required: - - note - description: The note to persist or update along with additional metadata. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Note - required: - - code - - message - - note - required: - - persistNote - required: - - data - description: Indicates the note was successfully created. - summary: Persists a note to a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/osquery/live_queries: - get: - operationId: OsqueryFindLiveQueries - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindLiveQueryRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find live queries - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreateLiveQuery - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateLiveQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a live query - tags: - - Security Solution Osquery API - '/api/osquery/live_queries/{id}': - get: - operationId: OsqueryGetLiveQueryDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: query - name: query - schema: - additionalProperties: true - type: object - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get live query details - tags: - - Security Solution Osquery API - '/api/osquery/live_queries/{id}/results/{actionId}': - get: - operationId: OsqueryGetLiveQueryResults - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: path - name: actionId - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get live query results - tags: - - Security Solution Osquery API - /api/osquery/packs: - get: - operationId: OsqueryFindPacks - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindPacksRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find packs - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreatePacks - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreatePacksRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a packs - tags: - - Security Solution Osquery API - '/api/osquery/packs/{id}': - delete: - operationId: OsqueryDeletePacks - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Delete packs - tags: - - Security Solution Osquery API - get: - operationId: OsqueryGetPacksDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get packs details - tags: - - Security Solution Osquery API - put: - operationId: OsqueryUpdatePacks - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdatePacksRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Update packs - tags: - - Security Solution Osquery API - /api/osquery/saved_queries: - get: - operationId: OsqueryFindSavedQueries - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindSavedQueryRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find saved queries - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreateSavedQuery - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateSavedQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a saved query - tags: - - Security Solution Osquery API - '/api/osquery/saved_queries/{id}': - delete: - operationId: OsqueryDeleteSavedQuery - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Delete saved query - tags: - - Security Solution Osquery API - get: - operationId: OsqueryGetSavedQueryDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get saved query details - tags: - - Security Solution Osquery API - put: - operationId: OsqueryUpdateSavedQuery - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdateSavedQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Update saved query - tags: - - Security Solution Osquery API - /api/pinned_event: - patch: - operationId: PersistPinnedEventRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - eventId: - type: string - pinnedEventId: - nullable: true - type: string - timelineId: - type: string - required: - - eventId - - timelineId - description: The pinned event to persist or update along with additional metadata. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistPinnedEventOnTimeline: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - - type: object - properties: - code: - type: number - message: - type: string - required: - - persistPinnedEventOnTimeline - required: - - data - description: Indicate the event was successfully pinned in the timeline. - summary: Persists a pinned event to a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/saved_objects/_export: - post: - description: > - Retrieve sets of saved objects that you want to import into Kibana. - - You must include `type` or `objects` in the request body. - - - Exported saved objects are not backwards compatible and cannot be - imported into an older version of Kibana. - - - NOTE: The `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be exported. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: exportSavedObjectsDefault - parameters: - - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - exportSavedObjectsRequest: - $ref: >- - #/components/examples/Serverless_saved_objects_export_objects_request - schema: - type: object - properties: - excludeExportDetails: - default: false - description: Do not add export details entry at the end of the stream. - type: boolean - includeReferencesDeep: - description: >- - Includes all of the referenced objects in the exported - objects. - type: boolean - objects: - description: A list of objects to export. - items: - type: object - type: array - type: - description: >- - The saved object types to include in the export. Use `*` to - export all the types. - oneOf: - - type: string - - items: - type: string - type: array - required: true - responses: - '200': - content: - application/x-ndjson; Elastic-Api-Version=2023-10-31: - examples: - exportSavedObjectsResponse: - $ref: >- - #/components/examples/Serverless_saved_objects_export_objects_response - schema: - additionalProperties: true - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Serverless_saved_objects_400_response' - description: Bad request. - summary: Export saved objects - tags: - - saved objects - /api/saved_objects/_import: - post: - description: > - Create sets of Kibana saved objects from a file created by the export - API. - - Saved objects can be imported only into the same version, a newer minor - on the same major, or the next major. Exported saved objects are not - backwards compatible and cannot be imported into an older version of - Kibana. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: importSavedObjectsDefault - parameters: - - $ref: '#/components/parameters/Serverless_saved_objects_kbn_xsrf' - - description: > - Creates copies of saved objects, regenerates each object ID, and - resets the origin. When used, potential conflict errors are avoided. - NOTE: This option cannot be used with the `overwrite` and - `compatibilityMode` options. - in: query - name: createNewCopies - required: false - schema: - type: boolean - - description: > - Overwrites saved objects when they already exist. When used, - potential conflict errors are automatically resolved by overwriting - the destination object. NOTE: This option cannot be used with the - `createNewCopies` option. - in: query - name: overwrite - required: false - schema: - type: boolean - - description: > - Applies various adjustments to the saved objects that are being - imported to maintain compatibility between different Kibana - versions. Use this option only if you encounter issues with imported - saved objects. NOTE: This option cannot be used with the - `createNewCopies` option. - in: query - name: compatibilityMode - required: false - schema: - type: boolean - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - examples: - importObjectsRequest: - $ref: >- - #/components/examples/Serverless_saved_objects_import_objects_request - schema: - type: object - properties: - file: - description: > - A file exported using the export API. NOTE: The - `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be included in - this file. Similarly, the - `savedObjects.maxImportPayloadBytes` setting limits the - overall size of the file that can be imported. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - importObjectsResponse: - $ref: >- - #/components/examples/Serverless_saved_objects_import_objects_response - schema: - type: object - properties: - errors: - description: > - Indicates the import was unsuccessful and specifies the - objects that failed to import. - - - NOTE: One object may result in multiple errors, which - requires separate steps to resolve. For instance, a - `missing_references` error and conflict error. - items: - type: object - type: array - success: - description: > - Indicates when the import was successfully completed. When - set to false, some objects may not have been created. For - additional information, refer to the `errors` and - `successResults` properties. - type: boolean - successCount: - description: Indicates the number of successfully imported records. - type: integer - successResults: - description: > - Indicates the objects that are successfully imported, with - any metadata if applicable. - - - NOTE: Objects are created only when all resolvable errors - are addressed, including conflicts and missing references. - If objects are created as new copies, each entry in the - `successResults` array includes a `destinationId` - attribute. - items: - type: object - type: array - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Serverless_saved_objects_400_response' - description: Bad request. - summary: Import saved objects - tags: - - saved objects - /api/security_ai_assistant/anonymization_fields/_bulk_action: - post: - description: >- - The bulk action is applied to all anonymization fields that match the - filter or to the list of anonymization fields by their IDs. - operationId: PerformAnonymizationFieldsBulkAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - create: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldCreateProps - type: array - delete: - type: object - properties: - ids: - description: Array of anonymization fields IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter anonymization fields - type: string - update: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldUpdateProps - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Applies a bulk action to multiple anonymization fields - tags: - - Security AI Assistant API - - Bulk API - /api/security_ai_assistant/anonymization_fields/_find: - get: - description: Finds anonymization fields that match the given query. - operationId: FindAnonymizationFields - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindAnonymizationFieldsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: AnonymizationFields per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds anonymization fields that match the given query. - tags: - - Security AI Assistant API - - AnonymizationFields API - /api/security_ai_assistant/chat/complete: - post: - description: Creates a model response for the given chat conversation. - operationId: ChatComplete - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatCompleteProps' - required: true - responses: - '200': - content: - application/octet-stream; Elastic-Api-Version=2023-10-31: - schema: - format: binary - type: string - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Creates a model response for the given chat conversation. - tags: - - Security AI Assistant API - - Chat Complete API - /api/security_ai_assistant/current_user/conversations: - post: - description: Create a conversation - operationId: CreateConversation - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationCreateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Create a conversation - tags: - - Security AI Assistant API - - Conversation API - /api/security_ai_assistant/current_user/conversations/_find: - get: - description: Finds conversations that match the given query. - operationId: FindConversations - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindConversationsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: Conversations per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds conversations that match the given query. - tags: - - Security AI Assistant API - - Conversations API - '/api/security_ai_assistant/current_user/conversations/{id}': - delete: - description: Deletes a single conversation using the `id` field. - operationId: DeleteConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Deletes a single conversation using the `id` field. - tags: - - Security AI Assistant API - - Conversation API - get: - description: Read a single conversation - operationId: ReadConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Read a single conversation - tags: - - Security AI Assistant API - - Conversations API - put: - description: Update a single conversation - operationId: UpdateConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationUpdateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Update a conversation - tags: - - Security AI Assistant API - - Conversation API - /api/security_ai_assistant/prompts/_bulk_action: - post: - description: >- - The bulk action is applied to all prompts that match the filter or to - the list of prompts by their IDs. - operationId: PerformPromptsBulkAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - create: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptCreateProps - type: array - delete: - type: object - properties: - ids: - description: Array of prompts IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter promps - type: string - update: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptUpdateProps - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkCrudActionResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Applies a bulk action to multiple prompts - tags: - - Security AI Assistant API - - Bulk API - /api/security_ai_assistant/prompts/_find: - get: - description: Finds prompts that match the given query. - operationId: FindPrompts - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindPromptsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: Prompts per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds prompts that match the given query. - tags: - - Security AI Assistant API - - Prompts API - /api/status: - get: - operationId: /api/status#0 - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - - description: Set to "true" to get the response in v7 format. - in: query - name: v7format - required: false - schema: - type: boolean - - description: Set to "true" to get the response in v8 format. - in: query - name: v8format - required: false - schema: - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: Overall status is OK and Kibana should be functioning normally. - '503': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: >- - Kibana or some of it's essential services are unavailable. Kibana - may be degraded or unavailable. - summary: Get Kibana's current status - tags: - - system - /api/timeline: - delete: - operationId: DeleteTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - savedObjectIds: - items: - type: string - type: array - searchIds: - description: >- - Saved search ids that should be deleted alongside the - timelines - items: - type: string - type: array - required: - - savedObjectIds - description: The ids of the timelines or timeline templates to delete. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - deleteTimeline: - type: boolean - required: - - deleteTimeline - required: - - data - description: Indicates the timeline was successfully deleted. - summary: Deletes one or more timelines or timeline templates. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - get: - operationId: GetTimeline - parameters: - - description: The ID of the template timeline to retrieve - in: query - name: template_timeline_id - schema: - type: string - - description: The ID of the timeline to retrieve - in: query - name: id - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - nullable: true - required: - - getOneTimeline - required: - - data - description: Indicates that the (template) timeline was found and returned. - summary: >- - Get an existing saved timeline or timeline template. This API is used to - retrieve an existing saved timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - patch: - description: >- - Updates an existing timeline. This API is used to update the title, - description, date range, pinned events, pinned queries, and/or pinned - saved queries of an existing timeline. - operationId: PatchTimeline - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - timelineId: - nullable: true - type: string - version: - nullable: true - type: string - required: - - timelineId - - version - - timeline - description: The timeline updates along with the timeline ID and version. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: >- - Indicates that the draft timeline was successfully created. In the - event the user already has a draft timeline, the existing draft - timeline is cleared and returned. - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates that the user does not have the required access to create - a draft timeline. - summary: Updates an existing timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - post: - operationId: CreateTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - status: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineStatus - nullable: true - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - timelineId: - nullable: true - type: string - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - nullable: true - version: - nullable: true - type: string - required: - - timeline - description: >- - The required timeline fields used to create a new timeline along with - optional fields that will be created if not provided. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - persistTimeline - required: - - data - description: Indicates the timeline was successfully created. - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Indicates that there was an error in the timeline creation. - summary: Creates a new timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_draft: - get: - operationId: GetDraftTimelines - parameters: - - in: query - name: timelineType - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: Indicates that the draft timeline was successfully retrieved. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - If a draft timeline was not found and we attempted to create one, it - indicates that the user does not have the required permissions to - create a draft timeline. - '409': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - This should never happen, but if a draft timeline was not found and - we attempted to create one, it indicates that there is already a - draft timeline with the given timelineId. - summary: >- - Retrieves the draft timeline for the current user. If the user does not - have a draft timeline, an empty timeline is returned. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - post: - description: > - Retrieves a clean draft timeline. If a draft timeline does not exist, it - is created and returned. - operationId: CleanDraftTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - required: - - timelineType - description: >- - The type of timeline to create. Valid values are `default` and - `template`. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: >- - Indicates that the draft timeline was successfully created. In the - event the user already has a draft timeline, the existing draft - timeline is cleared and returned. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - Indicates that the user does not have the required permissions to - create a draft timeline. - '409': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - Indicates that there is already a draft timeline with the given - timelineId. - summary: Retrieves a draft timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_export: - post: - operationId: ExportTimelines - parameters: - - description: The name of the file to export - in: query - name: file_name - required: true - schema: - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - ids: - items: - type: string - nullable: true - type: array - description: The ids of the timelines to export - required: true - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: NDJSON of the exported timelines - type: string - description: Indicates the timelines were successfully exported - '400': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Indicates that the export size limit was exceeded - summary: Exports timelines as an NDJSON file - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_favorite: - patch: - operationId: PersistFavoriteRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timelineId: - nullable: true - type: string - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - nullable: true - required: - - timelineId - - templateTimelineId - - templateTimelineVersion - - timelineType - description: The required fields used to favorite a (template) timeline. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistFavorite: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResponse - required: - - persistFavorite - required: - - data - description: Indicates the favorite status was successfully updated. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates the user does not have the required permissions to persist - the favorite status. - summary: Persists a given users favorite status of a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_import: - post: - operationId: ImportTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Readable - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi - description: The timelines to import as a readable stream. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult - required: - - data - description: Indicates the import of timelines was successful. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - id: - type: string - statusCode: - type: number - description: >- - Indicates the import of timelines was unsuccessful because of an - invalid file extension. - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - id: - type: string - statusCode: - type: number - description: >- - Indicates that we were unable to locate the saved object client - necessary to handle the import. - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - id: - type: string - statusCode: - type: number - description: Indicates the import of timelines was unsuccessful. - summary: Imports timelines. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_prepackaged: - post: - operationId: InstallPrepackedTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - prepackagedTimelines: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - type: array - timelinesToInstall: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines - nullable: true - type: array - timelinesToUpdate: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines - nullable: true - type: array - required: - - timelinesToInstall - - timelinesToUpdate - - prepackagedTimelines - description: The timelines to install or update. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult - required: - - data - description: Indicates the installation of prepackaged timelines was successful. - '500': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates the installation of prepackaged timelines was - unsuccessful. - summary: Installs prepackaged timelines. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/resolve: - get: - operationId: ResolveTimeline - parameters: - - description: The ID of the template timeline to resolve - in: query - name: template_timeline_id - schema: - type: string - - description: The ID of the timeline to resolve - in: query - name: id - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - nullable: true - required: - - getOneTimeline - required: - - data - description: The (template) timeline has been found - '400': - description: The request is missing parameters - '404': - description: The (template) timeline was not found - summary: Get an existing saved timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timelines: - get: - operationId: GetTimelines - parameters: - - description: >- - If true, only timelines that are marked as favorites by the user are - returned. - in: query - name: only_user_favorite - schema: - enum: - - 'true' - - 'false' - nullable: true - type: string - - in: query - name: timeline_type - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - nullable: true - - in: query - name: sort_field - schema: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SortFieldTimeline - - in: query - name: sort_order - schema: - enum: - - asc - - desc - type: string - - in: query - name: page_size - schema: - nullable: true - type: string - - in: query - name: page_index - schema: - nullable: true - type: string - - in: query - name: search - schema: - nullable: true - type: string - - in: query - name: status - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineStatus' - nullable: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount - required: - - data - description: Indicates that the (template) timelines were found and returned. - '400': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Bad request. The user supplied invalid data. - summary: >- - This API is used to retrieve a list of existing saved timelines or - timeline templates. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - '/s/{spaceId}/api/observability/slos': - get: - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: findSlosOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - description: A valid kql query to filter the SLO with - example: 'slo.name:latency* and slo.tags : "prod"' - in: query - name: kqlQuery - schema: - type: string - - description: 'The page to use for pagination, must be greater or equal than 1' - example: 1 - in: query - name: page - schema: - default: 1 - type: integer - - description: Number of SLOs returned by page - example: 25 - in: query - name: perPage - schema: - default: 25 - maximum: 5000 - type: integer - - description: Sort by field - example: status - in: query - name: sortBy - schema: - default: status - enum: - - sli_value - - status - - error_budget_consumed - - error_budget_remaining - type: string - - description: Sort order - example: asc - in: query - name: sortDirection - schema: - default: asc - enum: - - asc - - desc - type: string - - description: >- - Hide stale SLOs from the list as defined by stale SLO threshold in - SLO settings - in: query - name: hideStale - schema: - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_find_slo_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Get a paginated list of SLOs - tags: - - slo - post: - description: > - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: createSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_create_slo_request' - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_create_slo_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_409_response' - description: Conflict - The SLO id already exists - summary: Create an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/_delete_instances': - post: - description: > - The deletion occurs for the specified list of `sloId` and `instanceId`. - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: deleteSloInstancesOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_delete_slo_instances_request' - required: true - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - summary: Batch delete rollup and summary data - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}': - delete: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: deleteSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Delete an SLO - tags: - - slo - get: - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: getSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - - description: the specific instanceId used by the summary calculation - example: host-abcde - in: query - name: instanceId - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_with_summary_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Get an SLO - tags: - - slo - put: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: updateSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_update_slo_request' - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Update an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/_reset': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: resetSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Reset an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/disable': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: disableSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '200': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Disable an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/enable': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: enableSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Enable an SLO - tags: - - slo -components: - examples: - Connectors_create_email_connector_request: - summary: Create an email connector. - value: - config: - from: tester@example.com - hasAuth: true - host: 'https://example.com' - port: 1025 - secure: false - service: other - connector_type_id: .email - name: email-connector-1 - secrets: - password: password - user: username - Connectors_create_email_connector_response: - summary: A new email connector. - value: - config: - clientId: null - from: tester@example.com - hasAuth: true - host: 'https://example.com' - oauthTokenUrl: null - port: 1025 - secure: false - service: other - tenantId: null - connector_type_id: .email - id: 90a82c60-478f-11ee-a343-f98a117c727f - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: email-connector-1 - Connectors_create_index_connector_request: - summary: Create an index connector. - value: - config: - index: test-index - connector_type_id: .index - name: my-connector - Connectors_create_index_connector_response: - summary: A new index connector. - value: - config: - executionTimeField: null - index: test-index - refresh: false - connector_type_id: .index - id: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-connector - Connectors_create_webhook_connector_request: - summary: Create a webhook connector with SSL authentication. - value: - config: - authType: webhook-authentication-ssl - certType: ssl-crt-key - method: post - url: 'https://example.com' - connector_type_id: .webhook - name: my-webhook-connector - secrets: - crt: QmFnIEF0dH... - key: LS0tLS1CRUdJ... - password: my-passphrase - Connectors_create_webhook_connector_response: - summary: A new webhook connector. - value: - config: - authType: webhook-authentication-ssl - certType: ssl-crt-key - hasAuth: true - headers: null - method: post - url: 'https://example.com' - verificationMode: full - connector_type_id: .webhook - id: 900eb010-3b9d-11ee-a642-8ffbb94e38bd - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-webhook-connector - Connectors_create_xmatters_connector_request: - summary: Create an xMatters connector with URL authentication. - value: - config: - usesBasic: false - connector_type_id: .xmatters - name: my-xmatters-connector - secrets: - secretsUrl: 'https://example.com?apiKey=xxxxx' - Connectors_create_xmatters_connector_response: - summary: A new xMatters connector. - value: - config: - configUrl: null - usesBasic: false - connector_type_id: .xmatters - id: 4d2d8da0-4d1f-11ee-9367-577408be4681 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-xmatters-connector - Connectors_get_connector_response: - summary: Get connector details. - value: - config: {} - connector_type_id: .server-log - id: df770e30-8b8b-11ed-a780-3b746c987a81 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my_server_log_connector - Connectors_get_connector_types_generativeai_response: - summary: A list of connector types for the `generativeAI` feature. - value: - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .gen-ai - is_system_action_type: false - minimum_license_required: enterprise - name: OpenAI - supported_feature_ids: - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .bedrock - is_system_action_type: false - minimum_license_required: enterprise - name: AWS Bedrock - supported_feature_ids: - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .gemini - is_system_action_type: false - minimum_license_required: enterprise - name: Google Gemini - supported_feature_ids: - - generativeAIForSecurity - Connectors_get_connectors_response: - summary: A list of connectors - value: - - connector_type_id: .email - id: preconfigured-email-connector - is_deprecated: false - is_preconfigured: true - is_system_action: false - name: my-preconfigured-email-notification - referenced_by_count: 0 - - config: - executionTimeField: null - index: test-index - refresh: false - connector_type_id: .index - id: e07d0c80-8b8b-11ed-a780-3b746c987a81 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-index-connector - referenced_by_count: 2 - Connectors_update_index_connector_request: - summary: Update an index connector. - value: - config: - index: updated-index - name: updated-connector - Data_views_create_data_view_request: - summary: Create a data view with runtime fields. - value: - data_view: - name: My Logstash data view - runtimeFieldMap: - runtime_shape_name: - script: - source: 'emit(doc[''shape_name''].value)' - type: keyword - title: logstash-* - Data_views_create_runtime_field_request: - summary: Create a runtime field. - value: - name: runtimeFoo - runtimeField: - script: - source: 'emit(doc["foo"].value)' - type: long - Data_views_get_data_view_response: - summary: >- - The get data view API returns a JSON object that contains information - about the data view. - value: - data_view: - allowNoIndex: false - fieldAttrs: - products.manufacturer: - count: 1 - products.price: - count: 1 - products.product_name: - count: 1 - total_quantity: - count: 1 - fieldFormats: - products.base_price: - id: number - params: - pattern: '$0,0.00' - products.base_unit_price: - id: number - params: - pattern: '$0,0.00' - products.min_price: - id: number - params: - pattern: '$0,0.00' - products.price: - id: number - params: - pattern: '$0,0.00' - products.taxful_price: - id: number - params: - pattern: '$0,0.00' - products.taxless_price: - id: number - params: - pattern: '$0,0.00' - taxful_total_price: - id: number - params: - pattern: '$0,0.[00]' - taxless_total_price: - id: number - params: - pattern: '$0,0.00' - fields: - _id: - aggregatable: false - count: 0 - esTypes: - - _id - format: - id: string - isMapped: true - name: _id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _index: - aggregatable: true - count: 0 - esTypes: - - _index - format: - id: string - isMapped: true - name: _index - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _score: - aggregatable: false - count: 0 - format: - id: number - isMapped: true - name: _score - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: number - _source: - aggregatable: false - count: 0 - esTypes: - - _source - format: - id: _source - isMapped: true - name: _source - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: _source - category: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: category - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - category.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: category.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: category - type: string - currency: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: currency - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_birth_date: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: customer_birth_date - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - customer_first_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_first_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_first_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_first_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_first_name - type: string - customer_full_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_full_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_full_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_full_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_full_name - type: string - customer_gender: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_gender - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_id: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_last_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_last_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_last_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_last_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_last_name - type: string - customer_phone: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_phone - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - day_of_week: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: day_of_week - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - day_of_week_i: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: day_of_week_i - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - email: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: email - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - event.dataset: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: event.dataset - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.city_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.city_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.continent_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.continent_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.country_iso_code: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.country_iso_code - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.location: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: geoip.location - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - geoip.region_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.region_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - manufacturer: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: manufacturer - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - manufacturer.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: manufacturer.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: manufacturer - type: string - order_date: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: order_date - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - order_id: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: order_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - products._id: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: products._id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products._id.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products._id.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products._id - type: string - products.base_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.base_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.base_unit_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.base_unit_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.category: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: products.category - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.category.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.category.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.category - type: string - products.created_on: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: products.created_on - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - products.discount_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.discount_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.discount_percentage: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.discount_percentage - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.manufacturer: - aggregatable: false - count: 1 - esTypes: - - text - format: - id: string - isMapped: true - name: products.manufacturer - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.manufacturer.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.manufacturer.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.manufacturer - type: string - products.min_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.min_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.price: - aggregatable: true - count: 1 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.product_id: - aggregatable: true - count: 0 - esTypes: - - long - format: - id: number - isMapped: true - name: products.product_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.product_name: - aggregatable: false - count: 1 - esTypes: - - text - format: - id: string - isMapped: true - name: products.product_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.product_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.product_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.product_name - type: string - products.quantity: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: products.quantity - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.sku: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.sku - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.tax_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.tax_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.taxful_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.taxful_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.taxless_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.taxless_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.unit_discount_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.unit_discount_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - sku: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: sku - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - taxful_total_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.[00]' - isMapped: true - name: taxful_total_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - taxless_total_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: taxless_total_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - total_quantity: - aggregatable: true - count: 1 - esTypes: - - integer - format: - id: number - isMapped: true - name: total_quantity - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - total_unique_products: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: total_unique_products - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - type: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: type - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - user: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: user - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - name: Kibana Sample Data eCommerce - namespaces: - - default - runtimeFieldMap: {} - sourceFilters: [] - timeFieldName: order_date - title: kibana_sample_data_ecommerce - typeMeta: {} - version: WzUsMV0= - Data_views_get_data_views_response: - summary: The get all data views API returns a list of data views. - value: - data_view: - - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - name: Kibana Sample Data eCommerce - namespaces: - - default - title: kibana_sample_data_ecommerce - typeMeta: {} - - id: d3d7af60-4c81-11e8-b3d7-01146121b73d - name: Kibana Sample Data Flights - namespaces: - - default - title: kibana_sample_data_flights - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: Kibana Sample Data Logs - namespaces: - - default - title: kibana_sample_data_logs - Data_views_get_default_data_view_response: - summary: The get default data view API returns the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - Data_views_get_runtime_field_response: - summary: >- - The get runtime field API returns a JSON object that contains - information about the runtime field (`hour_of_day`) and the data view - (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). - value: - data_view: - allowNoIndex: false - fieldAttrs: {} - fieldFormats: - AvgTicketPrice: - id: number - params: - pattern: '$0,0.[00]' - hour_of_day: - id: number - params: - pattern: '00' - fields: - _id: - aggregatable: false - count: 0 - esTypes: - - _id - format: - id: string - isMapped: true - name: _id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _index: - aggregatable: true - count: 0 - esTypes: - - _index - format: - id: string - isMapped: true - name: _index - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _score: - aggregatable: false - count: 0 - format: - id: number - isMapped: true - name: _score - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: number - _source: - aggregatable: false - count: 0 - esTypes: - - _source - format: - id: _source - isMapped: true - name: _source - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: _source - AvgTicketPrice: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - params: - pattern: '$0,0.[00]' - isMapped: true - name: AvgTicketPrice - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - Cancelled: - aggregatable: true - count: 0 - esTypes: - - boolean - format: - id: boolean - isMapped: true - name: Cancelled - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: boolean - Carrier: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Carrier - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - dayOfWeek: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: dayOfWeek - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - Dest: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Dest - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestAirportID: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestAirportID - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestCityName: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestCityName - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestCountry: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestCountry - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestLocation: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: DestLocation - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - DestRegion: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestRegion - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestWeather: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestWeather - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DistanceKilometers: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: DistanceKilometers - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - DistanceMiles: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: DistanceMiles - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - FlightDelay: - aggregatable: true - count: 0 - esTypes: - - boolean - format: - id: boolean - isMapped: true - name: FlightDelay - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: boolean - FlightDelayMin: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: FlightDelayMin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - FlightDelayType: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightDelayType - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightNum: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightNum - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightTimeHour: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightTimeHour - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightTimeMin: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: FlightTimeMin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - hour_of_day: - aggregatable: true - count: 0 - esTypes: - - long - format: - id: number - params: - pattern: '00' - name: hour_of_day - readFromDocValues: false - runtimeField: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - scripted: false - searchable: true - shortDotsEnable: false - type: number - Origin: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Origin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginAirportID: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginAirportID - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginCityName: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginCityName - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginCountry: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginCountry - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginLocation: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: OriginLocation - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - OriginRegion: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginRegion - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginWeather: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginWeather - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - timestamp: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: timestamp - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - id: d3d7af60-4c81-11e8-b3d7-01146121b73d - name: Kibana Sample Data Flights - runtimeFieldMap: - hour_of_day: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - sourceFilters: [] - timeFieldName: timestamp - title: kibana_sample_data_flights - version: WzM2LDJd - fields: - - aggregatable: true - count: 0 - esTypes: - - long - name: hour_of_day - readFromDocValues: false - runtimeField: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - scripted: false - searchable: true - shortDotsEnable: false - type: number - Data_views_preview_swap_data_view_request: - summary: Preview swapping references from data view ID "abcd-efg" to "xyz-123". - value: - fromId: abcd-efg - toId: xyz-123 - Data_views_set_default_data_view_request: - summary: Set the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - force: true - Data_views_swap_data_view_request: - summary: >- - Swap references from data view ID "abcd-efg" to "xyz-123" and remove the - data view that is no longer referenced. - value: - delete: true - fromId: abcd-efg - toId: xyz-123 - Data_views_update_data_view_request: - summary: Update some properties for a data view. - value: - data_view: - allowNoIndex: false - name: Kibana Sample Data eCommerce - timeFieldName: order_date - title: kibana_sample_data_ecommerce - refresh_fields: true - Data_views_update_field_metadata_request: - summary: Update metadata for multiple fields. - value: - fields: - field1: - count: 123 - customLabel: Field 1 label - field2: - customDescription: Field 2 description - customLabel: Field 2 label - Data_views_update_runtime_field_request: - summary: Update an existing runtime field on a data view. - value: - runtimeField: - script: - source: 'emit(doc["bar"].value)' - Machine_learning_APIs_mlSyncExample: - summary: Two anomaly detection jobs required synchronization in this example. - value: - datafeedsAdded: {} - datafeedsRemoved: {} - savedObjectsCreated: - anomaly-detector: - myjob1: - success: true - myjob2: - success: true - savedObjectsDeleted: {} - Serverless_saved_objects_export_objects_request: - summary: Export a specific saved object. - value: - excludeExportDetails: true - includeReferencesDeep: false - objects: - - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 - type: map - Serverless_saved_objects_export_objects_response: - summary: >- - The export objects API response contains a JSON record for each exported - object. - value: - attributes: - description: '' - layerListJSON: >- - [{"id":"0hmz5","alpha":1,"sourceDescriptor":{"type":"EMS_TMS","isAutoSelect":true,"lightModeDefault":"road_map_desaturated"},"visible":true,"style":{},"type":"EMS_VECTOR_TILE","minZoom":0,"maxZoom":24},{"id":"edh66","label":"Total - Requests by - Destination","minZoom":0,"maxZoom":24,"alpha":0.5,"sourceDescriptor":{"type":"EMS_FILE","id":"world_countries","tooltipProperties":["name","iso2"]},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"__kbnjoin__count__673ff994-fc75-4c67-909b-69fcb0e1060e","origin":"join"},"color":"Greys","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"STATIC","options":{"size":10}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR","joins":[{"leftField":"iso2","right":{"type":"ES_TERM_SOURCE","id":"673ff994-fc75-4c67-909b-69fcb0e1060e","indexPatternTitle":"kibana_sample_data_logs","term":"geo.dest","indexPatternRefName":"layer_1_join_0_index_pattern","metrics":[{"type":"count","label":"web - logs - count"}],"applyGlobalQuery":true}}]},{"id":"gaxya","label":"Actual - Requests","minZoom":9,"maxZoom":24,"alpha":1,"sourceDescriptor":{"id":"b7486535-171b-4d3b-bb2e-33c1a0a2854c","type":"ES_SEARCH","geoField":"geo.coordinates","limit":2048,"filterByMapBounds":true,"tooltipProperties":["clientip","timestamp","host","request","response","machine.os","agent","bytes"],"indexPatternRefName":"layer_2_source_index_pattern","applyGlobalQuery":true,"scalingType":"LIMIT"},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"STATIC","options":{"color":"#2200ff"}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":2}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"bytes","origin":"source"},"minSize":1,"maxSize":23,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"},{"id":"tfi3f","label":"Total - Requests and - Bytes","minZoom":0,"maxZoom":9,"alpha":1,"sourceDescriptor":{"type":"ES_GEO_GRID","resolution":"COARSE","id":"8aaa65b5-a4e9-448b-9560-c98cb1c5ac5b","geoField":"geo.coordinates","requestType":"point","metrics":[{"type":"count","label":"web - logs - count"},{"type":"sum","field":"bytes"}],"indexPatternRefName":"layer_3_source_index_pattern","applyGlobalQuery":true},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"color":"Blues","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#cccccc"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"sum_of_bytes","origin":"source"},"minSize":7,"maxSize":25,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelText":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelSize":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"minSize":12,"maxSize":24,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"}] - mapStateJSON: >- - {"zoom":3.64,"center":{"lon":-88.92107,"lat":42.16337},"timeFilters":{"from":"now-7d","to":"now"},"refreshConfig":{"isPaused":true,"interval":0},"query":{"language":"kuery","query":""},"settings":{"autoFitToDataBounds":false}} - title: '[Logs] Total Requests and Bytes' - uiStateJSON: '{"isDarkMode":false}' - coreMigrationVersion: 8.8.0 - created_at: '2023-08-23T20:03:32.204Z' - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 - managed: false - references: - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_1_join_0_index_pattern - type: index-pattern - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_2_source_index_pattern - type: index-pattern - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_3_source_index_pattern - type: index-pattern - type: map - typeMigrationVersion: 8.4.0 - updated_at: '2023-08-23T20:03:32.204Z' - version: WzEzLDFd - Serverless_saved_objects_import_objects_request: - value: - file: file.ndjson - Serverless_saved_objects_import_objects_response: - summary: >- - The import objects API response indicates a successful import and the - objects are created. Since these objects are created as new copies, each - entry in the successResults array includes a destinationId attribute. - value: - success: true - successCount: 1 - successResults: - - destinationId: 82d2760c-468f-49cf-83aa-b9a35b6a8943 - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - managed: false - meta: - icon: indexPatternApp - title: Kibana Sample Data Logs - type: index-pattern - parameters: - Connectors_connector_id: - description: An identifier for the connector. - in: path - name: connectorId - required: true - schema: - example: df770e30-8b8b-11ed-a780-3b746c987a81 - type: string - Connectors_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - Data_views_field_name: - description: The name of the runtime field. - in: path - name: fieldName - required: true - schema: - example: hour_of_day - type: string - Data_views_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - Data_views_view_id: - description: An identifier for the data view. - in: path - name: viewId - required: true - schema: - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f - type: string - Machine_learning_APIs_simulateParam: - description: >- - When true, simulates the synchronization by returning only the list of - actions that would be performed. - example: 'true' - in: query - name: simulate - required: false - schema: - type: boolean - Serverless_saved_objects_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - SLOs_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - SLOs_slo_id: - description: An identifier for the slo. - in: path - name: sloId - required: true - schema: - example: 9c235211-6834-11ea-a78c-6feb38a34414 - type: string - SLOs_space_id: - description: >- - An identifier for the space. If `/s/` and the identifier are omitted - from the path, the default space is used. - in: path - name: spaceId - required: true - schema: - example: default - type: string - responses: - Connectors_401: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - properties: - error: - enum: - - Unauthorized - example: Unauthorized - type: string - message: - type: string - statusCode: - enum: - - 401 - example: 401 - type: integer - title: Unauthorized response - type: object - description: Authorization information is missing or invalid. - Connectors_404: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - properties: - error: - enum: - - Not Found - example: Not Found - type: string - message: - example: >- - Saved object [action/baf33fc0-920c-11ed-b36a-874bd1548a00] not - found - type: string - statusCode: - enum: - - 404 - example: 404 - type: integer - title: Not found response - type: object - description: Object is not found. - schemas: - Connectors_config_properties_bedrock: - description: Defines properties for connectors when type is `.bedrock`. - properties: - apiUrl: - description: The Amazon Bedrock request URL. - type: string - defaultModel: - default: 'anthropic.claude-3-5-sonnet-20240620-v1:0' - description: > - The generative artificial intelligence model for Amazon Bedrock to - use. Current support is for the Anthropic Claude models. - type: string - required: - - apiUrl - title: Connector request properties for an Amazon Bedrock connector - type: object - Connectors_config_properties_cases_webhook: - description: Defines properties for connectors when type is `.cases-webhook`. - type: object - properties: - createCommentJson: - description: > - A JSON payload sent to the create comment URL to create a case - comment. You can use variables to add Kibana Cases data to the - payload. The required variable is `case.comment`. Due to Mustache - template variables (the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated once the Mustache variables have - been placed when the REST method runs. Manually ensure that the JSON - is valid, disregarding the Mustache variables, so the later - validation will pass. - example: '{"body": {{{case.comment}}}}' - type: string - createCommentMethod: - default: put - description: > - The REST API HTTP request method to create a case comment in the - third-party system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - createCommentUrl: - description: > - The REST API URL to create a case comment by ID in the third-party - system. You can use a variable to add the external system ID to the - URL. If you are using the `xpack.actions.allowedHosts setting`, add - the hostname to the allowed hosts. - example: 'https://example.com/issue/{{{external.system.id}}}/comment' - type: string - createIncidentJson: - description: > - A JSON payload sent to the create case URL to create a case. You can - use variables to add case data to the payload. Required variables - are `case.title` and `case.description`. Due to Mustache template - variables (which is the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated after the Mustache variables have - been placed when REST method runs. Manually ensure that the JSON is - valid to avoid future validation errors; disregard Mustache - variables during your review. - example: >- - {"fields": {"summary": {{{case.title}}},"description": - {{{case.description}}},"labels": {{{case.tags}}}}} - type: string - createIncidentMethod: - default: post - description: > - The REST API HTTP request method to create a case in the third-party - system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - createIncidentResponseKey: - description: >- - The JSON key in the create external case response that contains the - case ID. - type: string - createIncidentUrl: - description: > - The REST API URL to create a case in the third-party system. If you - are using the `xpack.actions.allowedHosts` setting, add the hostname - to the allowed hosts. - type: string - getIncidentResponseExternalTitleKey: - description: >- - The JSON key in get external case response that contains the case - title. - type: string - getIncidentUrl: - description: > - The REST API URL to get the case by ID from the third-party system. - If you are using the `xpack.actions.allowedHosts` setting, add the - hostname to the allowed hosts. You can use a variable to add the - external system ID to the URL. Due to Mustache template variables - (the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated after the Mustache variables have - been placed when REST method runs. Manually ensure that the JSON is - valid, disregarding the Mustache variables, so the later validation - will pass. - example: 'https://example.com/issue/{{{external.system.id}}}' - type: string - hasAuth: - default: true - description: >- - If true, a username and password for login type authentication must - be provided. - type: boolean - headers: - description: > - A set of key-value pairs sent as headers with the request URLs for - the create case, update case, get case, and create comment methods. - type: string - updateIncidentJson: - description: > - The JSON payload sent to the update case URL to update the case. You - can use variables to add Kibana Cases data to the payload. Required - variables are `case.title` and `case.description`. Due to Mustache - template variables (which is the text enclosed in triple braces, for - example, `{{{case.title}}}`), the JSON is not validated when you - create the connector. The JSON is validated after the Mustache - variables have been placed when REST method runs. Manually ensure - that the JSON is valid to avoid future validation errors; disregard - Mustache variables during your review. - example: >- - {"fields": {"summary": {{{case.title}}},"description": - {{{case.description}}},"labels": {{{case.tags}}}}} - type: string - updateIncidentMethod: - default: put - description: > - The REST API HTTP request method to update the case in the - third-party system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - updateIncidentUrl: - description: > - The REST API URL to update the case by ID in the third-party system. - You can use a variable to add the external system ID to the URL. If - you are using the `xpack.actions.allowedHosts` setting, add the - hostname to the allowed hosts. - example: 'https://example.com/issue/{{{external.system.ID}}}' - type: string - viewIncidentUrl: - description: > - The URL to view the case in the external system. You can use - variables to add the external system ID or external system title to - the URL. - example: >- - https://testing-jira.atlassian.net/browse/{{{external.system.title}}} - type: string - required: - - createIncidentJson - - createIncidentResponseKey - - createIncidentUrl - - getIncidentResponseExternalTitleKey - - getIncidentUrl - - updateIncidentJson - - updateIncidentUrl - - viewIncidentUrl - title: Connector request properties for Webhook - Case Management connector - Connectors_config_properties_d3security: - description: Defines properties for connectors when type is `.d3security`. - properties: - url: - description: > - The D3 Security API request URL. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - url - title: Connector request properties for a D3 Security connector - type: object - Connectors_config_properties_email: - description: Defines properties for connectors when type is `.email`. - type: object - properties: - clientId: - description: > - The client identifier, which is a part of OAuth 2.0 client - credentials authentication, in GUID format. If `service` is - `exchange_server`, this property is required. - nullable: true - type: string - from: - description: > - The from address for all emails sent by the connector. It must be - specified in `user@host-name` format. - type: string - hasAuth: - default: true - description: > - Specifies whether a user and password are required inside the - secrets configuration. - type: boolean - host: - description: > - The host name of the service provider. If the `service` is - `elastic_cloud` (for Elastic Cloud notifications) or one of - Nodemailer's well-known email service providers, this property is - ignored. If `service` is `other`, this property must be defined. - type: string - oauthTokenUrl: - nullable: true - type: string - port: - description: > - The port to connect to on the service provider. If the `service` is - `elastic_cloud` (for Elastic Cloud notifications) or one of - Nodemailer's well-known email service providers, this property is - ignored. If `service` is `other`, this property must be defined. - type: integer - secure: - description: > - Specifies whether the connection to the service provider will use - TLS. If the `service` is `elastic_cloud` (for Elastic Cloud - notifications) or one of Nodemailer's well-known email service - providers, this property is ignored. - type: boolean - service: - description: | - The name of the email service. - enum: - - elastic_cloud - - exchange_server - - gmail - - other - - outlook365 - - ses - type: string - tenantId: - description: > - The tenant identifier, which is part of OAuth 2.0 client credentials - authentication, in GUID format. If `service` is `exchange_server`, - this property is required. - nullable: true - type: string - required: - - from - title: Connector request properties for an email connector - Connectors_config_properties_gemini: - description: Defines properties for connectors when type is `.gemini`. - properties: - apiUrl: - description: The Google Gemini request URL. - type: string - defaultModel: - default: gemini-1.5-pro-001 - description: >- - The generative artificial intelligence model for Google Gemini to - use. - type: string - gcpProjectID: - description: The Google ProjectID that has Vertex AI endpoint enabled. - type: string - gcpRegion: - description: The GCP region where the Vertex AI endpoint enabled. - type: string - required: - - apiUrl - - gcpRegion - - gcpProjectID - title: Connector request properties for an Google Gemini connector - type: object - Connectors_config_properties_genai: - description: Defines properties for connectors when type is `.gen-ai`. - discriminator: - mapping: - Azure OpenAI: '#/components/schemas/Connectors_config_properties_genai_azure' - OpenAI: '#/components/schemas/Connectors_config_properties_genai_openai' - propertyName: apiProvider - oneOf: - - $ref: '#/components/schemas/Connectors_config_properties_genai_azure' - - $ref: '#/components/schemas/Connectors_config_properties_genai_openai' - title: Connector request properties for an OpenAI connector - Connectors_config_properties_genai_azure: - description: > - Defines properties for connectors when type is `.gen-ai` and the API - provider is `Azure OpenAI'. - properties: - apiProvider: - description: The OpenAI API provider. - enum: - - Azure OpenAI - type: string - apiUrl: - description: The OpenAI API endpoint. - type: string - required: - - apiProvider - - apiUrl - title: >- - Connector request properties for an OpenAI connector that uses Azure - OpenAI - type: object - Connectors_config_properties_genai_openai: - description: > - Defines properties for connectors when type is `.gen-ai` and the API - provider is `OpenAI'. - properties: - apiProvider: - description: The OpenAI API provider. - enum: - - OpenAI - type: string - apiUrl: - description: The OpenAI API endpoint. - type: string - defaultModel: - description: The default model to use for requests. - type: string - required: - - apiProvider - - apiUrl - title: Connector request properties for an OpenAI connector - type: object - Connectors_config_properties_index: - description: Defines properties for connectors when type is `.index`. - type: object - properties: - executionTimeField: - default: null - description: A field that indicates when the document was indexed. - nullable: true - type: string - index: - description: The Elasticsearch index to be written to. - type: string - refresh: - default: false - description: > - The refresh policy for the write request, which affects when changes - are made visible to search. Refer to the refresh setting for - Elasticsearch document APIs. - type: boolean - required: - - index - title: Connector request properties for an index connector - Connectors_config_properties_jira: - description: Defines properties for connectors when type is `.jira`. - type: object - properties: - apiUrl: - description: The Jira instance URL. - type: string - projectKey: - description: The Jira project key. - type: string - required: - - apiUrl - - projectKey - title: Connector request properties for a Jira connector - Connectors_config_properties_opsgenie: - description: Defines properties for connectors when type is `.opsgenie`. - type: object - properties: - apiUrl: - description: > - The Opsgenie URL. For example, `https://api.opsgenie.com` or - `https://api.eu.opsgenie.com`. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - apiUrl - title: Connector request properties for an Opsgenie connector - Connectors_config_properties_pagerduty: - description: Defines properties for connectors when type is `.pagerduty`. - properties: - apiUrl: - description: The PagerDuty event URL. - example: 'https://events.pagerduty.com/v2/enqueue' - nullable: true - type: string - title: Connector request properties for a PagerDuty connector - type: object - Connectors_config_properties_resilient: - description: Defines properties for connectors when type is `.resilient`. - type: object - properties: - apiUrl: - description: The IBM Resilient instance URL. - type: string - orgId: - description: The IBM Resilient organization ID. - type: string - required: - - apiUrl - - orgId - title: Connector request properties for a IBM Resilient connector - Connectors_config_properties_sentinelone: - description: Defines properties for connectors when type is `.sentinelone`. - type: object - properties: - url: - description: > - The SentinelOne tenant URL. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - url - title: Connector request properties for a SentinelOne connector - Connectors_config_properties_servicenow: - description: Defines properties for connectors when type is `.servicenow`. - type: object - properties: - apiUrl: - description: The ServiceNow instance URL. - type: string - clientId: - description: > - The client ID assigned to your OAuth application. This property is - required when `isOAuth` is `true`. - type: string - isOAuth: - default: false - description: > - The type of authentication to use. The default value is false, which - means basic authentication is used instead of open authorization - (OAuth). - type: boolean - jwtKeyId: - description: > - The key identifier assigned to the JWT verifier map of your OAuth - application. This property is required when `isOAuth` is `true`. - type: string - userIdentifierValue: - description: > - The identifier to use for OAuth authentication. This identifier - should be the user field you selected when you created an OAuth JWT - API endpoint for external clients in your ServiceNow instance. For - example, if the selected user field is `Email`, the user identifier - should be the user's email address. This property is required when - `isOAuth` is `true`. - type: string - usesTableApi: - default: true - description: > - Determines whether the connector uses the Table API or the Import - Set API. This property is supported only for ServiceNow ITSM and - ServiceNow SecOps connectors. NOTE: If this property is set to - `false`, the Elastic application should be installed in ServiceNow. - type: boolean - required: - - apiUrl - title: Connector request properties for a ServiceNow ITSM connector - Connectors_config_properties_servicenow_itom: - description: Defines properties for connectors when type is `.servicenow`. - type: object - properties: - apiUrl: - description: The ServiceNow instance URL. - type: string - clientId: - description: > - The client ID assigned to your OAuth application. This property is - required when `isOAuth` is `true`. - type: string - isOAuth: - default: false - description: > - The type of authentication to use. The default value is false, which - means basic authentication is used instead of open authorization - (OAuth). - type: boolean - jwtKeyId: - description: > - The key identifier assigned to the JWT verifier map of your OAuth - application. This property is required when `isOAuth` is `true`. - type: string - userIdentifierValue: - description: > - The identifier to use for OAuth authentication. This identifier - should be the user field you selected when you created an OAuth JWT - API endpoint for external clients in your ServiceNow instance. For - example, if the selected user field is `Email`, the user identifier - should be the user's email address. This property is required when - `isOAuth` is `true`. - type: string - required: - - apiUrl - title: Connector request properties for a ServiceNow ITSM connector - Connectors_config_properties_slack_api: - description: Defines properties for connectors when type is `.slack_api`. - properties: - allowedChannels: - description: A list of valid Slack channels. - items: - maxItems: 25 - type: object - properties: - id: - description: The Slack channel ID. - example: C123ABC456 - minLength: 1 - type: string - name: - description: The Slack channel name. - minLength: 1 - type: string - required: - - id - - name - type: array - title: Connector request properties for a Slack connector - type: object - Connectors_config_properties_swimlane: - description: Defines properties for connectors when type is `.swimlane`. - type: object - properties: - apiUrl: - description: The Swimlane instance URL. - type: string - appId: - description: The Swimlane application ID. - type: string - connectorType: - description: >- - The type of connector. Valid values are `all`, `alerts`, and - `cases`. - enum: - - all - - alerts - - cases - type: string - mappings: - description: The field mapping. - properties: - alertIdConfig: - description: Mapping for the alert ID. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Alert identifier mapping - type: object - caseIdConfig: - description: Mapping for the case ID. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case identifier mapping - type: object - caseNameConfig: - description: Mapping for the case name. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case name mapping - type: object - commentsConfig: - description: Mapping for the case comments. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case comment mapping - type: object - descriptionConfig: - description: Mapping for the case description. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case description mapping - type: object - ruleNameConfig: - description: Mapping for the name of the alert's rule. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Rule name mapping - type: object - severityConfig: - description: Mapping for the severity. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Severity mapping - type: object - title: Connector mappings properties for a Swimlane connector - type: object - required: - - apiUrl - - appId - - connectorType - title: Connector request properties for a Swimlane connector - Connectors_config_properties_tines: - description: Defines properties for connectors when type is `.tines`. - properties: - url: - description: > - The Tines tenant URL. If you are using the - `xpack.actions.allowedHosts` setting, make sure this hostname is - added to the allowed hosts. - type: string - required: - - url - title: Connector request properties for a Tines connector - type: object - Connectors_config_properties_torq: - description: Defines properties for connectors when type is `.torq`. - properties: - webhookIntegrationUrl: - description: The endpoint URL of the Elastic Security integration in Torq. - type: string - required: - - webhookIntegrationUrl - title: Connector request properties for a Torq connector - type: object - Connectors_config_properties_webhook: - description: Defines properties for connectors when type is `.webhook`. - properties: - authType: - description: | - The type of authentication to use: basic, SSL, or none. - enum: - - webhook-authentication-basic - - webhook-authentication-ssl - nullable: true - type: string - ca: - description: > - A base64 encoded version of the certificate authority file that the - connector can trust to sign and validate certificates. This option - is available for all authentication types. - type: string - certType: - description: > - If the `authType` is `webhook-authentication-ssl`, specifies whether - the certificate authentication data is in a CRT and key file format - or a PFX file format. - enum: - - ssl-crt-key - - ssl-pfx - type: string - hasAuth: - description: > - If `true`, a user name and password must be provided for login type - authentication. - type: boolean - headers: - description: A set of key-value pairs sent as headers with the request. - nullable: true - type: object - method: - default: post - description: | - The HTTP request method, either `post` or `put`. - enum: - - post - - put - type: string - url: - description: > - The request URL. If you are using the `xpack.actions.allowedHosts` - setting, add the hostname to the allowed hosts. - type: string - verificationMode: - default: full - description: > - Controls the verification of certificates. Use `full` to validate - that the certificate has an issue date within the `not_before` and - `not_after` dates, chains to a trusted certificate authority (CA), - and has a hostname or IP address that matches the names within the - certificate. Use `certificate` to validate the certificate and - verify that it is signed by a trusted authority; this option does - not check the certificate hostname. Use `none` to skip certificate - validation. - enum: - - certificate - - full - - none - type: string - title: Connector request properties for a Webhook connector - type: object - Connectors_config_properties_xmatters: - description: Defines properties for connectors when type is `.xmatters`. - properties: - configUrl: - description: > - The request URL for the Elastic Alerts trigger in xMatters. It is - applicable only when `usesBasic` is `true`. - nullable: true - type: string - usesBasic: - default: true - description: >- - Specifies whether the connector uses HTTP basic authentication - (`true`) or URL authentication (`false`). - type: boolean - title: Connector request properties for an xMatters connector - type: object - Connectors_connector_response_properties: - description: The properties vary depending on the connector type. - discriminator: - mapping: - .bedrock: >- - #/components/schemas/Connectors_connector_response_properties_bedrock - .cases-webhook: >- - #/components/schemas/Connectors_connector_response_properties_cases_webhook - .d3security: >- - #/components/schemas/Connectors_connector_response_properties_d3security - .email: '#/components/schemas/Connectors_connector_response_properties_email' - .gemini: '#/components/schemas/Connectors_connector_response_properties_gemini' - .gen-ai: '#/components/schemas/Connectors_connector_response_properties_genai' - .index: '#/components/schemas/Connectors_connector_response_properties_index' - .jira: '#/components/schemas/Connectors_connector_response_properties_jira' - .opsgenie: >- - #/components/schemas/Connectors_connector_response_properties_opsgenie - .pagerduty: >- - #/components/schemas/Connectors_connector_response_properties_pagerduty - .resilient: >- - #/components/schemas/Connectors_connector_response_properties_resilient - .sentinelone: >- - #/components/schemas/Connectors_connector_response_properties_sentinelone - .server-log: >- - #/components/schemas/Connectors_connector_response_properties_serverlog - .servicenow: >- - #/components/schemas/Connectors_connector_response_properties_servicenow - .servicenow-itom: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_itom - .servicenow-sir: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_sir - .slack: >- - #/components/schemas/Connectors_connector_response_properties_slack_webhook - .slack_api: >- - #/components/schemas/Connectors_connector_response_properties_slack_api - .swimlane: >- - #/components/schemas/Connectors_connector_response_properties_swimlane - .teams: '#/components/schemas/Connectors_connector_response_properties_teams' - .tines: '#/components/schemas/Connectors_connector_response_properties_tines' - .torq: '#/components/schemas/Connectors_connector_response_properties_torq' - .webhook: >- - #/components/schemas/Connectors_connector_response_properties_webhook - .xmatters: >- - #/components/schemas/Connectors_connector_response_properties_xmatters - propertyName: connector_type_id - oneOf: - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_bedrock - - $ref: '#/components/schemas/Connectors_connector_response_properties_gemini' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_cases_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_d3security - - $ref: '#/components/schemas/Connectors_connector_response_properties_email' - - $ref: '#/components/schemas/Connectors_connector_response_properties_genai' - - $ref: '#/components/schemas/Connectors_connector_response_properties_index' - - $ref: '#/components/schemas/Connectors_connector_response_properties_jira' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_opsgenie - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_pagerduty - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_resilient - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_sentinelone - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_serverlog - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_itom - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_sir - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_slack_api - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_slack_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_swimlane - - $ref: '#/components/schemas/Connectors_connector_response_properties_teams' - - $ref: '#/components/schemas/Connectors_connector_response_properties_tines' - - $ref: '#/components/schemas/Connectors_connector_response_properties_torq' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_xmatters - title: Connector response properties - Connectors_connector_response_properties_bedrock: - title: Connector response properties for an Amazon Bedrock connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - connector_type_id: - description: The type of connector. - enum: - - .bedrock - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - required: - - config - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_cases_webhook: - title: Connector request properties for a Webhook - Case Management connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - connector_type_id: - description: The type of connector. - enum: - - .cases-webhook - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_d3security: - title: Connector response properties for a D3 Security connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - connector_type_id: - description: The type of connector. - enum: - - .d3security - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_email: - title: Connector response properties for an email connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - connector_type_id: - description: The type of connector. - enum: - - .email - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_gemini: - title: Connector response properties for a Google Gemini connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - connector_type_id: - description: The type of connector. - enum: - - .gemini - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_genai: - title: Connector response properties for an OpenAI connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_genai' - connector_type_id: - description: The type of connector. - enum: - - .gen-ai - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_index: - title: Connector response properties for an index connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - connector_type_id: - description: The type of connector. - enum: - - .index - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_jira: - title: Connector response properties for a Jira connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - connector_type_id: - description: The type of connector. - enum: - - .jira - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_opsgenie: - title: Connector response properties for an Opsgenie connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - connector_type_id: - description: The type of connector. - enum: - - .opsgenie - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_pagerduty: - title: Connector response properties for a PagerDuty connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - connector_type_id: - description: The type of connector. - enum: - - .pagerduty - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_resilient: - title: Connector response properties for a IBM Resilient connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - connector_type_id: - description: The type of connector. - enum: - - .resilient - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_sentinelone: - title: Connector response properties for a SentinelOne connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - connector_type_id: - description: The type of connector. - enum: - - .sentinelone - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_serverlog: - title: Connector response properties for a server log connector - type: object - properties: - config: - nullable: true - type: object - connector_type_id: - description: The type of connector. - enum: - - .server-log - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow: - title: Connector response properties for a ServiceNow ITSM connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow_itom: - title: Connector response properties for a ServiceNow ITOM connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-itom - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow_sir: - title: Connector response properties for a ServiceNow SecOps connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-sir - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_slack_api: - title: Connector response properties for a Slack connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - connector_type_id: - description: The type of connector. - enum: - - .slack_api - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_slack_webhook: - title: Connector response properties for a Slack connector - type: object - properties: - connector_type_id: - description: The type of connector. - enum: - - .slack - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_swimlane: - title: Connector response properties for a Swimlane connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - connector_type_id: - description: The type of connector. - enum: - - .swimlane - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_teams: - title: Connector response properties for a Microsoft Teams connector - type: object - properties: - config: - type: object - connector_type_id: - description: The type of connector. - enum: - - .teams - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_tines: - title: Connector response properties for a Tines connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - connector_type_id: - description: The type of connector. - enum: - - .tines - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_torq: - title: Connector response properties for a Torq connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - connector_type_id: - description: The type of connector. - enum: - - .torq - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_webhook: - title: Connector response properties for a Webhook connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - connector_type_id: - description: The type of connector. - enum: - - .webhook - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_xmatters: - title: Connector response properties for an xMatters connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - connector_type_id: - description: The type of connector. - enum: - - .xmatters - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_types: - description: >- - The type of connector. For example, `.email`, `.index`, `.jira`, - `.opsgenie`, or `.server-log`. - enum: - - .bedrock - - .gemini - - .cases-webhook - - .d3security - - .email - - .gen-ai - - .index - - .jira - - .opsgenie - - .pagerduty - - .resilient - - .sentinelone - - .servicenow - - .servicenow-itom - - .servicenow-sir - - .server-log - - .slack - - .slack_api - - .swimlane - - .teams - - .tines - - .torq - - .webhook - - .xmatters - example: .server-log - title: Connector types - type: string - Connectors_create_connector_request: - description: The properties vary depending on the connector type. - discriminator: - mapping: - .bedrock: '#/components/schemas/Connectors_create_connector_request_bedrock' - .cases-webhook: >- - #/components/schemas/Connectors_create_connector_request_cases_webhook - .d3security: '#/components/schemas/Connectors_create_connector_request_d3security' - .email: '#/components/schemas/Connectors_create_connector_request_email' - .gemini: '#/components/schemas/Connectors_create_connector_request_gemini' - .gen-ai: '#/components/schemas/Connectors_create_connector_request_genai' - .index: '#/components/schemas/Connectors_create_connector_request_index' - .jira: '#/components/schemas/Connectors_create_connector_request_jira' - .opsgenie: '#/components/schemas/Connectors_create_connector_request_opsgenie' - .pagerduty: '#/components/schemas/Connectors_create_connector_request_pagerduty' - .resilient: '#/components/schemas/Connectors_create_connector_request_resilient' - .sentinelone: '#/components/schemas/Connectors_create_connector_request_sentinelone' - .server-log: '#/components/schemas/Connectors_create_connector_request_serverlog' - .servicenow: '#/components/schemas/Connectors_create_connector_request_servicenow' - .servicenow-itom: >- - #/components/schemas/Connectors_create_connector_request_servicenow_itom - .servicenow-sir: >- - #/components/schemas/Connectors_create_connector_request_servicenow_sir - .slack: >- - #/components/schemas/Connectors_create_connector_request_slack_webhook - .slack_api: '#/components/schemas/Connectors_create_connector_request_slack_api' - .swimlane: '#/components/schemas/Connectors_create_connector_request_swimlane' - .teams: '#/components/schemas/Connectors_create_connector_request_teams' - .tines: '#/components/schemas/Connectors_create_connector_request_tines' - .torq: '#/components/schemas/Connectors_create_connector_request_torq' - .webhook: '#/components/schemas/Connectors_create_connector_request_webhook' - .xmatters: '#/components/schemas/Connectors_create_connector_request_xmatters' - propertyName: connector_type_id - oneOf: - - $ref: '#/components/schemas/Connectors_create_connector_request_bedrock' - - $ref: '#/components/schemas/Connectors_create_connector_request_gemini' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_cases_webhook - - $ref: '#/components/schemas/Connectors_create_connector_request_d3security' - - $ref: '#/components/schemas/Connectors_create_connector_request_email' - - $ref: '#/components/schemas/Connectors_create_connector_request_genai' - - $ref: '#/components/schemas/Connectors_create_connector_request_index' - - $ref: '#/components/schemas/Connectors_create_connector_request_jira' - - $ref: '#/components/schemas/Connectors_create_connector_request_opsgenie' - - $ref: '#/components/schemas/Connectors_create_connector_request_pagerduty' - - $ref: '#/components/schemas/Connectors_create_connector_request_resilient' - - $ref: '#/components/schemas/Connectors_create_connector_request_sentinelone' - - $ref: '#/components/schemas/Connectors_create_connector_request_serverlog' - - $ref: '#/components/schemas/Connectors_create_connector_request_servicenow' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_servicenow_itom - - $ref: >- - #/components/schemas/Connectors_create_connector_request_servicenow_sir - - $ref: '#/components/schemas/Connectors_create_connector_request_slack_api' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_slack_webhook - - $ref: '#/components/schemas/Connectors_create_connector_request_swimlane' - - $ref: '#/components/schemas/Connectors_create_connector_request_teams' - - $ref: '#/components/schemas/Connectors_create_connector_request_tines' - - $ref: '#/components/schemas/Connectors_create_connector_request_torq' - - $ref: '#/components/schemas/Connectors_create_connector_request_webhook' - - $ref: '#/components/schemas/Connectors_create_connector_request_xmatters' - title: Create connector request body properties - Connectors_create_connector_request_bedrock: - description: >- - The Amazon Bedrock connector uses axios to send a POST request to Amazon - Bedrock. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - connector_type_id: - description: The type of connector. - enum: - - .bedrock - example: .bedrock - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' - required: - - config - - connector_type_id - - name - - secrets - title: Create Amazon Bedrock connector request - type: object - Connectors_create_connector_request_cases_webhook: - description: > - The Webhook - Case Management connector uses axios to send POST, PUT, - and GET requests to a case management RESTful API web service. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - connector_type_id: - description: The type of connector. - enum: - - .cases-webhook - example: .cases-webhook - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' - required: - - config - - connector_type_id - - name - title: Create Webhook - Case Managment connector request - type: object - Connectors_create_connector_request_d3security: - description: > - The connector uses axios to send a POST request to a D3 Security - endpoint. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - connector_type_id: - description: The type of connector. - enum: - - .d3security - example: .d3security - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_d3security' - required: - - config - - connector_type_id - - name - - secrets - title: Create D3 Security connector request - type: object - Connectors_create_connector_request_email: - description: > - The email connector uses the SMTP protocol to send mail messages, using - an integration of Nodemailer. An exception is Microsoft Exchange, which - uses HTTP protocol for sending emails, Send mail. Email message text is - sent as both plain text and html text. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - connector_type_id: - description: The type of connector. - enum: - - .email - example: .email - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_email' - required: - - config - - connector_type_id - - name - - secrets - title: Create email connector request - type: object - Connectors_create_connector_request_gemini: - description: >- - The Google Gemini connector uses axios to send a POST request to Google - Gemini. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - connector_type_id: - description: The type of connector. - enum: - - .gemini - example: .gemini - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_gemini' - required: - - config - - connector_type_id - - name - - secrets - title: Create Google Gemini connector request - type: object - Connectors_create_connector_request_genai: - description: > - The OpenAI connector uses axios to send a POST request to either OpenAI - or Azure OpenAPI. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_genai' - connector_type_id: - description: The type of connector. - enum: - - .gen-ai - example: .gen-ai - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_genai' - required: - - config - - connector_type_id - - name - - secrets - title: Create OpenAI connector request - type: object - Connectors_create_connector_request_index: - description: The index connector indexes a document into Elasticsearch. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - connector_type_id: - description: The type of connector. - enum: - - .index - example: .index - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - required: - - config - - connector_type_id - - name - title: Create index connector request - type: object - Connectors_create_connector_request_jira: - description: The Jira connector uses the REST API v2 to create Jira issues. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - connector_type_id: - description: The type of connector. - enum: - - .jira - example: .jira - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_jira' - required: - - config - - connector_type_id - - name - - secrets - title: Create Jira connector request - type: object - Connectors_create_connector_request_opsgenie: - description: The Opsgenie connector uses the Opsgenie alert API. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - connector_type_id: - description: The type of connector. - enum: - - .opsgenie - example: .opsgenie - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' - required: - - config - - connector_type_id - - name - - secrets - title: Create Opsgenie connector request - type: object - Connectors_create_connector_request_pagerduty: - description: > - The PagerDuty connector uses the v2 Events API to trigger, acknowledge, - and resolve PagerDuty alerts. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - connector_type_id: - description: The type of connector. - enum: - - .pagerduty - example: .pagerduty - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' - required: - - config - - connector_type_id - - name - - secrets - title: Create PagerDuty connector request - type: object - Connectors_create_connector_request_resilient: - description: >- - The IBM Resilient connector uses the RESILIENT REST v2 to create IBM - Resilient incidents. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - connector_type_id: - description: The type of connector. - enum: - - .resilient - example: .resilient - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_resilient' - required: - - config - - connector_type_id - - name - - secrets - title: Create IBM Resilient connector request - type: object - Connectors_create_connector_request_sentinelone: - description: > - The SentinelOne connector communicates with SentinelOne Management - Console via REST API. This functionality is in technical preview and may - be changed or removed in a future release. Elastic will work to fix any - issues, but features in technical preview are not subject to the support - SLA of official GA features. - title: Create SentinelOne connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - connector_type_id: - description: The type of connector. - enum: - - .sentinelone - example: .sentinelone - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' - required: - - config - - connector_type_id - - name - - secrets - x-technical-preview: true - Connectors_create_connector_request_serverlog: - description: This connector writes an entry to the Kibana server log. - properties: - connector_type_id: - description: The type of connector. - enum: - - .server-log - example: .server-log - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - required: - - connector_type_id - - name - title: Create server log connector request - type: object - Connectors_create_connector_request_servicenow: - description: > - The ServiceNow ITSM connector uses the import set API to create - ServiceNow incidents. You can use the connector for rule actions and - cases. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow - example: .servicenow - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow ITSM connector request - type: object - Connectors_create_connector_request_servicenow_itom: - description: > - The ServiceNow ITOM connector uses the event API to create ServiceNow - events. You can use the connector for rule actions. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-itom - example: .servicenow-itom - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow ITOM connector request - type: object - Connectors_create_connector_request_servicenow_sir: - description: > - The ServiceNow SecOps connector uses the import set API to create - ServiceNow security incidents. You can use the connector for rule - actions and cases. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-sir - example: .servicenow-sir - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow SecOps connector request - type: object - Connectors_create_connector_request_slack_api: - description: The Slack connector uses an API method to send Slack messages. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - connector_type_id: - description: The type of connector. - enum: - - .slack_api - example: .slack_api - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' - required: - - connector_type_id - - name - - secrets - title: Create Slack connector request - type: object - Connectors_create_connector_request_slack_webhook: - description: The Slack connector uses Slack Incoming Webhooks. - properties: - connector_type_id: - description: The type of connector. - enum: - - .slack - example: .slack - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' - required: - - connector_type_id - - name - - secrets - title: Create Slack connector request - type: object - Connectors_create_connector_request_swimlane: - description: >- - The Swimlane connector uses the Swimlane REST API to create Swimlane - records. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - connector_type_id: - description: The type of connector. - enum: - - .swimlane - example: .swimlane - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' - required: - - config - - connector_type_id - - name - - secrets - title: Create Swimlane connector request - type: object - Connectors_create_connector_request_teams: - description: The Microsoft Teams connector uses Incoming Webhooks. - properties: - connector_type_id: - description: The type of connector. - enum: - - .teams - example: .teams - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_teams' - required: - - connector_type_id - - name - - secrets - title: Create Microsoft Teams connector request - type: object - Connectors_create_connector_request_tines: - description: > - The Tines connector uses Tines Webhook actions to send events via POST - request. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - connector_type_id: - description: The type of connector. - enum: - - .tines - example: .tines - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_tines' - required: - - config - - connector_type_id - - name - - secrets - title: Create Tines connector request - type: object - Connectors_create_connector_request_torq: - description: > - The Torq connector uses a Torq webhook to trigger workflows with Kibana - actions. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - connector_type_id: - description: The type of connector. - enum: - - .torq - example: .torq - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_torq' - required: - - config - - connector_type_id - - name - - secrets - title: Create Torq connector request - type: object - Connectors_create_connector_request_webhook: - description: > - The Webhook connector uses axios to send a POST or PUT request to a web - service. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - connector_type_id: - description: The type of connector. - enum: - - .webhook - example: .webhook - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_webhook' - required: - - config - - connector_type_id - - name - - secrets - title: Create Webhook connector request - type: object - Connectors_create_connector_request_xmatters: - description: > - The xMatters connector uses the xMatters Workflow for Elastic to send - actionable alerts to on-call xMatters resources. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - connector_type_id: - description: The type of connector. - enum: - - .xmatters - example: .xmatters - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' - required: - - config - - connector_type_id - - name - - secrets - title: Create xMatters connector request - type: object - Connectors_features: - description: | - The feature that uses the connector. - enum: - - alerting - - cases - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - siem - - uptime - type: string - Connectors_is_deprecated: - description: Indicates whether the connector type is deprecated. - example: false - type: boolean - Connectors_is_missing_secrets: - description: >- - Indicates whether secrets are missing for the connector. Secrets - configuration properties vary depending on the connector type. - example: false - type: boolean - Connectors_is_preconfigured: - description: > - Indicates whether it is a preconfigured connector. If true, the `config` - and `is_missing_secrets` properties are omitted from the response. - example: false - type: boolean - Connectors_is_system_action: - description: Indicates whether the connector is used for system actions. - example: false - type: boolean - Connectors_referenced_by_count: - description: > - Indicates the number of saved objects that reference the connector. If - `is_preconfigured` is true, this value is not calculated. This property - is returned only by the get all connectors API. - example: 2 - type: integer - Connectors_secrets_properties_bedrock: - description: Defines secrets for connectors when type is `.bedrock`. - properties: - accessKey: - description: The AWS access key for authentication. - type: string - secret: - description: The AWS secret for authentication. - type: string - required: - - accessKey - - secret - title: Connector secrets properties for an Amazon Bedrock connector - type: object - Connectors_secrets_properties_cases_webhook: - title: Connector secrets properties for Webhook - Case Management connector - type: object - properties: - password: - description: >- - The password for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - user: - description: >- - The username for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - Connectors_secrets_properties_d3security: - description: Defines secrets for connectors when type is `.d3security`. - type: object - properties: - token: - description: The D3 Security token. - type: string - required: - - token - title: Connector secrets properties for a D3 Security connector - Connectors_secrets_properties_email: - description: Defines secrets for connectors when type is `.email`. - properties: - clientSecret: - description: > - The Microsoft Exchange Client secret for OAuth 2.0 client - credentials authentication. It must be URL-encoded. If `service` is - `exchange_server`, this property is required. - type: string - password: - description: > - The password for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - user: - description: > - The username for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - title: Connector secrets properties for an email connector - type: object - Connectors_secrets_properties_gemini: - description: Defines secrets for connectors when type is `.gemini`. - properties: - credentialsJSON: - description: >- - The service account credentials JSON file. The service account - should have Vertex AI user IAM role assigned to it. - type: string - required: - - credentialsJSON - title: Connector secrets properties for a Google Gemini connector - type: object - Connectors_secrets_properties_genai: - description: Defines secrets for connectors when type is `.gen-ai`. - properties: - apiKey: - description: The OpenAI API key. - type: string - title: Connector secrets properties for an OpenAI connector - type: object - Connectors_secrets_properties_jira: - description: Defines secrets for connectors when type is `.jira`. - type: object - properties: - apiToken: - description: The Jira API authentication token for HTTP basic authentication. - type: string - email: - description: The account email for HTTP Basic authentication. - type: string - required: - - apiToken - - email - title: Connector secrets properties for a Jira connector - Connectors_secrets_properties_opsgenie: - description: Defines secrets for connectors when type is `.opsgenie`. - type: object - properties: - apiKey: - description: The Opsgenie API authentication key for HTTP Basic authentication. - type: string - required: - - apiKey - title: Connector secrets properties for an Opsgenie connector - Connectors_secrets_properties_pagerduty: - description: Defines secrets for connectors when type is `.pagerduty`. - properties: - routingKey: - description: > - A 32 character PagerDuty Integration Key for an integration on a - service. - type: string - required: - - routingKey - title: Connector secrets properties for a PagerDuty connector - type: object - Connectors_secrets_properties_resilient: - description: Defines secrets for connectors when type is `.resilient`. - type: object - properties: - apiKeyId: - description: The authentication key ID for HTTP Basic authentication. - type: string - apiKeySecret: - description: The authentication key secret for HTTP Basic authentication. - type: string - required: - - apiKeyId - - apiKeySecret - title: Connector secrets properties for IBM Resilient connector - Connectors_secrets_properties_sentinelone: - description: Defines secrets for connectors when type is `.sentinelone`. - properties: - token: - description: The A SentinelOne API token. - type: string - required: - - token - title: Connector secrets properties for a SentinelOne connector - type: object - Connectors_secrets_properties_servicenow: - description: >- - Defines secrets for connectors when type is `.servicenow`, - `.servicenow-sir`, or `.servicenow-itom`. - properties: - clientSecret: - description: >- - The client secret assigned to your OAuth application. This property - is required when `isOAuth` is `true`. - type: string - password: - description: >- - The password for HTTP basic authentication. This property is - required when `isOAuth` is `false`. - type: string - privateKey: - description: >- - The RSA private key that you created for use in ServiceNow. This - property is required when `isOAuth` is `true`. - type: string - privateKeyPassword: - description: >- - The password for the RSA private key. This property is required when - `isOAuth` is `true` and you set a password on your private key. - type: string - username: - description: >- - The username for HTTP basic authentication. This property is - required when `isOAuth` is `false`. - type: string - title: >- - Connector secrets properties for ServiceNow ITOM, ServiceNow ITSM, and - ServiceNow SecOps connectors - type: object - Connectors_secrets_properties_slack_api: - description: Defines secrets for connectors when type is `.slack`. - type: object - properties: - token: - description: Slack bot user OAuth token. - type: string - required: - - token - title: Connector secrets properties for a Web API Slack connector - Connectors_secrets_properties_slack_webhook: - description: Defines secrets for connectors when type is `.slack`. - type: object - properties: - webhookUrl: - description: Slack webhook url. - type: string - required: - - webhookUrl - title: Connector secrets properties for a Webhook Slack connector - Connectors_secrets_properties_swimlane: - description: Defines secrets for connectors when type is `.swimlane`. - properties: - apiToken: - description: Swimlane API authentication token. - type: string - title: Connector secrets properties for a Swimlane connector - type: object - Connectors_secrets_properties_teams: - description: Defines secrets for connectors when type is `.teams`. - properties: - webhookUrl: - description: > - The URL of the incoming webhook. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - webhookUrl - title: Connector secrets properties for a Microsoft Teams connector - type: object - Connectors_secrets_properties_tines: - description: Defines secrets for connectors when type is `.tines`. - properties: - email: - description: The email used to sign in to Tines. - type: string - token: - description: The Tines API token. - type: string - required: - - email - - token - title: Connector secrets properties for a Tines connector - type: object - Connectors_secrets_properties_torq: - description: Defines secrets for connectors when type is `.torq`. - properties: - token: - description: The secret of the webhook authentication header. - type: string - required: - - token - title: Connector secrets properties for a Torq connector - type: object - Connectors_secrets_properties_webhook: - description: Defines secrets for connectors when type is `.webhook`. - properties: - crt: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-crt-key`, it is a base64 encoded version of the CRT or CERT - file. - type: string - key: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-crt-key`, it is a base64 encoded version of the KEY file. - type: string - password: - description: > - The password for HTTP basic authentication or the passphrase for the - SSL certificate files. If `hasAuth` is set to `true` and `authType` - is `webhook-authentication-basic`, this property is required. - type: string - pfx: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-pfx`, it is a base64 encoded version of the PFX or P12 file. - type: string - user: - description: > - The username for HTTP basic authentication. If `hasAuth` is set to - `true` and `authType` is `webhook-authentication-basic`, this - property is required. - type: string - title: Connector secrets properties for a Webhook connector - type: object - Connectors_secrets_properties_xmatters: - description: Defines secrets for connectors when type is `.xmatters`. - properties: - password: - description: > - A user name for HTTP basic authentication. It is applicable only - when `usesBasic` is `true`. - type: string - secretsUrl: - description: > - The request URL for the Elastic Alerts trigger in xMatters with the - API key included in the URL. It is applicable only when `usesBasic` - is `false`. - type: string - user: - description: > - A password for HTTP basic authentication. It is applicable only when - `usesBasic` is `true`. - type: string - title: Connector secrets properties for an xMatters connector - type: object - Connectors_update_connector_request: - description: The properties vary depending on the connector type. - oneOf: - - $ref: '#/components/schemas/Connectors_update_connector_request_bedrock' - - $ref: '#/components/schemas/Connectors_update_connector_request_gemini' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_cases_webhook - - $ref: '#/components/schemas/Connectors_update_connector_request_d3security' - - $ref: '#/components/schemas/Connectors_update_connector_request_email' - - $ref: '#/components/schemas/Connectors_create_connector_request_genai' - - $ref: '#/components/schemas/Connectors_update_connector_request_index' - - $ref: '#/components/schemas/Connectors_update_connector_request_jira' - - $ref: '#/components/schemas/Connectors_update_connector_request_opsgenie' - - $ref: '#/components/schemas/Connectors_update_connector_request_pagerduty' - - $ref: '#/components/schemas/Connectors_update_connector_request_resilient' - - $ref: '#/components/schemas/Connectors_update_connector_request_sentinelone' - - $ref: '#/components/schemas/Connectors_update_connector_request_serverlog' - - $ref: '#/components/schemas/Connectors_update_connector_request_servicenow' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_servicenow_itom - - $ref: '#/components/schemas/Connectors_update_connector_request_slack_api' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_slack_webhook - - $ref: '#/components/schemas/Connectors_update_connector_request_swimlane' - - $ref: '#/components/schemas/Connectors_update_connector_request_teams' - - $ref: '#/components/schemas/Connectors_update_connector_request_tines' - - $ref: '#/components/schemas/Connectors_update_connector_request_torq' - - $ref: '#/components/schemas/Connectors_update_connector_request_webhook' - - $ref: '#/components/schemas/Connectors_update_connector_request_xmatters' - title: Update connector request body properties - Connectors_update_connector_request_bedrock: - title: Update Amazon Bedrock connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' - required: - - config - - name - Connectors_update_connector_request_cases_webhook: - title: Update Webhook - Case Managment connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' - required: - - config - - name - Connectors_update_connector_request_d3security: - title: Update D3 Security connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_d3security' - required: - - config - - name - - secrets - Connectors_update_connector_request_email: - title: Update email connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_email' - required: - - config - - name - Connectors_update_connector_request_gemini: - title: Update Google Gemini connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_gemini' - required: - - config - - name - Connectors_update_connector_request_index: - title: Update index connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - name: - description: The display name for the connector. - type: string - required: - - config - - name - Connectors_update_connector_request_jira: - title: Update Jira connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_jira' - required: - - config - - name - - secrets - Connectors_update_connector_request_opsgenie: - title: Update Opsgenie connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' - required: - - config - - name - - secrets - Connectors_update_connector_request_pagerduty: - title: Update PagerDuty connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' - required: - - config - - name - - secrets - Connectors_update_connector_request_resilient: - title: Update IBM Resilient connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_resilient' - required: - - config - - name - - secrets - Connectors_update_connector_request_sentinelone: - title: Update SentinelOne connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' - required: - - config - - name - - secrets - Connectors_update_connector_request_serverlog: - title: Update server log connector request - type: object - properties: - name: - description: The display name for the connector. - type: string - required: - - name - Connectors_update_connector_request_servicenow: - title: Update ServiceNow ITSM connector or ServiceNow SecOps request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - name - - secrets - Connectors_update_connector_request_servicenow_itom: - title: Create ServiceNow ITOM connector request - type: object - properties: + - slo +components: + examples: + Connectors_create_email_connector_request: + summary: Create an email connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - name: - description: The display name for the connector. - type: string + from: tester@example.com + hasAuth: true + host: 'https://example.com' + port: 1025 + secure: false + service: other + connector_type_id: .email + name: email-connector-1 secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - name - - secrets - Connectors_update_connector_request_slack_api: - title: Update Slack connector request - type: object - properties: + password: password + user: username + Connectors_create_email_connector_response: + summary: A new email connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' - required: - - name - - secrets - Connectors_update_connector_request_slack_webhook: - title: Update Slack connector request - type: object - properties: - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' - required: - - name - - secrets - Connectors_update_connector_request_swimlane: - title: Update Swimlane connector request - type: object - properties: + clientId: null + from: tester@example.com + hasAuth: true + host: 'https://example.com' + oauthTokenUrl: null + port: 1025 + secure: false + service: other + tenantId: null + connector_type_id: .email + id: 90a82c60-478f-11ee-a343-f98a117c727f + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: email-connector-1 + Connectors_create_index_connector_request: + summary: Create an index connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' - required: - - config - - name - - secrets - Connectors_update_connector_request_teams: - title: Update Microsoft Teams connector request - type: object - properties: - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_teams' - required: - - name - - secrets - Connectors_update_connector_request_tines: - title: Update Tines connector request - type: object - properties: + index: test-index + connector_type_id: .index + name: my-connector + Connectors_create_index_connector_response: + summary: A new index connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_tines' - required: - - config - - name - - secrets - Connectors_update_connector_request_torq: - title: Update Torq connector request - type: object - properties: + executionTimeField: null + index: test-index + refresh: false + connector_type_id: .index + id: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-connector + Connectors_create_webhook_connector_request: + summary: Create a webhook connector with SSL authentication. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - name: - description: The display name for the connector. - type: string + authType: webhook-authentication-ssl + certType: ssl-crt-key + method: post + url: 'https://example.com' + connector_type_id: .webhook + name: my-webhook-connector secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_torq' - required: - - config - - name - - secrets - Connectors_update_connector_request_webhook: - title: Update Webhook connector request - type: object - properties: + crt: QmFnIEF0dH... + key: LS0tLS1CRUdJ... + password: my-passphrase + Connectors_create_webhook_connector_response: + summary: A new webhook connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_webhook' - required: - - config - - name - - secrets - Connectors_update_connector_request_xmatters: - title: Update xMatters connector request - type: object - properties: + authType: webhook-authentication-ssl + certType: ssl-crt-key + hasAuth: true + headers: null + method: post + url: 'https://example.com' + verificationMode: full + connector_type_id: .webhook + id: 900eb010-3b9d-11ee-a642-8ffbb94e38bd + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-webhook-connector + Connectors_create_xmatters_connector_request: + summary: Create an xMatters connector with URL authentication. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - name: - description: The display name for the connector. - type: string + usesBasic: false + connector_type_id: .xmatters + name: my-xmatters-connector secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' - required: - - config - - name - - secrets - Data_views_400_response: - title: Bad request - type: object - properties: - error: - example: Bad Request - type: string - message: - type: string - statusCode: - example: 400 - type: number - required: - - statusCode - - error - - message - Data_views_404_response: - type: object - properties: - error: - enum: - - Not Found - example: Not Found - type: string - message: - example: >- - Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] - not found - type: string - statusCode: - enum: - - 404 - example: 404 - type: integer - Data_views_allownoindex: - description: Allows the data view saved object to exist before the data is available. - type: boolean - Data_views_create_data_view_request_object: - title: Create data view request - type: object - properties: + secretsUrl: 'https://example.com?apiKey=xxxxx' + Connectors_create_xmatters_connector_response: + summary: A new xMatters connector. + value: + config: + configUrl: null + usesBasic: false + connector_type_id: .xmatters + id: 4d2d8da0-4d1f-11ee-9367-577408be4681 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-xmatters-connector + Connectors_get_connector_response: + summary: Get connector details. + value: + config: {} + connector_type_id: .server-log + id: df770e30-8b8b-11ed-a780-3b746c987a81 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my_server_log_connector + Connectors_get_connector_types_generativeai_response: + summary: A list of connector types for the `generativeAI` feature. + value: + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .gen-ai + is_system_action_type: false + minimum_license_required: enterprise + name: OpenAI + supported_feature_ids: + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .bedrock + is_system_action_type: false + minimum_license_required: enterprise + name: AWS Bedrock + supported_feature_ids: + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .gemini + is_system_action_type: false + minimum_license_required: enterprise + name: Google Gemini + supported_feature_ids: + - generativeAIForSecurity + Connectors_get_connectors_response: + summary: A list of connectors + value: + - connector_type_id: .email + id: preconfigured-email-connector + is_deprecated: false + is_preconfigured: true + is_system_action: false + name: my-preconfigured-email-notification + referenced_by_count: 0 + - config: + executionTimeField: null + index: test-index + refresh: false + connector_type_id: .index + id: e07d0c80-8b8b-11ed-a780-3b746c987a81 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-index-connector + referenced_by_count: 2 + Connectors_update_index_connector_request: + summary: Update an index connector. + value: + config: + index: updated-index + name: updated-connector + Data_views_create_data_view_request: + summary: Create a data view with runtime fields. + value: + data_view: + name: My Logstash data view + runtimeFieldMap: + runtime_shape_name: + script: + source: 'emit(doc[''shape_name''].value)' + type: keyword + title: logstash-* + Data_views_create_runtime_field_request: + summary: Create a runtime field. + value: + name: runtimeFoo + runtimeField: + script: + source: 'emit(doc["foo"].value)' + type: long + Data_views_get_data_view_response: + summary: >- + The get data view API returns a JSON object that contains information + about the data view. + value: + data_view: + allowNoIndex: false + fieldAttrs: + products.manufacturer: + count: 1 + products.price: + count: 1 + products.product_name: + count: 1 + total_quantity: + count: 1 + fieldFormats: + products.base_price: + id: number + params: + pattern: '$0,0.00' + products.base_unit_price: + id: number + params: + pattern: '$0,0.00' + products.min_price: + id: number + params: + pattern: '$0,0.00' + products.price: + id: number + params: + pattern: '$0,0.00' + products.taxful_price: + id: number + params: + pattern: '$0,0.00' + products.taxless_price: + id: number + params: + pattern: '$0,0.00' + taxful_total_price: + id: number + params: + pattern: '$0,0.[00]' + taxless_total_price: + id: number + params: + pattern: '$0,0.00' + fields: + _id: + aggregatable: false + count: 0 + esTypes: + - _id + format: + id: string + isMapped: true + name: _id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _index: + aggregatable: true + count: 0 + esTypes: + - _index + format: + id: string + isMapped: true + name: _index + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _score: + aggregatable: false + count: 0 + format: + id: number + isMapped: true + name: _score + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: number + _source: + aggregatable: false + count: 0 + esTypes: + - _source + format: + id: _source + isMapped: true + name: _source + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: _source + category: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: category + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + category.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: category.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: category + type: string + currency: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: currency + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_birth_date: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: customer_birth_date + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + customer_first_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_first_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_first_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_first_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_first_name + type: string + customer_full_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_full_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_full_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_full_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_full_name + type: string + customer_gender: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_gender + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_id: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_last_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_last_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_last_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_last_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_last_name + type: string + customer_phone: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_phone + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + day_of_week: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: day_of_week + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + day_of_week_i: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: day_of_week_i + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + email: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: email + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + event.dataset: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: event.dataset + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.city_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.city_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.continent_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.continent_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.country_iso_code: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.country_iso_code + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.location: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: geoip.location + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + geoip.region_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.region_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + manufacturer: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: manufacturer + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + manufacturer.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: manufacturer.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: manufacturer + type: string + order_date: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: order_date + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + order_id: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: order_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + products._id: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: products._id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products._id.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products._id.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products._id + type: string + products.base_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.base_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.base_unit_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.base_unit_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.category: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: products.category + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.category.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.category.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.category + type: string + products.created_on: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: products.created_on + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + products.discount_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.discount_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.discount_percentage: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.discount_percentage + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.manufacturer: + aggregatable: false + count: 1 + esTypes: + - text + format: + id: string + isMapped: true + name: products.manufacturer + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.manufacturer.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.manufacturer.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.manufacturer + type: string + products.min_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.min_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.price: + aggregatable: true + count: 1 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.product_id: + aggregatable: true + count: 0 + esTypes: + - long + format: + id: number + isMapped: true + name: products.product_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.product_name: + aggregatable: false + count: 1 + esTypes: + - text + format: + id: string + isMapped: true + name: products.product_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.product_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.product_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.product_name + type: string + products.quantity: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: products.quantity + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.sku: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.sku + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.tax_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.tax_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.taxful_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.taxful_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.taxless_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.taxless_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.unit_discount_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.unit_discount_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + sku: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: sku + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + taxful_total_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.[00]' + isMapped: true + name: taxful_total_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + taxless_total_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: taxless_total_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + total_quantity: + aggregatable: true + count: 1 + esTypes: + - integer + format: + id: number + isMapped: true + name: total_quantity + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + total_unique_products: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: total_unique_products + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + type: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: type + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + user: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: user + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: Kibana Sample Data eCommerce + namespaces: + - default + runtimeFieldMap: {} + sourceFilters: [] + timeFieldName: order_date + title: kibana_sample_data_ecommerce + typeMeta: {} + version: WzUsMV0= + Data_views_get_data_views_response: + summary: The get all data views API returns a list of data views. + value: data_view: - description: The data view object. - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldAttrs: - additionalProperties: - $ref: '#/components/schemas/Data_views_fieldattrs' - type: object - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - id: + - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: Kibana Sample Data eCommerce + namespaces: + - default + title: kibana_sample_data_ecommerce + typeMeta: {} + - id: d3d7af60-4c81-11e8-b3d7-01146121b73d + name: Kibana Sample Data Flights + namespaces: + - default + title: kibana_sample_data_flights + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: Kibana Sample Data Logs + namespaces: + - default + title: kibana_sample_data_logs + Data_views_get_default_data_view_response: + summary: The get default data view API returns the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + Data_views_get_runtime_field_response: + summary: >- + The get runtime field API returns a JSON object that contains + information about the runtime field (`hour_of_day`) and the data view + (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). + value: + data_view: + allowNoIndex: false + fieldAttrs: {} + fieldFormats: + AvgTicketPrice: + id: number + params: + pattern: '$0,0.[00]' + hour_of_day: + id: number + params: + pattern: '00' + fields: + _id: + aggregatable: false + count: 0 + esTypes: + - _id + format: + id: string + isMapped: true + name: _id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _index: + aggregatable: true + count: 0 + esTypes: + - _index + format: + id: string + isMapped: true + name: _index + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false type: string - name: - description: The data view name. + _score: + aggregatable: false + count: 0 + format: + id: number + isMapped: true + name: _score + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: number + _source: + aggregatable: false + count: 0 + esTypes: + - _source + format: + id: _source + isMapped: true + name: _source + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: _source + AvgTicketPrice: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + params: + pattern: '$0,0.[00]' + isMapped: true + name: AvgTicketPrice + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + Cancelled: + aggregatable: true + count: 0 + esTypes: + - boolean + format: + id: boolean + isMapped: true + name: Cancelled + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: boolean + Carrier: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Carrier + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - namespaces: - $ref: '#/components/schemas/Data_views_namespaces' - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - type: - $ref: '#/components/schemas/Data_views_type' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta' - version: + dayOfWeek: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: dayOfWeek + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + Dest: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Dest + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - title - override: - default: false - description: >- - Override an existing data view if a data view with the provided - title already exists. - type: boolean - required: - - data_view - Data_views_data_view_response_object: - title: Data view response properties - type: object - properties: - data_view: - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldAttrs: - additionalProperties: - $ref: '#/components/schemas/Data_views_fieldattrs' - type: object - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - id: - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + DestAirportID: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestAirportID + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - name: - description: The data view name. + DestCityName: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestCityName + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - namespaces: - $ref: '#/components/schemas/Data_views_namespaces' - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta_response' - version: - example: WzQ2LDJd + DestCountry: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestCountry + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - Data_views_fieldattrs: - description: A map of field attributes by field name. - type: object - properties: - count: - description: Popularity count for the field. - type: integer - customDescription: - description: Custom description for the field. - maxLength: 300 - type: string - customLabel: - description: Custom label for the field. - type: string - Data_views_fieldformats: - description: A map of field formats by field name. - type: object - Data_views_namespaces: - description: >- - An array of space identifiers for sharing the data view between multiple - spaces. - items: - default: default - type: string - type: array - Data_views_runtimefieldmap: - description: A map of runtime field definitions by field name. - type: object - properties: - script: - type: object - properties: - source: - description: Script for the runtime field. + DestLocation: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: DestLocation + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + DestRegion: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestRegion + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - type: - description: Mapping type of the runtime field. - type: string - required: - - script - - type - Data_views_sourcefilters: - description: The array of field names you want to filter out in Discover. - items: - type: object - properties: - value: - type: string - required: - - value - type: array - Data_views_swap_data_view_request_object: - title: Data view reference swap request - type: object - properties: - delete: - description: Deletes referenced saved object if all references are removed. - type: boolean - forId: - description: Limit the affected saved objects to one or more by identifier. - oneOf: - - type: string - - items: - type: string - type: array - forType: - description: Limit the affected saved objects by type. - type: string - fromId: - description: The saved object reference to change. - type: string - fromType: - description: > - Specify the type of the saved object reference to alter. The default - value is `index-pattern` for data views. - type: string - toId: - description: New saved object reference value to replace the old value. - type: string - required: - - fromId - - toId - Data_views_timefieldname: - description: 'The timestamp field name, which you use for time-based data views.' - type: string - Data_views_title: - description: >- - Comma-separated list of data streams, indices, and aliases that you want - to search. Supports wildcards (`*`). - type: string - Data_views_type: - description: 'When set to `rollup`, identifies the rollup data views.' - type: string - Data_views_typemeta: - description: >- - When you use rollup indices, contains the field list for the rollup data - view API endpoints. - type: object - properties: - aggs: - description: A map of rollup restrictions by aggregation type and field name. - type: object - params: - description: Properties for retrieving rollup fields. - type: object - required: - - aggs - - params - Data_views_typemeta_response: - description: >- - When you use rollup indices, contains the field list for the rollup data - view API endpoints. - nullable: true - type: object - properties: - aggs: - description: A map of rollup restrictions by aggregation type and field name. - type: object - params: - description: Properties for retrieving rollup fields. - type: object - Data_views_update_data_view_request_object: - title: Update data view request - type: object - properties: - data_view: - description: > - The data view properties you want to update. Only the specified - properties are updated in the data view. Unspecified fields stay as - they are persisted. - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - name: + DestWeather: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestWeather + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - type: - $ref: '#/components/schemas/Data_views_type' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta' - refresh_fields: - default: false - description: Reloads the data view fields after the data view is updated. - type: boolean - required: - - data_view - Kibana_HTTP_APIs_core_status_redactedResponse: - additionalProperties: false - description: A minimal representation of Kibana's operational status. - type: object - properties: - status: - additionalProperties: false - type: object - properties: - overall: - additionalProperties: false - type: object - properties: - level: - description: Service status levels as human and machine readable values. - enum: - - available - - degraded - - unavailable - - critical - type: string - required: - - level - required: - - overall - required: - - status - Kibana_HTTP_APIs_core_status_response: - additionalProperties: false - description: >- - Kibana's operational status as well as a detailed breakdown of plugin - statuses indication of various loads (like event loop utilization and - network traffic) at time of request. - type: object - properties: - metrics: - additionalProperties: false - description: Metric groups collected by Kibana. - type: object - properties: - collection_interval_in_millis: - description: The interval at which metrics should be collected. + DistanceKilometers: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: DistanceKilometers + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: number - elasticsearch_client: - additionalProperties: false - description: Current network metrics of Kibana's Elasticsearch client. - type: object - properties: - totalActiveSockets: - description: Count of network sockets currently in use. - type: number - totalIdleSockets: - description: Count of network sockets currently idle. - type: number - totalQueuedRequests: - description: Count of requests not yet assigned to sockets. - type: number - required: - - totalActiveSockets - - totalIdleSockets - - totalQueuedRequests - last_updated: - description: The time metrics were collected. + DistanceMiles: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: DistanceMiles + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + FlightDelay: + aggregatable: true + count: 0 + esTypes: + - boolean + format: + id: boolean + isMapped: true + name: FlightDelay + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: boolean + FlightDelayMin: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: FlightDelayMin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + FlightDelayType: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightDelayType + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - elasticsearch_client - - last_updated - - collection_interval_in_millis - name: - description: Kibana instance name. - type: string - status: - additionalProperties: false - type: object - properties: - core: - additionalProperties: false - description: Statuses of core Kibana services. - type: object - properties: - elasticsearch: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: >- - An unstructured set of extra metadata about this - service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - savedObjects: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: >- - An unstructured set of extra metadata about this - service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - required: - - elasticsearch - - savedObjects - overall: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: Service status levels as human and machine readable values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: An unstructured set of extra metadata about this service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - plugins: - additionalProperties: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: An unstructured set of extra metadata about this service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - description: A dynamic mapping of plugin ID to plugin status. - type: object - required: - - overall - - core - - plugins - uuid: - description: >- - Unique, generated Kibana instance UUID. This UUID should persist - even if the Kibana process restarts. - type: string - version: - additionalProperties: false - type: object - properties: - build_date: - description: The date and time of this build. + FlightNum: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightNum + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + FlightTimeHour: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightTimeHour + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + FlightTimeMin: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: FlightTimeMin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + hour_of_day: + aggregatable: true + count: 0 + esTypes: + - long + format: + id: number + params: + pattern: '00' + name: hour_of_day + readFromDocValues: false + runtimeField: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + scripted: false + searchable: true + shortDotsEnable: false + type: number + Origin: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Origin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_flavor: - description: >- - The build flavour determines configuration and behavior of - Kibana. On premise users will almost always run the - "traditional" flavour, while other flavours are reserved for - Elastic-specific use cases. - enum: - - serverless - - traditional + OriginAirportID: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginAirportID + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_hash: - description: >- - A unique hash value representing the git commit of this Kibana - build. + OriginCityName: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginCityName + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_number: - description: >- - A monotonically increasing number, each subsequent build will - have a higher number. - type: number - build_snapshot: - description: Whether this build is a snapshot build. - type: boolean - number: - description: A semantic version number. + OriginCountry: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginCountry + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - number - - build_hash - - build_number - - build_snapshot - - build_flavor - - build_date - required: - - name - - uuid - - version - - status - - metrics - Machine_learning_APIs_mlSync200Response: - properties: - datafeedsAdded: - additionalProperties: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' - description: >- - If a saved object for an anomaly detection job is missing a datafeed - identifier, it is added when you run the sync machine learning saved - objects API. - type: object - datafeedsRemoved: - additionalProperties: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' - description: >- - If a saved object for an anomaly detection job references a datafeed - that no longer exists, it is deleted when you run the sync machine - learning saved objects API. - type: object - savedObjectsCreated: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsCreated - savedObjectsDeleted: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted - title: Successful sync API response - type: object - Machine_learning_APIs_mlSync4xxResponse: - properties: - error: - example: Unauthorized - type: string - message: - type: string - statusCode: - example: 401 - type: integer - title: Unsuccessful sync API response - type: object - Machine_learning_APIs_mlSyncResponseAnomalyDetectors: - description: >- - The sync machine learning saved objects API response contains this - object when there are anomaly detection jobs affected by the - synchronization. There is an object for each relevant job, which - contains the synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for anomaly detection jobs - type: object - Machine_learning_APIs_mlSyncResponseDatafeeds: - description: >- - The sync machine learning saved objects API response contains this - object when there are datafeeds affected by the synchronization. There - is an object for each relevant datafeed, which contains the - synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for datafeeds - type: object - Machine_learning_APIs_mlSyncResponseDataFrameAnalytics: - description: >- - The sync machine learning saved objects API response contains this - object when there are data frame analytics jobs affected by the - synchronization. There is an object for each relevant job, which - contains the synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for data frame analytics jobs - type: object - Machine_learning_APIs_mlSyncResponseSavedObjectsCreated: - description: >- - If saved objects are missing for machine learning jobs or trained - models, they are created when you run the sync machine learning saved - objects API. - properties: - anomaly-detector: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors - description: >- - If saved objects are missing for anomaly detection jobs, they are - created. - type: object - data-frame-analytics: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics - description: >- - If saved objects are missing for data frame analytics jobs, they are - created. - type: object - trained-model: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels - description: 'If saved objects are missing for trained models, they are created.' - type: object - title: Sync API response for created saved objects - type: object - Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted: - description: >- - If saved objects exist for machine learning jobs or trained models that - no longer exist, they are deleted when you run the sync machine learning - saved objects API. - properties: - anomaly-detector: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors - description: >- - If there are saved objects exist for nonexistent anomaly detection - jobs, they are deleted. - type: object - data-frame-analytics: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics - description: >- - If there are saved objects exist for nonexistent data frame - analytics jobs, they are deleted. - type: object - trained-model: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels - description: >- - If there are saved objects exist for nonexistent trained models, - they are deleted. - type: object - title: Sync API response for deleted saved objects - type: object - Machine_learning_APIs_mlSyncResponseSuccess: - description: The success or failure of the synchronization. - type: boolean - Machine_learning_APIs_mlSyncResponseTrainedModels: + OriginLocation: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: OriginLocation + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + OriginRegion: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginRegion + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + OriginWeather: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginWeather + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + timestamp: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: timestamp + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + id: d3d7af60-4c81-11e8-b3d7-01146121b73d + name: Kibana Sample Data Flights + runtimeFieldMap: + hour_of_day: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + sourceFilters: [] + timeFieldName: timestamp + title: kibana_sample_data_flights + version: WzM2LDJd + fields: + - aggregatable: true + count: 0 + esTypes: + - long + name: hour_of_day + readFromDocValues: false + runtimeField: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + scripted: false + searchable: true + shortDotsEnable: false + type: number + Data_views_preview_swap_data_view_request: + summary: Preview swapping references from data view ID "abcd-efg" to "xyz-123". + value: + fromId: abcd-efg + toId: xyz-123 + Data_views_set_default_data_view_request: + summary: Set the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + force: true + Data_views_swap_data_view_request: + summary: >- + Swap references from data view ID "abcd-efg" to "xyz-123" and remove the + data view that is no longer referenced. + value: + delete: true + fromId: abcd-efg + toId: xyz-123 + Data_views_update_data_view_request: + summary: Update some properties for a data view. + value: + data_view: + allowNoIndex: false + name: Kibana Sample Data eCommerce + timeFieldName: order_date + title: kibana_sample_data_ecommerce + refresh_fields: true + Data_views_update_field_metadata_request: + summary: Update metadata for multiple fields. + value: + fields: + field1: + count: 123 + customLabel: Field 1 label + field2: + customDescription: Field 2 description + customLabel: Field 2 label + Data_views_update_runtime_field_request: + summary: Update an existing runtime field on a data view. + value: + runtimeField: + script: + source: 'emit(doc["bar"].value)' + Machine_learning_APIs_mlSyncExample: + summary: Two anomaly detection jobs required synchronization in this example. + value: + datafeedsAdded: {} + datafeedsRemoved: {} + savedObjectsCreated: + anomaly-detector: + myjob1: + success: true + myjob2: + success: true + savedObjectsDeleted: {} + Serverless_saved_objects_export_objects_request: + summary: Export a specific saved object. + value: + excludeExportDetails: true + includeReferencesDeep: false + objects: + - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 + type: map + Serverless_saved_objects_export_objects_response: + summary: >- + The export objects API response contains a JSON record for each exported + object. + value: + attributes: + description: '' + layerListJSON: >- + [{"id":"0hmz5","alpha":1,"sourceDescriptor":{"type":"EMS_TMS","isAutoSelect":true,"lightModeDefault":"road_map_desaturated"},"visible":true,"style":{},"type":"EMS_VECTOR_TILE","minZoom":0,"maxZoom":24},{"id":"edh66","label":"Total + Requests by + Destination","minZoom":0,"maxZoom":24,"alpha":0.5,"sourceDescriptor":{"type":"EMS_FILE","id":"world_countries","tooltipProperties":["name","iso2"]},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"__kbnjoin__count__673ff994-fc75-4c67-909b-69fcb0e1060e","origin":"join"},"color":"Greys","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"STATIC","options":{"size":10}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR","joins":[{"leftField":"iso2","right":{"type":"ES_TERM_SOURCE","id":"673ff994-fc75-4c67-909b-69fcb0e1060e","indexPatternTitle":"kibana_sample_data_logs","term":"geo.dest","indexPatternRefName":"layer_1_join_0_index_pattern","metrics":[{"type":"count","label":"web + logs + count"}],"applyGlobalQuery":true}}]},{"id":"gaxya","label":"Actual + Requests","minZoom":9,"maxZoom":24,"alpha":1,"sourceDescriptor":{"id":"b7486535-171b-4d3b-bb2e-33c1a0a2854c","type":"ES_SEARCH","geoField":"geo.coordinates","limit":2048,"filterByMapBounds":true,"tooltipProperties":["clientip","timestamp","host","request","response","machine.os","agent","bytes"],"indexPatternRefName":"layer_2_source_index_pattern","applyGlobalQuery":true,"scalingType":"LIMIT"},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"STATIC","options":{"color":"#2200ff"}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":2}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"bytes","origin":"source"},"minSize":1,"maxSize":23,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"},{"id":"tfi3f","label":"Total + Requests and + Bytes","minZoom":0,"maxZoom":9,"alpha":1,"sourceDescriptor":{"type":"ES_GEO_GRID","resolution":"COARSE","id":"8aaa65b5-a4e9-448b-9560-c98cb1c5ac5b","geoField":"geo.coordinates","requestType":"point","metrics":[{"type":"count","label":"web + logs + count"},{"type":"sum","field":"bytes"}],"indexPatternRefName":"layer_3_source_index_pattern","applyGlobalQuery":true},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"color":"Blues","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#cccccc"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"sum_of_bytes","origin":"source"},"minSize":7,"maxSize":25,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelText":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelSize":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"minSize":12,"maxSize":24,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"}] + mapStateJSON: >- + {"zoom":3.64,"center":{"lon":-88.92107,"lat":42.16337},"timeFilters":{"from":"now-7d","to":"now"},"refreshConfig":{"isPaused":true,"interval":0},"query":{"language":"kuery","query":""},"settings":{"autoFitToDataBounds":false}} + title: '[Logs] Total Requests and Bytes' + uiStateJSON: '{"isDarkMode":false}' + coreMigrationVersion: 8.8.0 + created_at: '2023-08-23T20:03:32.204Z' + id: de71f4f0-1902-11e9-919b-ffe5949a18d2 + managed: false + references: + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_1_join_0_index_pattern + type: index-pattern + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_2_source_index_pattern + type: index-pattern + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_3_source_index_pattern + type: index-pattern + type: map + typeMigrationVersion: 8.4.0 + updated_at: '2023-08-23T20:03:32.204Z' + version: WzEzLDFd + Serverless_saved_objects_import_objects_request: + value: + file: file.ndjson + Serverless_saved_objects_import_objects_response: + summary: >- + The import objects API response indicates a successful import and the + objects are created. Since these objects are created as new copies, each + entry in the successResults array includes a destinationId attribute. + value: + success: true + successCount: 1 + successResults: + - destinationId: 82d2760c-468f-49cf-83aa-b9a35b6a8943 + id: 90943e30-9a47-11e8-b64d-95841ca0b247 + managed: false + meta: + icon: indexPatternApp + title: Kibana Sample Data Logs + type: index-pattern + parameters: + Connectors_connector_id: + description: An identifier for the connector. + in: path + name: connectorId + required: true + schema: + example: df770e30-8b8b-11ed-a780-3b746c987a81 + type: string + Connectors_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + Data_views_field_name: + description: The name of the runtime field. + in: path + name: fieldName + required: true + schema: + example: hour_of_day + type: string + Data_views_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + Data_views_view_id: + description: An identifier for the data view. + in: path + name: viewId + required: true + schema: + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + type: string + Machine_learning_APIs_simulateParam: description: >- - The sync machine learning saved objects API response contains this - object when there are trained models affected by the synchronization. - There is an object for each relevant trained model, which contains the - synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for trained models - type: object - Security_AI_Assistant_API_AnonymizationFieldCreateProps: - type: object - properties: - allowed: - type: boolean - anonymized: - type: boolean - field: - type: string - required: - - field - Security_AI_Assistant_API_AnonymizationFieldDetailsInError: - type: object + When true, simulates the synchronization by returning only the list of + actions that would be performed. + example: 'true' + in: query + name: simulate + required: false + schema: + type: boolean + Serverless_saved_objects_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + SLOs_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + SLOs_slo_id: + description: An identifier for the slo. + in: path + name: sloId + required: true + schema: + example: 9c235211-6834-11ea-a78c-6feb38a34414 + type: string + SLOs_space_id: + description: >- + An identifier for the space. If `/s/` and the identifier are omitted + from the path, the default space is used. + in: path + name: spaceId + required: true + schema: + example: default + type: string + responses: + Connectors_401: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + properties: + error: + enum: + - Unauthorized + example: Unauthorized + type: string + message: + type: string + statusCode: + enum: + - 401 + example: 401 + type: integer + title: Unauthorized response + type: object + description: Authorization information is missing or invalid. + Connectors_404: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + properties: + error: + enum: + - Not Found + example: Not Found + type: string + message: + example: >- + Saved object [action/baf33fc0-920c-11ed-b36a-874bd1548a00] not + found + type: string + statusCode: + enum: + - 404 + example: 404 + type: integer + title: Not found response + type: object + description: Object is not found. + schemas: + Connectors_config_properties_bedrock: + description: Defines properties for connectors when type is `.bedrock`. properties: - id: + apiUrl: + description: The Amazon Bedrock request URL. type: string - name: + defaultModel: + default: 'anthropic.claude-3-5-sonnet-20240620-v1:0' + description: > + The generative artificial intelligence model for Amazon Bedrock to + use. Current support is for the Anthropic Claude models. type: string required: - - id - Security_AI_Assistant_API_AnonymizationFieldResponse: + - apiUrl + title: Connector request properties for an Amazon Bedrock connector + type: object + Connectors_config_properties_cases_webhook: + description: Defines properties for connectors when type is `.cases-webhook`. type: object properties: - allowed: - type: boolean - anonymized: - type: boolean - createdAt: + createCommentJson: + description: > + A JSON payload sent to the create comment URL to create a case + comment. You can use variables to add Kibana Cases data to the + payload. The required variable is `case.comment`. Due to Mustache + template variables (the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated once the Mustache variables have + been placed when the REST method runs. Manually ensure that the JSON + is valid, disregarding the Mustache variables, so the later + validation will pass. + example: '{"body": {{{case.comment}}}}' type: string - createdBy: + createCommentMethod: + default: put + description: > + The REST API HTTP request method to create a case comment in the + third-party system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put type: string - field: + createCommentUrl: + description: > + The REST API URL to create a case comment by ID in the third-party + system. You can use a variable to add the external system ID to the + URL. If you are using the `xpack.actions.allowedHosts setting`, add + the hostname to the allowed hosts. + example: 'https://example.com/issue/{{{external.system.id}}}/comment' type: string - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - namespace: - description: Kibana space + createIncidentJson: + description: > + A JSON payload sent to the create case URL to create a case. You can + use variables to add case data to the payload. Required variables + are `case.title` and `case.description`. Due to Mustache template + variables (which is the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated after the Mustache variables have + been placed when REST method runs. Manually ensure that the JSON is + valid to avoid future validation errors; disregard Mustache + variables during your review. + example: >- + {"fields": {"summary": {{{case.title}}},"description": + {{{case.description}}},"labels": {{{case.tags}}}}} type: string - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - updatedAt: + createIncidentMethod: + default: post + description: > + The REST API HTTP request method to create a case in the third-party + system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put type: string - updatedBy: + createIncidentResponseKey: + description: >- + The JSON key in the create external case response that contains the + case ID. type: string - required: - - id - - field - Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipReason: - enum: - - ANONYMIZATION_FIELD_NOT_MODIFIED - type: string - Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipResult: - type: object - properties: - id: + createIncidentUrl: + description: > + The REST API URL to create a case in the third-party system. If you + are using the `xpack.actions.allowedHosts` setting, add the hostname + to the allowed hosts. type: string - name: + getIncidentResponseExternalTitleKey: + description: >- + The JSON key in get external case response that contains the case + title. type: string - skip_reason: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipReason - required: - - id - - skip_reason - Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResponse: - type: object - properties: - anonymization_fields_count: - type: integer - attributes: - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_NormalizedAnonymizationFieldError - type: array - results: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResults - summary: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_BulkCrudActionSummary - required: - - results - - summary - message: + getIncidentUrl: + description: > + The REST API URL to get the case by ID from the third-party system. + If you are using the `xpack.actions.allowedHosts` setting, add the + hostname to the allowed hosts. You can use a variable to add the + external system ID to the URL. Due to Mustache template variables + (the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated after the Mustache variables have + been placed when REST method runs. Manually ensure that the JSON is + valid, disregarding the Mustache variables, so the later validation + will pass. + example: 'https://example.com/issue/{{{external.system.id}}}' type: string - status_code: - type: integer - success: - type: boolean - required: - - attributes - Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResults: - type: object - properties: - created: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - deleted: - items: - type: string - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipResult - type: array - updated: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - required: - - updated - - created - - deleted - - skipped - Security_AI_Assistant_API_AnonymizationFieldUpdateProps: - type: object - properties: - allowed: - type: boolean - anonymized: + hasAuth: + default: true + description: >- + If true, a username and password for login type authentication must + be provided. type: boolean - id: + headers: + description: > + A set of key-value pairs sent as headers with the request URLs for + the create case, update case, get case, and create comment methods. type: string - required: - - id - Security_AI_Assistant_API_ApiConfig: - type: object - properties: - actionTypeId: - description: action type id + updateIncidentJson: + description: > + The JSON payload sent to the update case URL to update the case. You + can use variables to add Kibana Cases data to the payload. Required + variables are `case.title` and `case.description`. Due to Mustache + template variables (which is the text enclosed in triple braces, for + example, `{{{case.title}}}`), the JSON is not validated when you + create the connector. The JSON is validated after the Mustache + variables have been placed when REST method runs. Manually ensure + that the JSON is valid to avoid future validation errors; disregard + Mustache variables during your review. + example: >- + {"fields": {"summary": {{{case.title}}},"description": + {{{case.description}}},"labels": {{{case.tags}}}}} type: string - connectorId: - description: connector id + updateIncidentMethod: + default: put + description: > + The REST API HTTP request method to update the case in the + third-party system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put type: string - defaultSystemPromptId: - description: defaultSystemPromptId + updateIncidentUrl: + description: > + The REST API URL to update the case by ID in the third-party system. + You can use a variable to add the external system ID to the URL. If + you are using the `xpack.actions.allowedHosts` setting, add the + hostname to the allowed hosts. + example: 'https://example.com/issue/{{{external.system.ID}}}' type: string - model: - description: model + viewIncidentUrl: + description: > + The URL to view the case in the external system. You can use + variables to add the external system ID or external system title to + the URL. + example: >- + https://testing-jira.atlassian.net/browse/{{{external.system.title}}} type: string - provider: - $ref: '#/components/schemas/Security_AI_Assistant_API_Provider' - description: Provider required: - - connectorId - - actionTypeId - Security_AI_Assistant_API_BulkCrudActionSummary: - type: object + - createIncidentJson + - createIncidentResponseKey + - createIncidentUrl + - getIncidentResponseExternalTitleKey + - getIncidentUrl + - updateIncidentJson + - updateIncidentUrl + - viewIncidentUrl + title: Connector request properties for Webhook - Case Management connector + Connectors_config_properties_d3security: + description: Defines properties for connectors when type is `.d3security`. properties: - failed: - type: integer - skipped: - type: integer - succeeded: - type: integer - total: - type: integer + url: + description: > + The D3 Security API request URL. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. + type: string required: - - failed - - skipped - - succeeded - - total - Security_AI_Assistant_API_ChatCompleteProps: + - url + title: Connector request properties for a D3 Security connector + type: object + Connectors_config_properties_email: + description: Defines properties for connectors when type is `.email`. type: object properties: - connectorId: - type: string - conversationId: - type: string - isStream: - type: boolean - langSmithApiKey: - type: string - langSmithProject: + clientId: + description: > + The client identifier, which is a part of OAuth 2.0 client + credentials authentication, in GUID format. If `service` is + `exchange_server`, this property is required. + nullable: true type: string - messages: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatMessage' - type: array - model: + from: + description: > + The from address for all emails sent by the connector. It must be + specified in `user@host-name` format. type: string - persist: + hasAuth: + default: true + description: > + Specifies whether a user and password are required inside the + secrets configuration. type: boolean - promptId: - type: string - responseLanguage: + host: + description: > + The host name of the service provider. If the `service` is + `elastic_cloud` (for Elastic Cloud notifications) or one of + Nodemailer's well-known email service providers, this property is + ignored. If `service` is `other`, this property must be defined. type: string - required: - - messages - - persist - - connectorId - Security_AI_Assistant_API_ChatMessage: - description: AI assistant message. - type: object - properties: - content: - description: Message content. + oauthTokenUrl: + nullable: true type: string - data: - $ref: '#/components/schemas/Security_AI_Assistant_API_MessageData' - description: ECS object to attach to the context of the message. - fields_to_anonymize: - items: - type: string - type: array - role: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatMessageRole' - description: Message role. - required: - - role - Security_AI_Assistant_API_ChatMessageRole: - description: Message role. - enum: - - system - - user - - assistant - type: string - Security_AI_Assistant_API_ConversationCategory: - description: The conversation category. - enum: - - assistant - - insights - type: string - Security_AI_Assistant_API_ConversationConfidence: - description: The conversation confidence. - enum: - - low - - medium - - high - type: string - Security_AI_Assistant_API_ConversationCreateProps: - type: object - properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. + port: + description: > + The port to connect to on the service provider. If the `service` is + `elastic_cloud` (for Elastic Cloud notifications) or one of + Nodemailer's well-known email service providers, this property is + ignored. If `service` is `other`, this property must be defined. + type: integer + secure: + description: > + Specifies whether the connection to the service provider will use + TLS. If the `service` is `elastic_cloud` (for Elastic Cloud + notifications) or one of Nodemailer's well-known email service + providers, this property is ignored. type: boolean - id: - description: The conversation id. + service: + description: | + The name of the email service. + enum: + - elastic_cloud + - exchange_server + - gmail + - other + - outlook365 + - ses type: string - isDefault: - description: Is default conversation. - type: boolean - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - title: - description: The conversation title. + tenantId: + description: > + The tenant identifier, which is part of OAuth 2.0 client credentials + authentication, in GUID format. If `service` is `exchange_server`, + this property is required. + nullable: true type: string required: - - title - Security_AI_Assistant_API_ConversationResponse: - type: object + - from + title: Connector request properties for an email connector + Connectors_config_properties_gemini: + description: Defines properties for connectors when type is `.gemini`. properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - createdAt: - description: The last time conversation was updated. + apiUrl: + description: The Google Gemini request URL. type: string - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. - type: boolean - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - isDefault: - description: Is default conversation. - type: boolean - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - namespace: - description: Kibana space + defaultModel: + default: gemini-1.5-pro-001 + description: >- + The generative artificial intelligence model for Google Gemini to + use. type: string - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - summary: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationSummary' - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - title: - description: The conversation title. + gcpProjectID: + description: The Google ProjectID that has Vertex AI endpoint enabled. type: string - updatedAt: - description: The last time conversation was updated. + gcpRegion: + description: The GCP region where the Vertex AI endpoint enabled. type: string - users: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_User' - type: array required: - - id - - title - - createdAt - - users - - namespace - - category - Security_AI_Assistant_API_ConversationSummary: + - apiUrl + - gcpRegion + - gcpProjectID + title: Connector request properties for an Google Gemini connector type: object + Connectors_config_properties_genai: + description: Defines properties for connectors when type is `.gen-ai`. + discriminator: + mapping: + Azure OpenAI: '#/components/schemas/Connectors_config_properties_genai_azure' + OpenAI: '#/components/schemas/Connectors_config_properties_genai_openai' + propertyName: apiProvider + oneOf: + - $ref: '#/components/schemas/Connectors_config_properties_genai_azure' + - $ref: '#/components/schemas/Connectors_config_properties_genai_openai' + title: Connector request properties for an OpenAI connector + Connectors_config_properties_genai_azure: + description: > + Defines properties for connectors when type is `.gen-ai` and the API + provider is `Azure OpenAI'. properties: - confidence: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationConfidence - description: >- - How confident you are about this being a correct and useful - learning. - content: - description: Summary text of the conversation over time. + apiProvider: + description: The OpenAI API provider. + enum: + - Azure OpenAI type: string - public: - description: Define if summary is marked as publicly available. - type: boolean - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - description: The timestamp summary was updated. - Security_AI_Assistant_API_ConversationUpdateProps: - type: object - properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. - type: boolean - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - summary: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationSummary' - title: - description: The conversation title. + apiUrl: + description: The OpenAI API endpoint. type: string required: - - id - Security_AI_Assistant_API_FindAnonymizationFieldsSortField: - enum: - - created_at - - anonymized - - allowed - - field - - updated_at - type: string - Security_AI_Assistant_API_FindConversationsSortField: - enum: - - created_at - - is_default - - title - - updated_at - type: string - Security_AI_Assistant_API_FindPromptsSortField: - enum: - - created_at - - is_default - - name - - updated_at - type: string - Security_AI_Assistant_API_Message: - description: AI assistant conversation message. + - apiProvider + - apiUrl + title: >- + Connector request properties for an OpenAI connector that uses Azure + OpenAI type: object + Connectors_config_properties_genai_openai: + description: > + Defines properties for connectors when type is `.gen-ai` and the API + provider is `OpenAI'. properties: - content: - description: Message content. + apiProvider: + description: The OpenAI API provider. + enum: + - OpenAI type: string - isError: - description: Is error message. - type: boolean - reader: - $ref: '#/components/schemas/Security_AI_Assistant_API_Reader' - description: Message content. - role: - $ref: '#/components/schemas/Security_AI_Assistant_API_MessageRole' - description: Message role. - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - description: The timestamp message was sent or received. - traceData: - $ref: '#/components/schemas/Security_AI_Assistant_API_TraceData' - description: trace Data - required: - - timestamp - - content - - role - Security_AI_Assistant_API_MessageData: - additionalProperties: true - type: object - Security_AI_Assistant_API_MessageRole: - description: Message role. - enum: - - system - - user - - assistant - type: string - Security_AI_Assistant_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_AI_Assistant_API_NormalizedAnonymizationFieldError: - type: object - properties: - anonymization_fields: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldDetailsInError - type: array - err_code: + apiUrl: + description: The OpenAI API endpoint. type: string - message: + defaultModel: + description: The default model to use for requests. type: string - status_code: - type: integer required: - - message - - status_code - - anonymization_fields - Security_AI_Assistant_API_NormalizedPromptError: + - apiProvider + - apiUrl + title: Connector request properties for an OpenAI connector + type: object + Connectors_config_properties_index: + description: Defines properties for connectors when type is `.index`. type: object properties: - err_code: + executionTimeField: + default: null + description: A field that indicates when the document was indexed. + nullable: true type: string - message: + index: + description: The Elasticsearch index to be written to. type: string - prompts: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptDetailsInError - type: array - status_code: - type: integer + refresh: + default: false + description: > + The refresh policy for the write request, which affects when changes + are made visible to search. Refer to the refresh setting for + Elasticsearch document APIs. + type: boolean required: - - message - - status_code - - prompts - Security_AI_Assistant_API_PromptCreateProps: + - index + title: Connector request properties for an index connector + Connectors_config_properties_jira: + description: Defines properties for connectors when type is `.jira`. type: object properties: - categories: - items: - type: string - type: array - color: - type: string - consumer: - type: string - content: + apiUrl: + description: The Jira instance URL. type: string - isDefault: - type: boolean - isNewConversationDefault: - type: boolean - name: + projectKey: + description: The Jira project key. type: string - promptType: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptType' required: - - name - - content - - promptType - Security_AI_Assistant_API_PromptDetailsInError: + - apiUrl + - projectKey + title: Connector request properties for a Jira connector + Connectors_config_properties_opsgenie: + description: Defines properties for connectors when type is `.opsgenie`. type: object properties: - id: - type: string - name: + apiUrl: + description: > + The Opsgenie URL. For example, `https://api.opsgenie.com` or + `https://api.eu.opsgenie.com`. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. type: string required: - - id - Security_AI_Assistant_API_PromptResponse: - type: object + - apiUrl + title: Connector request properties for an Opsgenie connector + Connectors_config_properties_pagerduty: + description: Defines properties for connectors when type is `.pagerduty`. properties: - categories: - items: - type: string - type: array - color: - type: string - consumer: - type: string - content: - type: string - createdAt: - type: string - createdBy: - type: string - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - isDefault: - type: boolean - isNewConversationDefault: - type: boolean - name: - type: string - namespace: - description: Kibana space - type: string - promptType: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptType' - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - updatedAt: - type: string - updatedBy: + apiUrl: + description: The PagerDuty event URL. + example: 'https://events.pagerduty.com/v2/enqueue' + nullable: true type: string - users: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_User' - type: array - required: - - id - - name - - promptType - - content - Security_AI_Assistant_API_PromptsBulkActionSkipReason: - enum: - - PROMPT_FIELD_NOT_MODIFIED - type: string - Security_AI_Assistant_API_PromptsBulkActionSkipResult: + title: Connector request properties for a PagerDuty connector + type: object + Connectors_config_properties_resilient: + description: Defines properties for connectors when type is `.resilient`. type: object properties: - id: + apiUrl: + description: The IBM Resilient instance URL. type: string - name: + orgId: + description: The IBM Resilient organization ID. type: string - skip_reason: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkActionSkipReason required: - - id - - skip_reason - Security_AI_Assistant_API_PromptsBulkCrudActionResponse: + - apiUrl + - orgId + title: Connector request properties for a IBM Resilient connector + Connectors_config_properties_sentinelone: + description: Defines properties for connectors when type is `.sentinelone`. type: object properties: - attributes: - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_NormalizedPromptError - type: array - results: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkCrudActionResults - summary: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_BulkCrudActionSummary - required: - - results - - summary - message: + url: + description: > + The SentinelOne tenant URL. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. type: string - prompts_count: - type: integer - status_code: - type: integer - success: - type: boolean - required: - - attributes - Security_AI_Assistant_API_PromptsBulkCrudActionResults: - type: object - properties: - created: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptResponse' - type: array - deleted: - items: - type: string - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkActionSkipResult - type: array - updated: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptResponse' - type: array required: - - updated - - created - - deleted - - skipped - Security_AI_Assistant_API_PromptType: - description: Prompt type - enum: - - system - - quick - type: string - Security_AI_Assistant_API_PromptUpdateProps: + - url + title: Connector request properties for a SentinelOne connector + Connectors_config_properties_servicenow: + description: Defines properties for connectors when type is `.servicenow`. type: object properties: - categories: - items: - type: string - type: array - color: + apiUrl: + description: The ServiceNow instance URL. type: string - consumer: + clientId: + description: > + The client ID assigned to your OAuth application. This property is + required when `isOAuth` is `true`. type: string - content: + isOAuth: + default: false + description: > + The type of authentication to use. The default value is false, which + means basic authentication is used instead of open authorization + (OAuth). + type: boolean + jwtKeyId: + description: > + The key identifier assigned to the JWT verifier map of your OAuth + application. This property is required when `isOAuth` is `true`. type: string - id: + userIdentifierValue: + description: > + The identifier to use for OAuth authentication. This identifier + should be the user field you selected when you created an OAuth JWT + API endpoint for external clients in your ServiceNow instance. For + example, if the selected user field is `Email`, the user identifier + should be the user's email address. This property is required when + `isOAuth` is `true`. type: string - isDefault: - type: boolean - isNewConversationDefault: + usesTableApi: + default: true + description: > + Determines whether the connector uses the Table API or the Import + Set API. This property is supported only for ServiceNow ITSM and + ServiceNow SecOps connectors. NOTE: If this property is set to + `false`, the Elastic application should be installed in ServiceNow. type: boolean required: - - id - Security_AI_Assistant_API_Provider: - description: Provider - enum: - - OpenAI - - Azure OpenAI - type: string - Security_AI_Assistant_API_Reader: - additionalProperties: true - type: object - Security_AI_Assistant_API_Replacements: - additionalProperties: - type: string - description: Replacements object used to anonymize/deanomymize messsages - type: object - Security_AI_Assistant_API_SortOrder: - enum: - - asc - - desc - type: string - Security_AI_Assistant_API_TraceData: - description: trace Data + - apiUrl + title: Connector request properties for a ServiceNow ITSM connector + Connectors_config_properties_servicenow_itom: + description: Defines properties for connectors when type is `.servicenow`. type: object properties: - traceId: - description: 'Could be any string, not necessarily a UUID' + apiUrl: + description: The ServiceNow instance URL. type: string - transactionId: - description: 'Could be any string, not necessarily a UUID' + clientId: + description: > + The client ID assigned to your OAuth application. This property is + required when `isOAuth` is `true`. type: string - Security_AI_Assistant_API_User: - description: 'Could be any string, not necessarily a UUID' - type: object - properties: - id: - description: User id + isOAuth: + default: false + description: > + The type of authentication to use. The default value is false, which + means basic authentication is used instead of open authorization + (OAuth). + type: boolean + jwtKeyId: + description: > + The key identifier assigned to the JWT verifier map of your OAuth + application. This property is required when `isOAuth` is `true`. type: string - name: - description: User name + userIdentifierValue: + description: > + The identifier to use for OAuth authentication. This identifier + should be the user field you selected when you created an OAuth JWT + API endpoint for external clients in your ServiceNow instance. For + example, if the selected user field is `Email`, the user identifier + should be the user's email address. This property is required when + `isOAuth` is `true`. type: string - Security_Solution_Detections_API_AlertAssignees: - type: object - properties: - add: - description: A list of users ids to assign. - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array - remove: - description: A list of users ids to unassign. - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array required: - - add - - remove - Security_Solution_Detections_API_AlertIds: - description: A list of alerts ids. - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - minItems: 1 - type: array - Security_Solution_Detections_API_AlertsIndex: - deprecated: true - description: (deprecated) Has no effect. - type: string - Security_Solution_Detections_API_AlertsIndexNamespace: - description: Has no effect. - type: string - Security_Solution_Detections_API_AlertsSort: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations - - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations - type: array - Security_Solution_Detections_API_AlertsSortCombinations: - anyOf: - - type: string - - additionalProperties: true - type: object - Security_Solution_Detections_API_AlertStatus: - enum: - - open - - closed - - acknowledged - - in-progress - type: string - Security_Solution_Detections_API_AlertSuppression: - type: object - properties: - duration: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration - group_by: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionGroupBy - missing_fields_strategy: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy - required: - - group_by - Security_Solution_Detections_API_AlertSuppressionDuration: - type: object + - apiUrl + title: Connector request properties for a ServiceNow ITSM connector + Connectors_config_properties_slack_api: + description: Defines properties for connectors when type is `.slack_api`. properties: - unit: - enum: - - s - - m - - h - type: string - value: - minimum: 1 - type: integer - required: - - value - - unit - Security_Solution_Detections_API_AlertSuppressionGroupBy: - items: - type: string - maxItems: 3 - minItems: 1 - type: array - Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy: - description: >- - Describes how alerts will be generated for documents with missing - suppress by fields: - - doNotSuppress - per each document a separate alert will be created - - suppress - only alert will be created per suppress by bucket - enum: - - doNotSuppress - - suppress - type: string - Security_Solution_Detections_API_AlertTag: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_AlertTags: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTag' - type: array - Security_Solution_Detections_API_AnomalyThreshold: - description: Anomaly threshold - minimum: 0 - type: integer - Security_Solution_Detections_API_BuildingBlockType: - description: >- - Determines if the rule acts as a building block. By default, - building-block alerts are not displayed in the UI. These rules are used - as a foundation for other rules that do generate alerts. Its value must - be default. - type: string - Security_Solution_Detections_API_BulkActionEditPayload: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTags - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTimeline - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadRuleActions - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadSchedule - Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns: + allowedChannels: + description: A list of valid Slack channels. + items: + maxItems: 25 + type: object + properties: + id: + description: The Slack channel ID. + example: C123ABC456 + minLength: 1 + type: string + name: + description: The Slack channel name. + minLength: 1 + type: string + required: + - id + - name + type: array + title: Connector request properties for a Slack connector type: object - properties: - overwrite_data_views: - type: boolean - type: - enum: - - add_index_patterns - - delete_index_patterns - - set_index_patterns - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields: + Connectors_config_properties_swimlane: + description: Defines properties for connectors when type is `.swimlane`. type: object properties: - type: - enum: - - add_investigation_fields - - delete_investigation_fields - - set_investigation_fields + apiUrl: + description: The Swimlane instance URL. type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadRuleActions: - type: object - properties: - type: - enum: - - add_rule_actions - - set_rule_actions + appId: + description: The Swimlane application ID. type: string - value: - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleAction - type: array - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThrottleForBulkActions - required: - - actions - required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadSchedule: - type: object - properties: - type: + connectorType: + description: >- + The type of connector. Valid values are `all`, `alerts`, and + `cases`. enum: - - set_schedule + - all + - alerts + - cases type: string - value: - type: object + mappings: + description: The field mapping. properties: - interval: - description: >- - Interval in which the rule runs. For example, `"1h"` means the - rule runs every hour. - example: 1h - pattern: '^[1-9]\d*[smh]$' - type: string - lookback: - description: Lookback time for the rule - example: 1h - pattern: '^[1-9]\d*[smh]$' - type: string - required: - - interval - - lookback - required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadTags: - type: object - properties: - type: - enum: - - add_tags - - delete_tags - - set_tags - type: string - value: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleTagArray' - required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadTimeline: - type: object - properties: - type: - enum: - - set_timeline - type: string - value: + alertIdConfig: + description: Mapping for the alert ID. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Alert identifier mapping + type: object + caseIdConfig: + description: Mapping for the case ID. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case identifier mapping + type: object + caseNameConfig: + description: Mapping for the case name. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case name mapping + type: object + commentsConfig: + description: Mapping for the case comments. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case comment mapping + type: object + descriptionConfig: + description: Mapping for the case description. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case description mapping + type: object + ruleNameConfig: + description: Mapping for the name of the alert's rule. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Rule name mapping + type: object + severityConfig: + description: Mapping for the severity. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Severity mapping + type: object + title: Connector mappings properties for a Swimlane connector type: object - properties: - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - required: - - timeline_id - - timeline_title - required: - - type - - value - Security_Solution_Detections_API_BulkActionsDryRunErrCode: - enum: - - IMMUTABLE - - MACHINE_LEARNING_AUTH - - MACHINE_LEARNING_INDEX_PATTERN - - ESQL_INDEX_PATTERN - - MANUAL_RULE_RUN_FEATURE - - MANUAL_RULE_RUN_DISABLED_RULE - type: string - Security_Solution_Detections_API_BulkActionSkipResult: - type: object - properties: - id: - type: string - name: - type: string - skip_reason: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditSkipReason required: - - id - - skip_reason - Security_Solution_Detections_API_BulkDeleteRules: - type: object + - apiUrl + - appId + - connectorType + title: Connector request properties for a Swimlane connector + Connectors_config_properties_tines: + description: Defines properties for connectors when type is `.tines`. properties: - action: - enum: - - delete - type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + url: + description: > + The Tines tenant URL. If you are using the + `xpack.actions.allowedHosts` setting, make sure this hostname is + added to the allowed hosts. type: string required: - - action - Security_Solution_Detections_API_BulkDisableRules: + - url + title: Connector request properties for a Tines connector type: object + Connectors_config_properties_torq: + description: Defines properties for connectors when type is `.torq`. properties: - action: - enum: - - disable - type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + webhookIntegrationUrl: + description: The endpoint URL of the Elastic Security integration in Torq. type: string required: - - action - Security_Solution_Detections_API_BulkDuplicateRules: + - webhookIntegrationUrl + title: Connector request properties for a Torq connector type: object + Connectors_config_properties_webhook: + description: Defines properties for connectors when type is `.webhook`. properties: - action: + authType: + description: | + The type of authentication to use: basic, SSL, or none. enum: - - duplicate + - webhook-authentication-basic + - webhook-authentication-ssl + nullable: true type: string - duplicate: - type: object - properties: - include_exceptions: - description: Whether to copy exceptions from the original rule - type: boolean - include_expired_exceptions: - description: Whether to copy expired exceptions from the original rule - type: boolean - required: - - include_exceptions - - include_expired_exceptions - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + ca: + description: > + A base64 encoded version of the certificate authority file that the + connector can trust to sign and validate certificates. This option + is available for all authentication types. type: string - required: - - action - Security_Solution_Detections_API_BulkEditActionResponse: - type: object - properties: - attributes: - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleError - type: array - results: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResults - summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionSummary - required: - - results - - summary - message: + certType: + description: > + If the `authType` is `webhook-authentication-ssl`, specifies whether + the certificate authentication data is in a CRT and key file format + or a PFX file format. + enum: + - ssl-crt-key + - ssl-pfx type: string - rules_count: - type: integer - status_code: - type: integer - success: + hasAuth: + description: > + If `true`, a user name and password must be provided for login type + authentication. type: boolean - required: - - attributes - Security_Solution_Detections_API_BulkEditActionResults: - type: object - properties: - created: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - deleted: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionSkipResult - type: array - updated: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - required: - - updated - - created - - deleted - - skipped - Security_Solution_Detections_API_BulkEditActionSummary: - type: object - properties: - failed: - type: integer - skipped: - type: integer - succeeded: - type: integer - total: - type: integer - required: - - failed - - skipped - - succeeded - - total - Security_Solution_Detections_API_BulkEditRules: - type: object - properties: - action: + headers: + description: A set of key-value pairs sent as headers with the request. + nullable: true + type: object + method: + default: post + description: | + The HTTP request method, either `post` or `put`. enum: - - edit + - post + - put type: string - edit: - description: Array of objects containing the edit operations - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayload - minItems: 1 - type: array - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + url: + description: > + The request URL. If you are using the `xpack.actions.allowedHosts` + setting, add the hostname to the allowed hosts. type: string - required: - - action - - edit - Security_Solution_Detections_API_BulkEditSkipReason: - enum: - - RULE_NOT_MODIFIED - type: string - Security_Solution_Detections_API_BulkEnableRules: - type: object - properties: - action: + verificationMode: + default: full + description: > + Controls the verification of certificates. Use `full` to validate + that the certificate has an issue date within the `not_before` and + `not_after` dates, chains to a trusted certificate authority (CA), + and has a hostname or IP address that matches the names within the + certificate. Use `certificate` to validate the certificate and + verify that it is signed by a trusted authority; this option does + not check the certificate hostname. Use `none` to skip certificate + validation. enum: - - enable - type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + - certificate + - full + - none type: string - required: - - action - Security_Solution_Detections_API_BulkExportActionResponse: - type: string - Security_Solution_Detections_API_BulkExportRules: + title: Connector request properties for a Webhook connector type: object + Connectors_config_properties_xmatters: + description: Defines properties for connectors when type is `.xmatters`. properties: - action: - enum: - - export - type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + configUrl: + description: > + The request URL for the Elastic Alerts trigger in xMatters. It is + applicable only when `usesBasic` is `true`. + nullable: true type: string - required: - - action - Security_Solution_Detections_API_BulkManualRuleRun: + usesBasic: + default: true + description: >- + Specifies whether the connector uses HTTP basic authentication + (`true`) or URL authentication (`false`). + type: boolean + title: Connector request properties for an xMatters connector type: object - properties: - action: - enum: - - run - type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules - type: string - run: - type: object - properties: - end_date: - description: End date of the manual rule run - type: string - start_date: - description: Start date of the manual rule run - type: string - required: - - start_date - required: - - action - - run - Security_Solution_Detections_API_ConcurrentSearches: - minimum: 1 - type: integer - Security_Solution_Detections_API_DataViewId: - type: string - Security_Solution_Detections_API_DefaultParams: + Connectors_connector_response_properties: + description: The properties vary depending on the connector type. + discriminator: + mapping: + .bedrock: >- + #/components/schemas/Connectors_connector_response_properties_bedrock + .cases-webhook: >- + #/components/schemas/Connectors_connector_response_properties_cases_webhook + .d3security: >- + #/components/schemas/Connectors_connector_response_properties_d3security + .email: '#/components/schemas/Connectors_connector_response_properties_email' + .gemini: '#/components/schemas/Connectors_connector_response_properties_gemini' + .gen-ai: '#/components/schemas/Connectors_connector_response_properties_genai' + .index: '#/components/schemas/Connectors_connector_response_properties_index' + .jira: '#/components/schemas/Connectors_connector_response_properties_jira' + .opsgenie: >- + #/components/schemas/Connectors_connector_response_properties_opsgenie + .pagerduty: >- + #/components/schemas/Connectors_connector_response_properties_pagerduty + .resilient: >- + #/components/schemas/Connectors_connector_response_properties_resilient + .sentinelone: >- + #/components/schemas/Connectors_connector_response_properties_sentinelone + .server-log: >- + #/components/schemas/Connectors_connector_response_properties_serverlog + .servicenow: >- + #/components/schemas/Connectors_connector_response_properties_servicenow + .servicenow-itom: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_itom + .servicenow-sir: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_sir + .slack: >- + #/components/schemas/Connectors_connector_response_properties_slack_webhook + .slack_api: >- + #/components/schemas/Connectors_connector_response_properties_slack_api + .swimlane: >- + #/components/schemas/Connectors_connector_response_properties_swimlane + .teams: '#/components/schemas/Connectors_connector_response_properties_teams' + .tines: '#/components/schemas/Connectors_connector_response_properties_tines' + .torq: '#/components/schemas/Connectors_connector_response_properties_torq' + .webhook: >- + #/components/schemas/Connectors_connector_response_properties_webhook + .xmatters: >- + #/components/schemas/Connectors_connector_response_properties_xmatters + propertyName: connector_type_id + oneOf: + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_bedrock + - $ref: '#/components/schemas/Connectors_connector_response_properties_gemini' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_cases_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_d3security + - $ref: '#/components/schemas/Connectors_connector_response_properties_email' + - $ref: '#/components/schemas/Connectors_connector_response_properties_genai' + - $ref: '#/components/schemas/Connectors_connector_response_properties_index' + - $ref: '#/components/schemas/Connectors_connector_response_properties_jira' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_opsgenie + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_pagerduty + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_resilient + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_sentinelone + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_serverlog + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_itom + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_sir + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_slack_api + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_slack_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_swimlane + - $ref: '#/components/schemas/Connectors_connector_response_properties_teams' + - $ref: '#/components/schemas/Connectors_connector_response_properties_tines' + - $ref: '#/components/schemas/Connectors_connector_response_properties_torq' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_xmatters + title: Connector response properties + Connectors_connector_response_properties_bedrock: + title: Connector response properties for an Amazon Bedrock connector type: object properties: - command: + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' + connector_type_id: + description: The type of connector. enum: - - isolate + - .bedrock + type: string + id: + description: The identifier for the connector. type: string - comment: + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string required: - - command - Security_Solution_Detections_API_EcsMapping: - additionalProperties: - type: object - properties: - field: - type: string - value: - oneOf: - - type: string - - items: - type: string - type: array - type: object - Security_Solution_Detections_API_EndpointResponseAction: + - config + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_cases_webhook: + title: Connector request properties for a Webhook - Case Management connector type: object properties: - action_type_id: + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + connector_type_id: + description: The type of connector. enum: - - .endpoint + - .cases-webhook type: string - params: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_DefaultParams - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ProcessesParams + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action_type_id - - params - Security_Solution_Detections_API_EqlOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - event_category_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EventCategoryOverride - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - tiebreaker_field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TiebreakerField - timestamp_field: - $ref: '#/components/schemas/Security_Solution_Detections_API_TimestampField' - Security_Solution_Detections_API_EqlQueryLanguage: - enum: - - eql - type: string - Security_Solution_Detections_API_EqlRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_d3security: + title: Connector response properties for a D3 Security connector type: object properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage - description: Query language to use - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: EQL query to execute - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + connector_type_id: + description: The type of connector. enum: - - eql + - .d3security type: string - required: - - type - - query - - language - Security_Solution_Detections_API_EqlRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleResponseFields - Security_Solution_Detections_API_EqlRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_EqlRulePatchFields: - allOf: - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage - description: Query language to use - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: EQL query to execute - type: - description: Rule type - enum: - - eql - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchFields - Security_Solution_Detections_API_EqlRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_ErrorSchema: - additionalProperties: false - type: object - properties: - error: - type: object - properties: - message: - type: string - status_code: - minimum: 400 - type: integer - required: - - status_code - - message id: + description: The identifier for the connector. type: string - item_id: - minLength: 1 - type: string - list_id: - minLength: 1 + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - error - Security_Solution_Detections_API_EsqlQueryLanguage: - enum: - - esql - type: string - Security_Solution_Detections_API_EsqlRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleResponseFields - Security_Solution_Detections_API_EsqlRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EsqlRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_EsqlRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: ESQL query to execute - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - type: - description: Rule type - enum: - - esql - type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - Security_Solution_Detections_API_EsqlRuleRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_email: + title: Connector response properties for an email connector type: object properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: ESQL query to execute - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_email' + connector_type_id: + description: The type of connector. enum: - - esql + - .email + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - language - - query - Security_Solution_Detections_API_EsqlRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EventCategoryOverride: - type: string - Security_Solution_Detections_API_ExceptionListType: - description: The exception type - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Detections_API_ExternalRuleSource: - description: >- - Type of rule source for externally sourced rules, i.e. rules that have - an external source, such as the Elastic Prebuilt rules repo. + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_gemini: + title: Connector response properties for a Google Gemini connector type: object properties: - is_customized: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsExternalRuleCustomized - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' + connector_type_id: + description: The type of connector. enum: - - external + - .gemini + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - is_customized - Security_Solution_Detections_API_FindRulesSortField: - enum: - - created_at - - createdAt - - enabled - - execution_summary.last_execution.date - - execution_summary.last_execution.metrics.execution_gap_duration_s - - execution_summary.last_execution.metrics.total_indexing_duration_ms - - execution_summary.last_execution.metrics.total_search_duration_ms - - execution_summary.last_execution.status + - connector_type_id + - id + - is_deprecated + - is_preconfigured - name - - risk_score - - riskScore - - severity - - updated_at - - updatedAt - type: string - Security_Solution_Detections_API_HistoryWindowStart: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_IndexPatternArray: - items: - type: string - type: array - Security_Solution_Detections_API_InternalRuleSource: - description: >- - Type of rule source for internally sourced rules, i.e. created within - the Kibana apps. + Connectors_connector_response_properties_genai: + title: Connector response properties for an OpenAI connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_genai' + connector_type_id: + description: The type of connector. enum: - - internal + - .gen-ai + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - Security_Solution_Detections_API_InvestigationFields: - description: > - Schema for fields relating to investigation fields. These are user - defined fields we use to highlight - - in various features in the UI such as alert details flyout and - exceptions auto-population from alert. - - Added in PR #163235 - - Right now we only have a single field but anticipate adding more related - fields to store various - - configuration states such as `override` - where a user might say if they - want only these fields to - - display, or if they want these fields + the fields we select. When - expanding this field, it may look - - something like: - - ```typescript - - const investigationFields = z.object({ - field_names: NonEmptyArray(NonEmptyString), - override: z.boolean().optional(), - }); - - ``` + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_index: + title: Connector response properties for an index connector type: object properties: - field_names: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - minItems: 1 - type: array + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + connector_type_id: + description: The type of connector. + enum: + - .index + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - field_names - Security_Solution_Detections_API_InvestigationGuide: - description: Notes to help investigate alerts produced by the rule. - type: string - Security_Solution_Detections_API_IsExternalRuleCustomized: - description: >- - Determines whether an external/prebuilt rule has been customized by the - user (i.e. any of its fields have been modified and diverged from the - base value). - type: boolean - Security_Solution_Detections_API_IsRuleEnabled: - description: Determines whether the rule is enabled. - type: boolean - Security_Solution_Detections_API_IsRuleImmutable: - deprecated: true - description: >- - This field determines whether the rule is a prebuilt Elastic rule. It - will be replaced with the `rule_source` field. - type: boolean - Security_Solution_Detections_API_ItemsPerSearch: - minimum: 1 - type: integer - Security_Solution_Detections_API_KqlQueryLanguage: - enum: - - kuery - - lucene - type: string - Security_Solution_Detections_API_MachineLearningJobId: - description: Machine learning job ID - oneOf: - - type: string - - items: - type: string - minItems: 1 - type: array - Security_Solution_Detections_API_MachineLearningRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleResponseFields - Security_Solution_Detections_API_MachineLearningRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MachineLearningRuleOptionalFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_jira: + title: Connector response properties for a Jira connector type: object properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_MachineLearningRulePatchFields: - allOf: - - type: object - properties: - anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold - machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId - type: - description: Rule type - enum: - - machine_learning - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchFields - Security_Solution_Detections_API_MachineLearningRuleRequiredFields: + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' + connector_type_id: + description: The type of connector. + enum: + - .jira + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' + required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_opsgenie: + title: Connector response properties for an Opsgenie connector type: object properties: - anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold - machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + connector_type_id: + description: The type of connector. enum: - - machine_learning + - .opsgenie type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - machine_learning_job_id - - anomaly_threshold - Security_Solution_Detections_API_MachineLearningRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MaxSignals: - minimum: 1 - type: integer - Security_Solution_Detections_API_NewTermsFields: - items: - type: string - maxItems: 3 - minItems: 1 - type: array - Security_Solution_Detections_API_NewTermsRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleResponseFields - Security_Solution_Detections_API_NewTermsRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NewTermsRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_NewTermsRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - Security_Solution_Detections_API_NewTermsRulePatchFields: - allOf: - - type: object - properties: - history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart - new_terms_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsFields - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - type: - description: Rule type - enum: - - new_terms - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchFields - Security_Solution_Detections_API_NewTermsRuleRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_pagerduty: + title: Connector response properties for a PagerDuty connector type: object properties: - history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart - new_terms_fields: - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsFields' - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + connector_type_id: + description: The type of connector. enum: - - new_terms + - .pagerduty + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - query - - new_terms_fields - - history_window_start - Security_Solution_Detections_API_NewTermsRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_NewTermsRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Detections_API_NormalizedRuleAction: - additionalProperties: false + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_resilient: + title: Connector response properties for a IBM Resilient connector type: object properties: - alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter - frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency - group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + connector_type_id: + description: The type of connector. + enum: + - .resilient + type: string id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' - params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - - params - Security_Solution_Detections_API_NormalizedRuleError: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_sentinelone: + title: Connector response properties for a SentinelOne connector type: object properties: - err_code: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionsDryRunErrCode - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + connector_type_id: + description: The type of connector. + enum: + - .sentinelone type: string - rules: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDetailsInError - type: array - status_code: - type: integer + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - message - - status_code - - rules - Security_Solution_Detections_API_OsqueryParams: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_serverlog: + title: Connector response properties for a server log connector type: object properties: - ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' - pack_id: - type: string - queries: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryQuery' - type: array - query: - type: string - saved_query_id: + config: + nullable: true + type: object + connector_type_id: + description: The type of connector. + enum: + - .server-log type: string - timeout: - type: number - Security_Solution_Detections_API_OsqueryQuery: - type: object - properties: - ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' id: - description: Query ID - type: string - platform: - type: string - query: - description: Query to run + description: The identifier for the connector. type: string - removed: - type: boolean - snapshot: - type: boolean - version: - description: Query version + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - - query - Security_Solution_Detections_API_OsqueryResponseAction: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow: + title: Connector response properties for a ServiceNow ITSM connector type: object properties: - action_type_id: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - .osquery + - .servicenow type: string - params: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryParams' - required: - - action_type_id - - params - Security_Solution_Detections_API_PlatformErrorResponse: - type: object - properties: - error: + id: + description: The identifier for the connector. type: string - message: + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string - statusCode: - type: integer + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - statusCode - - error - - message - Security_Solution_Detections_API_ProcessesParams: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow_itom: + title: Connector response properties for a ServiceNow ITOM connector type: object properties: - command: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + connector_type_id: + description: The type of connector. enum: - - kill-process - - suspend-process + - .servicenow-itom type: string - comment: + id: + description: The identifier for the connector. type: string - config: - type: object - properties: - field: - description: Field to use instead of process.pid - type: string - overwrite: - default: true - description: Whether to overwrite field with process.pid - type: boolean - required: - - field + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - command - - config - Security_Solution_Detections_API_QueryRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleResponseFields - Security_Solution_Detections_API_QueryRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_QueryRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - Security_Solution_Detections_API_QueryRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - response_actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction - type: array - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_QueryRulePatchFields: - allOf: - - type: object - properties: - type: - description: Rule type - enum: - - query - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchFields - Security_Solution_Detections_API_QueryRuleRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow_sir: + title: Connector response properties for a ServiceNow SecOps connector type: object properties: - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - query + - .servicenow-sir + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - Security_Solution_Detections_API_QueryRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - required: - - query - - language - Security_Solution_Detections_API_QueryRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_RelatedIntegration: - description: > - Related integration is a potential dependency of a rule. It's assumed - that if the user installs - - one of the related integrations of a rule, the rule might start to work - properly because it will - - have source events (generated by this integration) potentially matching - the rule's query. - - - NOTE: Proper work is not guaranteed, because a related integration, if - installed, can be - - configured differently or generate data that is not necessarily relevant - for this rule. - - - Related integration is a combination of a Fleet package and (optionally) - one of the - - package's "integrations" that this package contains. It is represented - by 3 properties: - - - - `package`: name of the package (required, unique id) - - - `version`: version of the package (required, semver-compatible) - - - `integration`: name of the integration of this package (optional, id - within the package) - - - There are Fleet packages like `windows` that contain only one - integration; in this case, - - `integration` should be unspecified. There are also packages like `aws` - and `azure` that contain - - several integrations; in this case, `integration` should be specified. - - - @example - - const x: RelatedIntegration = { - package: 'windows', - version: '1.5.x', - }; - - - @example - - const x: RelatedIntegration = { - package: 'azure', - version: '~1.1.6', - integration: 'activitylogs', - }; + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_slack_api: + title: Connector response properties for a Slack connector type: object properties: - integration: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - package: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - version: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + connector_type_id: + description: The type of connector. + enum: + - .slack_api + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - package - - version - Security_Solution_Detections_API_RelatedIntegrationArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegration - type: array - Security_Solution_Detections_API_RequiredField: - description: > - Describes an Elasticsearch field that is needed for the rule to - function. - - - Almost all types of Security rules check source event documents for a - match to some kind of - - query or filter. If a document has certain field with certain values, - then it's a match and - - the rule will generate an alert. - - - Required field is an event field that must be present in the source - indices of a given rule. - - - @example - - const standardEcsField: RequiredField = { - name: 'event.action', - type: 'keyword', - ecs: true, - }; - - - @example - - const nonEcsField: RequiredField = { - name: 'winlog.event_data.AttributeLDAPDisplayName', - type: 'keyword', - ecs: false, - }; + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_slack_webhook: + title: Connector response properties for a Slack connector type: object properties: - ecs: - description: Whether the field is an ECS field - type: boolean + connector_type_id: + description: The type of connector. + enum: + - .slack + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Name of an Elasticsearch field - type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Type of the Elasticsearch field + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured - name - - type - - ecs - Security_Solution_Detections_API_RequiredFieldArray: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RequiredField' - type: array - Security_Solution_Detections_API_RequiredFieldInput: - description: >- - Input parameters to create a RequiredField. Does not include the `ecs` - field, because `ecs` is calculated on the backend based on the field - name and type. + Connectors_connector_response_properties_swimlane: + title: Connector response properties for a Swimlane connector type: object properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + connector_type_id: + description: The type of connector. + enum: + - .swimlane + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Name of an Elasticsearch field - type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Type of an Elasticsearch field + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured - name - - type - Security_Solution_Detections_API_ResponseAction: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_OsqueryResponseAction - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EndpointResponseAction - Security_Solution_Detections_API_ResponseFields: + Connectors_connector_response_properties_teams: + title: Connector response properties for a Microsoft Teams connector type: object properties: - created_at: - format: date-time - type: string - created_by: + config: + type: object + connector_type_id: + description: The type of connector. + enum: + - .teams type: string - execution_summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionSummary id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - immutable: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleImmutable - required_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldArray - revision: - minimum: 0 - type: integer - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_source: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleSource' - updated_at: - format: date-time + description: The identifier for the connector. type: string - updated_by: + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - - rule_id - - immutable - - updated_at - - updated_by - - created_at - - created_by - - revision - - related_integrations - - required_fields - Security_Solution_Detections_API_RiskScore: - description: Risk score (0 to 100) - maximum: 100 - minimum: 0 - type: integer - Security_Solution_Detections_API_RiskScoreMapping: - description: >- - Overrides generated alerts' risk_score with a value from the source - event - items: - type: object - properties: - field: - type: string - operator: - enum: - - equals - type: string - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - value: - type: string - required: - - field - - operator - - value - type: array - Security_Solution_Detections_API_RuleAction: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_tines: + title: Connector response properties for a Tines connector type: object properties: - action_type_id: - description: The action type used for sending notifications. + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' + connector_type_id: + description: The type of connector. + enum: + - .tines type: string - alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter - frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency - group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' - params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams - uuid: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action_type_id + - connector_type_id - id - - params - Security_Solution_Detections_API_RuleActionAlertsFilter: - additionalProperties: true - type: object - Security_Solution_Detections_API_RuleActionFrequency: - description: >- - The action frequency defines when the action runs (for example, only on - rule execution or at specific time intervals). + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_torq: + title: Connector response properties for a Torq connector type: object properties: - notifyWhen: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionNotifyWhen - summary: - description: >- - Action summary indicates whether we will send a summary notification - about all the generate alerts or notification per individual alert - type: boolean - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - nullable: true - required: - - summary - - notifyWhen - - throttle - Security_Solution_Detections_API_RuleActionGroup: - description: >- - Optionally groups actions by use cases. Use `default` for alert - notifications. - type: string - Security_Solution_Detections_API_RuleActionId: - description: The connector ID. - type: string - Security_Solution_Detections_API_RuleActionNotifyWhen: - description: >- - The condition for throttling the notification: `onActionGroupChange`, - `onActiveAlert`, or `onThrottleInterval` - enum: - - onActiveAlert - - onThrottleInterval - - onActionGroupChange - type: string - Security_Solution_Detections_API_RuleActionParams: - additionalProperties: true - description: >- - Object containing the allowed connector fields, which varies according - to the connector type. - type: object - Security_Solution_Detections_API_RuleActionThrottle: - description: Defines how often rule actions are taken. - oneOf: - - enum: - - no_actions - - rule + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + connector_type_id: + description: The type of connector. + enum: + - .torq type: string - - description: 'Time interval in seconds, minutes, hours, or days.' - example: 1h - pattern: '^[1-9]\d*[smhd]$' + id: + description: The identifier for the connector. type: string - Security_Solution_Detections_API_RuleAuthorArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleCreateProps: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleDescription: - minLength: 1 - type: string - Security_Solution_Detections_API_RuleDetailsInError: + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' + required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_webhook: + title: Connector response properties for a Webhook connector type: object properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + connector_type_id: + description: The type of connector. + enum: + - .webhook + type: string id: + description: The identifier for the connector. type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - Security_Solution_Detections_API_RuleExceptionList: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_xmatters: + title: Connector response properties for an xMatters connector type: object properties: - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: ID of the exception container - list_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: List ID of the exception container - namespace_type: - description: Determines the exceptions validity in rule's Kibana space + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + connector_type_id: + description: The type of connector. enum: - - agnostic - - single + - .xmatters type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExceptionListType + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - - list_id - - type - - namespace_type - Security_Solution_Detections_API_RuleExecutionMetrics: - type: object - properties: - execution_gap_duration_s: - description: Duration in seconds of execution gap - minimum: 0 - type: integer - total_enrichment_duration_ms: - description: >- - Total time spent enriching documents during current rule execution - cycle - minimum: 0 - type: integer - total_indexing_duration_ms: - description: >- - Total time spent indexing documents during current rule execution - cycle - minimum: 0 - type: integer - total_search_duration_ms: - description: >- - Total time spent performing ES searches as measured by Kibana; - includes network latency and time spent serializing/deserializing - request/response - minimum: 0 - type: integer - Security_Solution_Detections_API_RuleExecutionStatus: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_types: description: >- - Custom execution status of Security rules that is different from the - status used in the Alerting Framework. We merge our custom status with - the Framework's status to determine the resulting status of a rule. - - - going to run - @deprecated Replaced by the 'running' status but left - for backwards compatibility with rule execution events already written - to Event Log in the prior versions of Kibana. Don't use when writing - rule status changes. - - - running - Rule execution started but not reached any intermediate or - final status. - - - partial failure - Rule can partially fail for various reasons either - in the middle of an execution (in this case we update its status right - away) or in the end of it. So currently this status can be both - intermediate and final at the same time. A typical reason for a partial - failure: not all the indices that the rule searches over actually exist. - - - failed - Rule failed to execute due to unhandled exception or a reason - defined in the business logic of its executor function. - - - succeeded - Rule executed successfully without any issues. Note: this - status is just an indication of a rule's "health". The rule might or - might not generate any alerts despite of it. + The type of connector. For example, `.email`, `.index`, `.jira`, + `.opsgenie`, or `.server-log`. enum: - - going to run - - running - - partial failure - - failed - - succeeded - type: string - Security_Solution_Detections_API_RuleExecutionStatusOrder: - type: integer - Security_Solution_Detections_API_RuleExecutionSummary: - type: object - properties: - last_execution: - type: object - properties: - date: - description: Date of the last execution - format: date-time - type: string - message: - type: string - metrics: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionMetrics - status: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatus - description: Status of the last execution - status_order: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatusOrder - required: - - date - - status - - status_order - - message - - metrics - required: - - last_execution - Security_Solution_Detections_API_RuleFalsePositiveArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleFilterArray: - items: {} - type: array - Security_Solution_Detections_API_RuleInterval: - description: >- - Frequency of rule execution, using a date math range. For example, "1h" - means the rule runs every hour. Defaults to 5m (5 minutes). - type: string - Security_Solution_Detections_API_RuleIntervalFrom: - description: >- - Time from which data is analyzed each time the rule runs, using a date - math range. For example, now-4200s means the rule analyzes data from 70 - minutes before its start time. Defaults to now-6m (analyzes data from 6 - minutes before the start time). - format: date-math - type: string - Security_Solution_Detections_API_RuleIntervalTo: - type: string - Security_Solution_Detections_API_RuleLicense: - description: The rule's license. - type: string - Security_Solution_Detections_API_RuleMetadata: - additionalProperties: true - type: object - Security_Solution_Detections_API_RuleName: - minLength: 1 - type: string - Security_Solution_Detections_API_RuleNameOverride: - description: Sets the source field for the alert's signal.rule.name value + - .bedrock + - .gemini + - .cases-webhook + - .d3security + - .email + - .gen-ai + - .index + - .jira + - .opsgenie + - .pagerduty + - .resilient + - .sentinelone + - .servicenow + - .servicenow-itom + - .servicenow-sir + - .server-log + - .slack + - .slack_api + - .swimlane + - .teams + - .tines + - .torq + - .webhook + - .xmatters + example: .server-log + title: Connector types type: string - Security_Solution_Detections_API_RuleObjectId: - $ref: '#/components/schemas/Security_Solution_Detections_API_UUID' - Security_Solution_Detections_API_RulePatchProps: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchProps + Connectors_create_connector_request: + description: The properties vary depending on the connector type. + discriminator: + mapping: + .bedrock: '#/components/schemas/Connectors_create_connector_request_bedrock' + .cases-webhook: >- + #/components/schemas/Connectors_create_connector_request_cases_webhook + .d3security: '#/components/schemas/Connectors_create_connector_request_d3security' + .email: '#/components/schemas/Connectors_create_connector_request_email' + .gemini: '#/components/schemas/Connectors_create_connector_request_gemini' + .gen-ai: '#/components/schemas/Connectors_create_connector_request_genai' + .index: '#/components/schemas/Connectors_create_connector_request_index' + .jira: '#/components/schemas/Connectors_create_connector_request_jira' + .opsgenie: '#/components/schemas/Connectors_create_connector_request_opsgenie' + .pagerduty: '#/components/schemas/Connectors_create_connector_request_pagerduty' + .resilient: '#/components/schemas/Connectors_create_connector_request_resilient' + .sentinelone: '#/components/schemas/Connectors_create_connector_request_sentinelone' + .server-log: '#/components/schemas/Connectors_create_connector_request_serverlog' + .servicenow: '#/components/schemas/Connectors_create_connector_request_servicenow' + .servicenow-itom: >- + #/components/schemas/Connectors_create_connector_request_servicenow_itom + .servicenow-sir: >- + #/components/schemas/Connectors_create_connector_request_servicenow_sir + .slack: >- + #/components/schemas/Connectors_create_connector_request_slack_webhook + .slack_api: '#/components/schemas/Connectors_create_connector_request_slack_api' + .swimlane: '#/components/schemas/Connectors_create_connector_request_swimlane' + .teams: '#/components/schemas/Connectors_create_connector_request_teams' + .tines: '#/components/schemas/Connectors_create_connector_request_tines' + .torq: '#/components/schemas/Connectors_create_connector_request_torq' + .webhook: '#/components/schemas/Connectors_create_connector_request_webhook' + .xmatters: '#/components/schemas/Connectors_create_connector_request_xmatters' + propertyName: connector_type_id + oneOf: + - $ref: '#/components/schemas/Connectors_create_connector_request_bedrock' + - $ref: '#/components/schemas/Connectors_create_connector_request_gemini' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchProps + #/components/schemas/Connectors_create_connector_request_cases_webhook + - $ref: '#/components/schemas/Connectors_create_connector_request_d3security' + - $ref: '#/components/schemas/Connectors_create_connector_request_email' + - $ref: '#/components/schemas/Connectors_create_connector_request_genai' + - $ref: '#/components/schemas/Connectors_create_connector_request_index' + - $ref: '#/components/schemas/Connectors_create_connector_request_jira' + - $ref: '#/components/schemas/Connectors_create_connector_request_opsgenie' + - $ref: '#/components/schemas/Connectors_create_connector_request_pagerduty' + - $ref: '#/components/schemas/Connectors_create_connector_request_resilient' + - $ref: '#/components/schemas/Connectors_create_connector_request_sentinelone' + - $ref: '#/components/schemas/Connectors_create_connector_request_serverlog' + - $ref: '#/components/schemas/Connectors_create_connector_request_servicenow' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchProps + #/components/schemas/Connectors_create_connector_request_servicenow_itom - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchProps + #/components/schemas/Connectors_create_connector_request_servicenow_sir + - $ref: '#/components/schemas/Connectors_create_connector_request_slack_api' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRulePatchProps - Security_Solution_Detections_API_RulePreviewLogs: + #/components/schemas/Connectors_create_connector_request_slack_webhook + - $ref: '#/components/schemas/Connectors_create_connector_request_swimlane' + - $ref: '#/components/schemas/Connectors_create_connector_request_teams' + - $ref: '#/components/schemas/Connectors_create_connector_request_tines' + - $ref: '#/components/schemas/Connectors_create_connector_request_torq' + - $ref: '#/components/schemas/Connectors_create_connector_request_webhook' + - $ref: '#/components/schemas/Connectors_create_connector_request_xmatters' + title: Create connector request body properties + Connectors_create_connector_request_bedrock: + description: >- + The Amazon Bedrock connector uses axios to send a POST request to Amazon + Bedrock. + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' + connector_type_id: + description: The type of connector. + enum: + - .bedrock + example: .bedrock + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' + required: + - config + - connector_type_id + - name + - secrets + title: Create Amazon Bedrock connector request type: object + Connectors_create_connector_request_cases_webhook: + description: > + The Webhook - Case Management connector uses axios to send POST, PUT, + and GET requests to a case management RESTful API web service. properties: - duration: - description: Execution duration in milliseconds - type: integer - errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array - startedAt: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - warnings: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + connector_type_id: + description: The type of connector. + enum: + - .cases-webhook + example: .cases-webhook + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' + required: + - config + - connector_type_id + - name + title: Create Webhook - Case Managment connector request + type: object + Connectors_create_connector_request_d3security: + description: > + The connector uses axios to send a POST request to a D3 Security + endpoint. + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + connector_type_id: + description: The type of connector. + enum: + - .d3security + example: .d3security + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_d3security' required: - - errors - - warnings - - duration - Security_Solution_Detections_API_RulePreviewParams: + - config + - connector_type_id + - name + - secrets + title: Create D3 Security connector request type: object + Connectors_create_connector_request_email: + description: > + The email connector uses the SMTP protocol to send mail messages, using + an integration of Nodemailer. An exception is Microsoft Exchange, which + uses HTTP protocol for sending emails, Send mail. Email message text is + sent as both plain text and html text. properties: - invocationCount: - type: integer - timeframeEnd: - format: date-time + config: + $ref: '#/components/schemas/Connectors_config_properties_email' + connector_type_id: + description: The type of connector. + enum: + - .email + example: .email + type: string + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_email' required: - - invocationCount - - timeframeEnd - Security_Solution_Detections_API_RuleQuery: - type: string - Security_Solution_Detections_API_RuleReferenceArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleResponse: - anyOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_EqlRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_QueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdRule' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRule - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRule - - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_EsqlRule' - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleSignatureId: - description: 'Could be any string, not necessarily a UUID' - type: string - Security_Solution_Detections_API_RuleSource: - description: >- - Discriminated union that determines whether the rule is internally - sourced (created within the Kibana app) or has an external source, such - as the Elastic Prebuilt rules repo. - discriminator: - propertyName: type - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExternalRuleSource - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InternalRuleSource - Security_Solution_Detections_API_RuleTagArray: - description: >- - String array containing words and phrases to help categorize, filter, - and search rules. Defaults to an empty array. - items: - type: string - type: array - Security_Solution_Detections_API_RuleUpdateProps: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleUpdateProps - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleVersion: - description: The rule's version number. - minimum: 1 - type: integer - Security_Solution_Detections_API_SavedObjectResolveAliasPurpose: - enum: - - savedObjectConversion - - savedObjectImport - type: string - Security_Solution_Detections_API_SavedObjectResolveAliasTargetId: - type: string - Security_Solution_Detections_API_SavedObjectResolveOutcome: - enum: - - exactMatch - - aliasMatch - - conflict - type: string - Security_Solution_Detections_API_SavedQueryId: - type: string - Security_Solution_Detections_API_SavedQueryRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleResponseFields - Security_Solution_Detections_API_SavedQueryRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SavedQueryRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_SavedQueryRuleOptionalFields: + - config + - connector_type_id + - name + - secrets + title: Create email connector request type: object + Connectors_create_connector_request_gemini: + description: >- + The Google Gemini connector uses axios to send a POST request to Google + Gemini. properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - response_actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction - type: array - Security_Solution_Detections_API_SavedQueryRulePatchFields: - allOf: - - type: object - properties: - saved_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryId - type: - description: Rule type - enum: - - saved_query - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchFields - Security_Solution_Detections_API_SavedQueryRuleRequiredFields: + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' + connector_type_id: + description: The type of connector. + enum: + - .gemini + example: .gemini + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_gemini' + required: + - config + - connector_type_id + - name + - secrets + title: Create Google Gemini connector request type: object + Connectors_create_connector_request_genai: + description: > + The OpenAI connector uses axios to send a POST request to either OpenAI + or Azure OpenAPI. properties: - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_genai' + connector_type_id: + description: The type of connector. enum: - - saved_query + - .gen-ai + example: .gen-ai + type: string + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_genai' required: - - type - - saved_id - Security_Solution_Detections_API_SavedQueryRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_SavedQueryRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SetAlertsStatusByIds: + - config + - connector_type_id + - name + - secrets + title: Create OpenAI connector request type: object + Connectors_create_connector_request_index: + description: The index connector indexes a document into Elasticsearch. properties: - signal_ids: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - minItems: 1 - type: array - status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + connector_type_id: + description: The type of connector. + enum: + - .index + example: .index + type: string + name: + description: The display name for the connector. + example: my-connector + type: string required: - - signal_ids - - status - Security_Solution_Detections_API_SetAlertsStatusByQuery: + - config + - connector_type_id + - name + title: Create index connector request type: object + Connectors_create_connector_request_jira: + description: The Jira connector uses the REST API v2 to create Jira issues. properties: - conflicts: - default: abort + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' + connector_type_id: + description: The type of connector. enum: - - abort - - proceed + - .jira + example: .jira type: string - query: - additionalProperties: true - type: object - status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_jira' required: - - query - - status - Security_Solution_Detections_API_SetAlertTags: + - config + - connector_type_id + - name + - secrets + title: Create Jira connector request type: object + Connectors_create_connector_request_opsgenie: + description: The Opsgenie connector uses the Opsgenie alert API. properties: - tags_to_add: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' - tags_to_remove: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + connector_type_id: + description: The type of connector. + enum: + - .opsgenie + example: .opsgenie + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' required: - - tags_to_add - - tags_to_remove - Security_Solution_Detections_API_SetupGuide: - type: string - Security_Solution_Detections_API_Severity: - description: Severity of the rule - enum: - - low - - medium - - high - - critical - type: string - Security_Solution_Detections_API_SeverityMapping: - description: Overrides generated alerts' severity with values from the source event - items: - type: object - properties: - field: - type: string - operator: - enum: - - equals - type: string - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - value: - type: string - required: - - field - - operator - - severity - - value - type: array - Security_Solution_Detections_API_SiemErrorResponse: + - config + - connector_type_id + - name + - secrets + title: Create Opsgenie connector request type: object + Connectors_create_connector_request_pagerduty: + description: > + The PagerDuty connector uses the v2 Events API to trigger, acknowledge, + and resolve PagerDuty alerts. properties: - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + connector_type_id: + description: The type of connector. + enum: + - .pagerduty + example: .pagerduty type: string - status_code: - type: integer + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' required: - - status_code - - message - Security_Solution_Detections_API_SortOrder: - enum: - - asc - - desc - type: string - Security_Solution_Detections_API_Threat: + - config + - connector_type_id + - name + - secrets + title: Create PagerDuty connector request type: object + Connectors_create_connector_request_resilient: + description: >- + The IBM Resilient connector uses the RESILIENT REST v2 to create IBM + Resilient incidents. properties: - framework: - description: Relevant attack framework + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + connector_type_id: + description: The type of connector. + enum: + - .resilient + example: .resilient type: string - tactic: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatTactic' - technique: - description: Array containing information on the attack techniques (optional) - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatTechnique - type: array + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_resilient' required: - - framework - - tactic - Security_Solution_Detections_API_ThreatArray: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threat' - type: array - Security_Solution_Detections_API_ThreatFilters: - items: - description: >- - Query and filter context array used to filter documents from the - Elasticsearch index containing the threat values - type: array - Security_Solution_Detections_API_ThreatIndex: - items: - type: string - type: array - Security_Solution_Detections_API_ThreatIndicatorPath: - description: >- - Defines the path to the threat indicator in the indicator documents - (optional) - type: string - Security_Solution_Detections_API_ThreatMapping: - items: - type: object - properties: - entries: - items: - type: object - properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: - enum: - - mapping - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - required: - - field - - type - - value - type: array - required: - - entries - minItems: 1 - type: array - Security_Solution_Detections_API_ThreatMatchRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleResponseFields - Security_Solution_Detections_API_ThreatMatchRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields: + - config + - connector_type_id + - name + - secrets + title: Create IBM Resilient connector request type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRuleOptionalFields: + Connectors_create_connector_request_sentinelone: + description: > + The SentinelOne connector communicates with SentinelOne Management + Console via REST API. This functionality is in technical preview and may + be changed or removed in a future release. Elastic will work to fix any + issues, but features in technical preview are not subject to the support + SLA of official GA features. + title: Create SentinelOne connector request type: object properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - concurrent_searches: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ConcurrentSearches - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - items_per_search: - $ref: '#/components/schemas/Security_Solution_Detections_API_ItemsPerSearch' - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - threat_filters: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatFilters' - threat_indicator_path: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndicatorPath - threat_language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRulePatchFields: - allOf: - - type: object - properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threat_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndex - threat_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMapping - threat_query: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatQuery - type: - description: Rule type - enum: - - threat_match - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchFields - Security_Solution_Detections_API_ThreatMatchRuleRequiredFields: - type: object + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + connector_type_id: + description: The type of connector. + enum: + - .sentinelone + example: .sentinelone + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' + required: + - config + - connector_type_id + - name + - secrets + x-technical-preview: true + Connectors_create_connector_request_serverlog: + description: This connector writes an entry to the Kibana server log. properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threat_index: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatIndex' - threat_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatMapping' - threat_query: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatQuery' - type: - description: Rule type + connector_type_id: + description: The type of connector. enum: - - threat_match + - .server-log + example: .server-log + type: string + name: + description: The display name for the connector. + example: my-connector type: string required: - - type - - query - - threat_query - - threat_mapping - - threat_index - Security_Solution_Detections_API_ThreatMatchRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_ThreatMatchRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatQuery: - description: Query to run - type: string - Security_Solution_Detections_API_ThreatSubtechnique: + - connector_type_id + - name + title: Create server log connector request type: object + Connectors_create_connector_request_servicenow: + description: > + The ServiceNow ITSM connector uses the import set API to create + ServiceNow incidents. You can use the connector for rule actions and + cases. properties: - id: - description: Subtechnique ID + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. + enum: + - .servicenow + example: .servicenow type: string name: - description: Subtechnique name - type: string - reference: - description: Subtechnique reference + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - id + - config + - connector_type_id - name - - reference - Security_Solution_Detections_API_ThreatTactic: + - secrets + title: Create ServiceNow ITSM connector request type: object + Connectors_create_connector_request_servicenow_itom: + description: > + The ServiceNow ITOM connector uses the event API to create ServiceNow + events. You can use the connector for rule actions. properties: - id: - description: Tactic ID + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + connector_type_id: + description: The type of connector. + enum: + - .servicenow-itom + example: .servicenow-itom type: string name: - description: Tactic name - type: string - reference: - description: Tactic reference + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - id + - config + - connector_type_id - name - - reference - Security_Solution_Detections_API_ThreatTechnique: + - secrets + title: Create ServiceNow ITOM connector request type: object + Connectors_create_connector_request_servicenow_sir: + description: > + The ServiceNow SecOps connector uses the import set API to create + ServiceNow security incidents. You can use the connector for rule + actions and cases. properties: - id: - description: Technique ID + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. + enum: + - .servicenow-sir + example: .servicenow-sir type: string name: - description: Technique name - type: string - reference: - description: Technique reference + description: The display name for the connector. + example: my-connector type: string - subtechnique: - description: Array containing more specific information on the attack technique - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatSubtechnique - type: array + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - id + - config + - connector_type_id - name - - reference - Security_Solution_Detections_API_Threshold: - type: object - properties: - cardinality: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdCardinality - field: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdField' - value: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdValue' - required: - - field - - value - Security_Solution_Detections_API_ThresholdAlertSuppression: - type: object - properties: - duration: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration - required: - - duration - Security_Solution_Detections_API_ThresholdCardinality: - items: - type: object - properties: - field: - type: string - value: - minimum: 0 - type: integer - required: - - field - - value - type: array - Security_Solution_Detections_API_ThresholdField: - description: Field to aggregate on - oneOf: - - type: string - - items: - type: string - type: array - Security_Solution_Detections_API_ThresholdRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleResponseFields - Security_Solution_Detections_API_ThresholdRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThresholdRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdAlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_ThresholdRulePatchFields: - allOf: - - type: object - properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' - type: - description: Rule type - enum: - - threshold - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchFields - Security_Solution_Detections_API_ThresholdRuleRequiredFields: + - secrets + title: Create ServiceNow SecOps connector request type: object + Connectors_create_connector_request_slack_api: + description: The Slack connector uses an API method to send Slack messages. properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + connector_type_id: + description: The type of connector. enum: - - threshold - type: string - required: - - type - - query - - threshold - Security_Solution_Detections_API_ThresholdRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_ThresholdRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdValue: - description: Threshold value - minimum: 1 - type: integer - Security_Solution_Detections_API_ThrottleForBulkActions: - description: >- - The condition for throttling the notification: 'rule', 'no_actions', or - time duration - enum: - - rule - - 1h - - 1d - - 7d - type: string - Security_Solution_Detections_API_TiebreakerField: - description: Sets a secondary field for sorting events - type: string - Security_Solution_Detections_API_TimelineTemplateId: - description: Timeline template ID - type: string - Security_Solution_Detections_API_TimelineTemplateTitle: - description: Timeline template title - type: string - Security_Solution_Detections_API_TimestampField: - description: Contains the event timestamp used for sorting a sequence of events - type: string - Security_Solution_Detections_API_TimestampOverride: - description: Sets the time field used to query indices - type: string - Security_Solution_Detections_API_TimestampOverrideFallbackDisabled: - description: Disables the fallback to the event's @timestamp field - type: boolean - Security_Solution_Detections_API_UUID: - description: A universally unique identifier - format: uuid - type: string - Security_Solution_Detections_API_WarningSchema: - type: object - properties: - actionPath: - type: string - buttonLabel: - type: string - message: + - .slack_api + example: .slack_api type: string - type: + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' required: - - type - - message - - actionPath - Security_Solution_Endpoint_Exceptions_API_EndpointList: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionList - - additionalProperties: false - type: object - Security_Solution_Endpoint_Exceptions_API_EndpointListItem: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItem - Security_Solution_Endpoint_Exceptions_API_ExceptionList: + - connector_type_id + - name + - secrets + title: Create Slack connector request type: object + Connectors_create_connector_request_slack_webhook: + description: The Slack connector uses Slack Incoming Webhooks. properties: - _version: - type: string - created_at: - format: date-time - type: string - created_by: + connector_type_id: + description: The type of connector. + enum: + - .slack + example: .slack type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListId - immutable: - type: boolean - list_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListType - updated_at: - format: date-time - type: string - updated_by: + description: The display name for the connector. + example: my-connector type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' required: - - id - - list_id - - type + - connector_type_id - name - - description - - immutable - - namespace_type - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - description: 'Human readable string identifier, e.g. `trusted-linux-processes`' - Security_Solution_Endpoint_Exceptions_API_ExceptionListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItem: + - secrets + title: Create Slack connector request type: object + Connectors_create_connector_request_swimlane: + description: >- + The Swimlane connector uses the Swimlane REST API to create Swimlane + records. properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + connector_type_id: + description: The type of connector. + enum: + - .swimlane + example: .swimlane type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - tie_breaker_id: + description: The display name for the connector. + example: my-connector type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - updated_at: - format: date-time + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' + required: + - config + - connector_type_id + - name + - secrets + title: Create Swimlane connector request + type: object + Connectors_create_connector_request_teams: + description: The Microsoft Teams connector uses Incoming Webhooks. + properties: + connector_type_id: + description: The type of connector. + enum: + - .teams + example: .teams type: string - updated_by: + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_teams' required: - - id - - item_id - - list_id - - type + - connector_type_id - name - - description - - entries - - namespace_type - - comments - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment: + - secrets + title: Create Microsoft Teams connector request type: object + Connectors_create_connector_request_tines: + description: > + The Tines connector uses Tines Webhook actions to send events via POST + request. properties: - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - created_at: - format: date-time + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' + connector_type_id: + description: The type of connector. + enum: + - .tines + example: .tines type: string - created_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - updated_at: - format: date-time + name: + description: The display name for the connector. + example: my-connector type: string - updated_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_tines' required: - - id - - comment - - created_at - - created_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard - discriminator: - propertyName: type - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists: + - config + - connector_type_id + - name + - secrets + title: Create Tines connector request type: object + Connectors_create_connector_request_torq: + description: > + The Torq connector uses a Torq webhook to trigger workflows with Kibana + actions. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + connector_type_id: + description: The type of connector. enum: - - exists + - .torq + example: .torq + type: string + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_torq' required: - - type - - field - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList: + - config + - connector_type_id + - name + - secrets + title: Create Torq connector request type: object + Connectors_create_connector_request_webhook: + description: > + The Webhook connector uses axios to send a POST or PUT request to a web + service. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - list: - type: object - properties: - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListId - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListType - required: - - id - - type - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + connector_type_id: + description: The type of connector. enum: - - list + - .webhook + example: .webhook + type: string + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_webhook' required: - - type - - field - - list - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: + - config + - connector_type_id + - name + - secrets + title: Create Webhook connector request type: object + Connectors_create_connector_request_xmatters: + description: > + The xMatters connector uses the xMatters Workflow for Elastic to send + actionable alerts to on-call xMatters resources. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + connector_type_id: + description: The type of connector. enum: - - match + - .xmatters + example: .xmatters type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: + - config + - connector_type_id + - name + - secrets + title: Create xMatters connector request type: object + Connectors_features: + description: | + The feature that uses the connector. + enum: + - alerting + - cases + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - siem + - uptime + type: string + Connectors_is_deprecated: + description: Indicates whether the connector type is deprecated. + example: false + type: boolean + Connectors_is_missing_secrets: + description: >- + Indicates whether secrets are missing for the connector. Secrets + configuration properties vary depending on the connector type. + example: false + type: boolean + Connectors_is_preconfigured: + description: > + Indicates whether it is a preconfigured connector. If true, the `config` + and `is_missing_secrets` properties are omitted from the response. + example: false + type: boolean + Connectors_is_system_action: + description: Indicates whether the connector is used for system actions. + example: false + type: boolean + Connectors_referenced_by_count: + description: > + Indicates the number of saved objects that reference the connector. If + `is_preconfigured` is true, this value is not calculated. This property + is returned only by the get all connectors API. + example: 2 + type: integer + Connectors_secrets_properties_bedrock: + description: Defines secrets for connectors when type is `.bedrock`. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match_any + accessKey: + description: The AWS access key for authentication. + type: string + secret: + description: The AWS secret for authentication. type: string - value: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - minItems: 1 - type: array required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: + - accessKey + - secret + title: Connector secrets properties for an Amazon Bedrock connector + type: object + Connectors_secrets_properties_cases_webhook: + title: Connector secrets properties for Webhook - Case Management connector type: object properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - wildcard + password: + description: >- + The password for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested: + user: + description: >- + The username for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. + type: string + Connectors_secrets_properties_d3security: + description: Defines secrets for connectors when type is `.d3security`. type: object properties: - entries: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem - minItems: 1 - type: array - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - type: - enum: - - nested + token: + description: The D3 Security token. type: string required: - - type - - field - - entries - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: - enum: - - excluded - - included - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta: - additionalProperties: true - type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType: - enum: - - simple - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta: - additionalProperties: true - type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListName: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType: - enum: - - linux - - macos - - windows - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListTags: - items: - type: string - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListType: - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion: - minimum: 1 - type: integer - Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType: - description: > - Determines whether the exception container is available in all Kibana - spaces or just the space - - in which it is created, where: - - - - `single`: Only available in the Kibana space in which it is created. - - - `agnostic`: Available in all Kibana spaces. - enum: - - agnostic - - single - type: string - Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Endpoint_Exceptions_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse: - type: object + - token + title: Connector secrets properties for a D3 Security connector + Connectors_secrets_properties_email: + description: Defines secrets for connectors when type is `.email`. properties: - error: + clientSecret: + description: > + The Microsoft Exchange Client secret for OAuth 2.0 client + credentials authentication. It must be URL-encoded. If `service` is + `exchange_server`, this property is required. type: string - message: + password: + description: > + The password for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - statusCode: - type: integer - required: - - statusCode - - error - - message - Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse: + user: + description: > + The username for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. + type: string + title: Connector secrets properties for an email connector type: object + Connectors_secrets_properties_gemini: + description: Defines secrets for connectors when type is `.gemini`. properties: - message: + credentialsJSON: + description: >- + The service account credentials JSON file. The service account + should have Vertex AI user IAM role assigned to it. type: string - status_code: - type: integer required: - - status_code - - message - Security_Solution_Endpoint_Management_API_ActionLogRequestQuery: + - credentialsJSON + title: Connector secrets properties for a Google Gemini connector type: object + Connectors_secrets_properties_genai: + description: Defines secrets for connectors when type is `.gen-ai`. properties: - end_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate - page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' - page_size: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PageSize - start_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse: + apiKey: + description: The OpenAI API key. + type: string + title: Connector secrets properties for an OpenAI connector + type: object + Connectors_secrets_properties_jira: + description: Defines secrets for connectors when type is `.jira`. type: object properties: - body: - type: object - properties: - data: - type: object - properties: - canEncrypt: - type: boolean - required: - - data + apiToken: + description: The Jira API authentication token for HTTP basic authentication. + type: string + email: + description: The account email for HTTP Basic authentication. + type: string required: - - body - Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse: + - apiToken + - email + title: Connector secrets properties for a Jira connector + Connectors_secrets_properties_opsgenie: + description: Defines secrets for connectors when type is `.opsgenie`. type: object properties: - body: - type: object - properties: - data: - type: object - properties: - agent_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - pending_actions: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionsSchema - required: - - agent_id - - pending_actions - required: - - data + apiKey: + description: The Opsgenie API authentication key for HTTP Basic authentication. + type: string required: - - body - Security_Solution_Endpoint_Management_API_AgentId: - description: Agent ID - type: string - Security_Solution_Endpoint_Management_API_AgentIds: - minLength: 1 - oneOf: - - items: - minLength: 1 - type: string - maxItems: 50 - minItems: 1 - type: array - - minLength: 1 + - apiKey + title: Connector secrets properties for an Opsgenie connector + Connectors_secrets_properties_pagerduty: + description: Defines secrets for connectors when type is `.pagerduty`. + properties: + routingKey: + description: > + A 32 character PagerDuty Integration Key for an integration on a + service. type: string - Security_Solution_Endpoint_Management_API_AgentTypes: - enum: - - endpoint - - sentinel_one - - crowdstrike - type: string - Security_Solution_Endpoint_Management_API_AlertIds: - description: A list of alerts ids. - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NonEmptyString - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_CaseIds: - description: Case IDs to be updated (cannot contain empty strings) - items: - minLength: 1 - type: string - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_Command: - description: The command to be executed (cannot be an empty string) - enum: - - isolate - - unisolate - - kill-process - - suspend-process - - running-processes - - get-file - - execute - - upload - - scan - minLength: 1 - type: string - Security_Solution_Endpoint_Management_API_Commands: - items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Command' - type: array - Security_Solution_Endpoint_Management_API_Comment: - description: Optional comment - type: string - Security_Solution_Endpoint_Management_API_EndDate: - description: End date - type: string - Security_Solution_Endpoint_Management_API_EndpointIds: - description: List of endpoint IDs (cannot contain empty strings) - items: - minLength: 1 - type: string - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - command: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Command - timeout: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Timeout - required: - - command - required: - - parameters - Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery: + required: + - routingKey + title: Connector secrets properties for a PagerDuty connector type: object - properties: - agentIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds - agentTypes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - commands: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Commands - endDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate - page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - types: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Types' - userIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UserIds - withOutputs: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_WithOutputs - Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - path: - type: string - required: - - path - required: - - parameters - Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - oneOf: - - type: object - properties: - pid: - minimum: 1 - type: integer - - type: object - properties: - entity_id: - minLength: 1 - type: string - required: - - parameters - Security_Solution_Endpoint_Management_API_ListRequestQuery: + Connectors_secrets_properties_resilient: + description: Defines secrets for connectors when type is `.resilient`. type: object properties: - hostStatuses: - items: - enum: - - healthy - - offline - - updating - - inactive - - unenrolled - type: string - type: array - kuery: - nullable: true - type: string - page: - default: 0 - description: Page number - minimum: 0 - type: integer - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - sortDirection: - enum: - - asc - - desc - nullable: true + apiKeyId: + description: The authentication key ID for HTTP Basic authentication. type: string - sortField: - enum: - - enrolled_at - - metadata.host.hostname - - host_status - - metadata.Endpoint.policy.applied.name - - metadata.Endpoint.policy.applied.status - - metadata.host.os.name - - metadata.host.ip - - metadata.agent.version - - last_checkin + apiKeySecret: + description: The authentication key secret for HTTP Basic authentication. type: string required: - - hostStatuses - Security_Solution_Endpoint_Management_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Endpoint_Management_API_NoParametersRequestSchema: - type: object + - apiKeyId + - apiKeySecret + title: Connector secrets properties for IBM Resilient connector + Connectors_secrets_properties_sentinelone: + description: Defines secrets for connectors when type is `.sentinelone`. properties: - body: - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids + token: + description: The A SentinelOne API token. + type: string required: - - body - Security_Solution_Endpoint_Management_API_Page: - default: 1 - description: Page number - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_PageSize: - default: 10 - description: Number of items per page - maximum: 100 - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_Parameters: - description: Optional parameters object - type: object - Security_Solution_Endpoint_Management_API_PendingActionDataType: - type: integer - Security_Solution_Endpoint_Management_API_PendingActionsSchema: - oneOf: - - type: object - properties: - execute: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - get-file: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - isolate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - kill-process: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - running-processes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - scan: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - suspend-process: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - unisolate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - upload: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - - additionalProperties: true - type: object - Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse: + - token + title: Connector secrets properties for a SentinelOne connector type: object + Connectors_secrets_properties_servicenow: + description: >- + Defines secrets for connectors when type is `.servicenow`, + `.servicenow-sir`, or `.servicenow-itom`. properties: - note: + clientSecret: + description: >- + The client secret assigned to your OAuth application. This property + is required when `isOAuth` is `true`. type: string - Security_Solution_Endpoint_Management_API_ScanRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - path: - type: string - required: - - path - required: - - parameters - Security_Solution_Endpoint_Management_API_StartDate: - description: Start date - type: string - Security_Solution_Endpoint_Management_API_SuccessResponse: - type: object - properties: {} - Security_Solution_Endpoint_Management_API_Timeout: - description: The maximum timeout value in milliseconds (optional) - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_Type: - description: Type of response action - enum: - - automated - - manual - type: string - Security_Solution_Endpoint_Management_API_Types: - description: List of types of response actions - items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Type' - maxLength: 2 - minLength: 1 - type: array - Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_UploadRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - file: - format: binary - type: string - parameters: - type: object - properties: - overwrite: - default: false - type: boolean - required: - - parameters - - file - Security_Solution_Endpoint_Management_API_UserIds: - description: User IDs - oneOf: - - items: - minLength: 1 - type: string - minItems: 1 - type: array - - minLength: 1 + password: + description: >- + The password for HTTP basic authentication. This property is + required when `isOAuth` is `false`. type: string - Security_Solution_Endpoint_Management_API_WithOutputs: - description: Shows detailed outputs for an action response - oneOf: - - items: - minLength: 1 - type: string - minItems: 1 - type: array - - minLength: 1 + privateKey: + description: >- + The RSA private key that you created for use in ServiceNow. This + property is required when `isOAuth` is `true`. + type: string + privateKeyPassword: + description: >- + The password for the RSA private key. This property is required when + `isOAuth` is `true` and you set a password on your private key. + type: string + username: + description: >- + The username for HTTP basic authentication. This property is + required when `isOAuth` is `false`. type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: + title: >- + Connector secrets properties for ServiceNow ITOM, ServiceNow ITSM, and + ServiceNow SecOps connectors + type: object + Connectors_secrets_properties_slack_api: + description: Defines secrets for connectors when type is `.slack`. type: object properties: - index: - type: integer - message: + token: + description: Slack bot user OAuth token. type: string required: - - message - - index - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats: + - token + title: Connector secrets properties for a Web API Slack connector + Connectors_secrets_properties_slack_webhook: + description: Defines secrets for connectors when type is `.slack`. type: object properties: - failed: - type: integer - successful: - type: integer - total: - type: integer + webhookUrl: + description: Slack webhook url. + type: string required: - - successful - - failed - - total - Security_Solution_Entity_Analytics_API_AssetCriticalityLevel: - description: The criticality level of the asset. - enum: - - low_impact - - medium_impact - - high_impact - - extreme_impact - type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityRecord: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - - type: object - properties: - '@timestamp': - description: The time the record was created or updated. - example: '2017-07-21T17:32:28Z' - format: date-time - type: string - required: - - '@timestamp' - Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts: - type: object + - webhookUrl + title: Connector secrets properties for a Webhook Slack connector + Connectors_secrets_properties_swimlane: + description: Defines secrets for connectors when type is `.swimlane`. properties: - id_field: - $ref: '#/components/schemas/Security_Solution_Entity_Analytics_API_IdField' - description: The field representing the ID. - example: host.name - id_value: - description: The ID value of the asset. + apiToken: + description: Swimlane API authentication token. type: string - required: - - id_value - - id_field - Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts - - type: object - properties: - criticality_level: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityLevel - required: - - criticality_level - Security_Solution_Entity_Analytics_API_IdField: - enum: - - host.name - - user.name - type: string - Security_Solution_Exceptions_API_CreateExceptionListItemComment: + title: Connector secrets properties for a Swimlane connector type: object + Connectors_secrets_properties_teams: + description: Defines secrets for connectors when type is `.teams`. properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + webhookUrl: + description: > + The URL of the incoming webhook. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. + type: string required: - - comment - Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemComment - type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment: + - webhookUrl + title: Connector secrets properties for a Microsoft Teams connector type: object + Connectors_secrets_properties_tines: + description: Defines secrets for connectors when type is `.tines`. properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + email: + description: The email used to sign in to Tines. + type: string + token: + description: The Tines API token. + type: string required: - - comment - Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment - type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps: + - email + - token + title: Connector secrets properties for a Tines connector type: object + Connectors_secrets_properties_torq: + description: Defines secrets for connectors when type is `.torq`. properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time + token: + description: The secret of the webhook authentication header. type: string - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType required: - - type - - name - - description - - entries - Security_Solution_Exceptions_API_ExceptionList: + - token + title: Connector secrets properties for a Torq connector type: object + Connectors_secrets_properties_webhook: + description: Defines secrets for connectors when type is `.webhook`. properties: - _version: + crt: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-crt-key`, it is a base64 encoded version of the CRT or CERT + file. type: string - created_at: - format: date-time + key: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-crt-key`, it is a base64 encoded version of the KEY file. type: string - created_by: + password: + description: > + The password for HTTP basic authentication or the passphrase for the + SSL certificate files. If `hasAuth` is set to `true` and `authType` + is `webhook-authentication-basic`, this property is required. type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - immutable: - type: boolean - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - tie_breaker_id: + pfx: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-pfx`, it is a base64 encoded version of the PFX or P12 file. type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - updated_at: - format: date-time + user: + description: > + The username for HTTP basic authentication. If `hasAuth` is set to + `true` and `authType` is `webhook-authentication-basic`, this + property is required. type: string - updated_by: + title: Connector secrets properties for a Webhook connector + type: object + Connectors_secrets_properties_xmatters: + description: Defines secrets for connectors when type is `.xmatters`. + properties: + password: + description: > + A user name for HTTP basic authentication. It is applicable only + when `usesBasic` is `true`. type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion - required: - - id - - list_id - - type - - name - - description - - immutable - - namespace_type - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Exceptions_API_ExceptionListDescription: - type: string - Security_Solution_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - description: 'Human readable string identifier, e.g. `trusted-linux-processes`' - Security_Solution_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItem: + secretsUrl: + description: > + The request URL for the Elastic Alerts trigger in xMatters with the + API key included in the URL. It is applicable only when `usesBasic` + is `false`. + type: string + user: + description: > + A password for HTTP basic authentication. It is applicable only when + `usesBasic` is `true`. + type: string + title: Connector secrets properties for an xMatters connector + type: object + Connectors_update_connector_request: + description: The properties vary depending on the connector type. + oneOf: + - $ref: '#/components/schemas/Connectors_update_connector_request_bedrock' + - $ref: '#/components/schemas/Connectors_update_connector_request_gemini' + - $ref: >- + #/components/schemas/Connectors_update_connector_request_cases_webhook + - $ref: '#/components/schemas/Connectors_update_connector_request_d3security' + - $ref: '#/components/schemas/Connectors_update_connector_request_email' + - $ref: '#/components/schemas/Connectors_create_connector_request_genai' + - $ref: '#/components/schemas/Connectors_update_connector_request_index' + - $ref: '#/components/schemas/Connectors_update_connector_request_jira' + - $ref: '#/components/schemas/Connectors_update_connector_request_opsgenie' + - $ref: '#/components/schemas/Connectors_update_connector_request_pagerduty' + - $ref: '#/components/schemas/Connectors_update_connector_request_resilient' + - $ref: '#/components/schemas/Connectors_update_connector_request_sentinelone' + - $ref: '#/components/schemas/Connectors_update_connector_request_serverlog' + - $ref: '#/components/schemas/Connectors_update_connector_request_servicenow' + - $ref: >- + #/components/schemas/Connectors_update_connector_request_servicenow_itom + - $ref: '#/components/schemas/Connectors_update_connector_request_slack_api' + - $ref: >- + #/components/schemas/Connectors_update_connector_request_slack_webhook + - $ref: '#/components/schemas/Connectors_update_connector_request_swimlane' + - $ref: '#/components/schemas/Connectors_update_connector_request_teams' + - $ref: '#/components/schemas/Connectors_update_connector_request_tines' + - $ref: '#/components/schemas/Connectors_update_connector_request_torq' + - $ref: '#/components/schemas/Connectors_update_connector_request_webhook' + - $ref: '#/components/schemas/Connectors_update_connector_request_xmatters' + title: Update connector request body properties + Connectors_update_connector_request_bedrock: + title: Update Amazon Bedrock connector request type: object properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemCommentArray - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - updated_at: - format: date-time - type: string - updated_by: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' required: - - id - - item_id - - list_id - - type + - config - name - - description - - entries - - namespace_type - - comments - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Exceptions_API_ExceptionListItemComment: + Connectors_update_connector_request_cases_webhook: + title: Update Webhook - Case Managment connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - created_at: - format: date-time - type: string - created_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - updated_at: - format: date-time + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + name: + description: The display name for the connector. + example: my-connector type: string - updated_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' required: - - id - - comment - - created_at - - created_by - Security_Solution_Exceptions_API_ExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemComment - type: array - Security_Solution_Exceptions_API_ExceptionListItemDescription: - type: string - Security_Solution_Exceptions_API_ExceptionListItemEntry: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryList - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNested - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard - discriminator: - propertyName: type - Security_Solution_Exceptions_API_ExceptionListItemEntryArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntry - type: array - Security_Solution_Exceptions_API_ExceptionListItemEntryExists: + - config + - name + Connectors_update_connector_request_d3security: + title: Update D3 Security connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - exists + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_d3security' required: - - type - - field - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryList: + - config + - name + - secrets + Connectors_update_connector_request_email: + title: Update email connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - list: - type: object - properties: - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListId' - type: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListType' - required: - - id - - type - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - list + config: + $ref: '#/components/schemas/Connectors_config_properties_email' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_email' required: - - type - - field - - list - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatch: + - config + - name + Connectors_update_connector_request_gemini: + title: Update Google Gemini connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_gemini' required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny: + - config + - name + Connectors_update_connector_request_index: + title: Update index connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match_any + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + name: + description: The display name for the connector. type: string - value: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString - minItems: 1 - type: array required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard: + - config + - name + Connectors_update_connector_request_jira: + title: Update Jira connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - wildcard + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_jira' required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryNested: + - config + - name + - secrets + Connectors_update_connector_request_opsgenie: + title: Update Opsgenie connector request type: object properties: - entries: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem - minItems: 1 - type: array - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - type: - enum: - - nested + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' required: - - type - - field - - entries - Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Exceptions_API_ExceptionListItemEntryOperator: - enum: - - excluded - - included - type: string - Security_Solution_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemMeta: - additionalProperties: true - type: object - Security_Solution_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Exceptions_API_ExceptionListItemTags: - items: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - type: array - Security_Solution_Exceptions_API_ExceptionListItemType: - enum: - - simple - type: string - Security_Solution_Exceptions_API_ExceptionListMeta: - additionalProperties: true - type: object - Security_Solution_Exceptions_API_ExceptionListName: - type: string - Security_Solution_Exceptions_API_ExceptionListOsType: - enum: - - linux - - macos - - windows - type: string - Security_Solution_Exceptions_API_ExceptionListOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Exceptions_API_ExceptionListsImportBulkError: + - config + - name + - secrets + Connectors_update_connector_request_pagerduty: + title: Update PagerDuty connector request type: object properties: - error: - type: object - properties: - message: - type: string - status_code: - type: integer - required: - - status_code - - message - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' required: - - error - Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkError - type: array - Security_Solution_Exceptions_API_ExceptionListTags: - items: - type: string - type: array - Security_Solution_Exceptions_API_ExceptionListType: - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Exceptions_API_ExceptionListVersion: - minimum: 1 - type: integer - Security_Solution_Exceptions_API_ExceptionNamespaceType: - description: > - Determines whether the exception container is available in all Kibana - spaces or just the space - - in which it is created, where: - - - - `single`: Only available in the Kibana space in which it is created. - - - `agnostic`: Available in all Kibana spaces. - enum: - - agnostic - - single - type: string - Security_Solution_Exceptions_API_FindExceptionListItemsFilter: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_FindExceptionListsFilter: - type: string - Security_Solution_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Exceptions_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Exceptions_API_PlatformErrorResponse: + - config + - name + - secrets + Connectors_update_connector_request_resilient: + title: Update IBM Resilient connector request type: object properties: - error: - type: string - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + name: + description: The display name for the connector. type: string - statusCode: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_resilient' required: - - statusCode - - error - - message - Security_Solution_Exceptions_API_RuleId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_UUID' - Security_Solution_Exceptions_API_SiemErrorResponse: + - config + - name + - secrets + Connectors_update_connector_request_sentinelone: + title: Update SentinelOne connector request type: object properties: - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + name: + description: The display name for the connector. type: string - status_code: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' required: - - status_code - - message - Security_Solution_Exceptions_API_UpdateExceptionListItemComment: + - config + - name + - secrets + Connectors_update_connector_request_serverlog: + title: Update server log connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + name: + description: The display name for the connector. + type: string required: - - comment - Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemComment - type: array - Security_Solution_Exceptions_API_UUID: - description: A universally unique identifier - format: uuid - type: string - Security_Solution_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListItemsFilter: - type: string - Security_Solution_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListsFilter: - type: string - Security_Solution_Lists_API_List: + - name + Connectors_update_connector_request_servicenow: + title: Update ServiceNow ITSM connector or ServiceNow SecOps request type: object properties: - _version: - type: string - '@timestamp': - format: date-time - type: string - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListDescription' - deserializer: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - immutable: - type: boolean - meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListMetadata' + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - serializer: - type: string - tie_breaker_id: - type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - updated_at: - format: date-time - type: string - updated_by: + description: The display name for the connector. type: string - version: - minimum: 1 - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - id - - type + - config - name - - description - - immutable - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItem: + - secrets + Connectors_update_connector_request_servicenow_itom: + title: Create ServiceNow ITOM connector request type: object properties: - _version: - type: string - '@timestamp': - format: date-time - type: string - created_at: - format: date-time - type: string - created_by: - type: string - deserializer: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemMetadata' - serializer: - type: string - tie_breaker_id: - type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - updated_at: - format: date-time - type: string - updated_by: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemValue' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - id - - type - - list_id - - value - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItemMetadata: - additionalProperties: true - type: object - Security_Solution_Lists_API_ListItemPrivileges: + - config + - name + - secrets + Connectors_update_connector_request_slack_api: + title: Update Slack connector request type: object properties: - application: - additionalProperties: - type: boolean - type: object - cluster: - additionalProperties: - type: boolean - type: object - has_all_requested: - type: boolean - index: - additionalProperties: - additionalProperties: - type: boolean - type: object - type: object - username: + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' required: - - username - - has_all_requested - - cluster - - index - - application - Security_Solution_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListMetadata: - additionalProperties: true - type: object - Security_Solution_Lists_API_ListName: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListPrivileges: + - name + - secrets + Connectors_update_connector_request_slack_webhook: + title: Update Slack connector request type: object properties: - application: - additionalProperties: - type: boolean - type: object - cluster: - additionalProperties: - type: boolean - type: object - has_all_requested: - type: boolean - index: - additionalProperties: - additionalProperties: - type: boolean - type: object - type: object - username: + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' required: - - username - - has_all_requested - - cluster - - index - - application - Security_Solution_Lists_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Lists_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Lists_API_PlatformErrorResponse: + - name + - secrets + Connectors_update_connector_request_swimlane: + title: Update Swimlane connector request type: object properties: - error: - type: string - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + name: + description: The display name for the connector. + example: my-connector type: string - statusCode: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' required: - - statusCode - - error - - message - Security_Solution_Lists_API_SiemErrorResponse: + - config + - name + - secrets + Connectors_update_connector_request_teams: + title: Update Microsoft Teams connector request type: object properties: - message: + name: + description: The display name for the connector. type: string - status_code: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_teams' required: - - status_code - - message - Security_Solution_Osquery_API_ArrayQueries: - items: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueriesItem' - type: array - Security_Solution_Osquery_API_ArrayQueriesItem: - type: object - properties: - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_CreateLiveQueryRequestBody: - type: object - properties: - agent_all: - type: boolean - agent_ids: - items: - type: string - type: array - agent_platforms: - items: - type: string - type: array - agent_policy_ids: - items: - type: string - type: array - alert_ids: - items: - type: string - type: array - case_ids: - items: - type: string - type: array - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - event_ids: - items: - type: string - type: array - metadata: - nullable: true - type: object - pack_id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackIdOrUndefined' - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueries' - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - Security_Solution_Osquery_API_CreatePacksRequestBody: + - name + - secrets + Connectors_update_connector_request_tines: + title: Update Tines connector request type: object properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' name: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackName' - policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' - shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_CreateSavedQueryRequestBody: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - interval: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_DefaultSuccessResponse: - type: object - properties: {} - Security_Solution_Osquery_API_Description: - type: string - Security_Solution_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Description' - nullable: true - Security_Solution_Osquery_API_ECSMapping: - additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMappingItem' - type: object - Security_Solution_Osquery_API_ECSMappingItem: - type: object - properties: - field: + description: The display name for the connector. type: string - value: - oneOf: - - type: string - - items: - type: string - type: array - Security_Solution_Osquery_API_ECSMappingOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMapping' - nullable: true - Security_Solution_Osquery_API_Enabled: - type: boolean - Security_Solution_Osquery_API_EnabledOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Enabled' - nullable: true - Security_Solution_Osquery_API_FindLiveQueryRequestQuery: - type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindPacksRequestQuery: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_tines' + required: + - config + - name + - secrets + Connectors_update_connector_request_torq: + title: Update Torq connector request type: object properties: - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindSavedQueryRequestQuery: + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_torq' + required: + - config + - name + - secrets + Connectors_update_connector_request_webhook: + title: Update Webhook connector request type: object properties: - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery: + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_webhook' + required: + - config + - name + - secrets + Connectors_update_connector_request_xmatters: + title: Update xMatters connector request type: object properties: - kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_Id: - type: string - Security_Solution_Osquery_API_Interval: - type: string - Security_Solution_Osquery_API_IntervalOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' - nullable: true - Security_Solution_Osquery_API_KueryOrUndefined: - nullable: true - type: string - Security_Solution_Osquery_API_ObjectQueries: - additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueriesItem' - type: object - Security_Solution_Osquery_API_ObjectQueriesItem: + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' + required: + - config + - name + - secrets + Data_views_400_response: + title: Bad request type: object properties: - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_PackId: - type: string - Security_Solution_Osquery_API_PackIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - nullable: true - Security_Solution_Osquery_API_PackName: - type: string - Security_Solution_Osquery_API_PageOrUndefined: - nullable: true - type: integer - Security_Solution_Osquery_API_PageSizeOrUndefined: - nullable: true - type: integer - Security_Solution_Osquery_API_Platform: - type: string - Security_Solution_Osquery_API_PlatformOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Platform' - nullable: true - Security_Solution_Osquery_API_PolicyIds: - items: - type: string - type: array - Security_Solution_Osquery_API_PolicyIdsOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PolicyIds' - nullable: true - Security_Solution_Osquery_API_Query: - type: string - Security_Solution_Osquery_API_QueryOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - nullable: true - Security_Solution_Osquery_API_Removed: - type: boolean - Security_Solution_Osquery_API_RemovedOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Removed' - nullable: true - Security_Solution_Osquery_API_SavedQueryId: - type: string - Security_Solution_Osquery_API_SavedQueryIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - nullable: true - Security_Solution_Osquery_API_Shards: - additionalProperties: - type: number + error: + example: Bad Request + type: string + message: + type: string + statusCode: + example: 400 + type: number + required: + - statusCode + - error + - message + Data_views_404_response: type: object - Security_Solution_Osquery_API_Snapshot: - type: boolean - Security_Solution_Osquery_API_SnapshotOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Snapshot' - nullable: true - Security_Solution_Osquery_API_SortOrderOrUndefined: - oneOf: - - nullable: true + properties: + error: + enum: + - Not Found + example: Not Found type: string - - enum: - - asc - - desc - Security_Solution_Osquery_API_SortOrUndefined: - nullable: true - type: string - Security_Solution_Osquery_API_UpdatePacksRequestBody: + message: + example: >- + Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] + not found + type: string + statusCode: + enum: + - 404 + example: 404 + type: integer + Data_views_allownoindex: + description: Allows the data view saved object to exist before the data is available. + type: boolean + Data_views_create_data_view_request_object: + title: Create data view request type: object properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' - shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_UpdateSavedQueryRequestBody: + data_view: + description: The data view object. + type: object + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldAttrs: + additionalProperties: + $ref: '#/components/schemas/Data_views_fieldattrs' + type: object + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + id: + type: string + name: + description: The data view name. + type: string + namespaces: + $ref: '#/components/schemas/Data_views_namespaces' + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + type: + $ref: '#/components/schemas/Data_views_type' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta' + version: + type: string + required: + - title + override: + default: false + description: >- + Override an existing data view if a data view with the provided + title already exists. + type: boolean + required: + - data_view + Data_views_data_view_response_object: + title: Data view response properties type: object properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - interval: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_IntervalOrUndefined - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_Version: - type: string - Security_Solution_Osquery_API_VersionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Version' - nullable: true - Security_Solution_Timeline_API_BareNote: + data_view: + type: object + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldAttrs: + additionalProperties: + $ref: '#/components/schemas/Data_views_fieldattrs' + type: object + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + id: + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + type: string + name: + description: The data view name. + type: string + namespaces: + $ref: '#/components/schemas/Data_views_namespaces' + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta_response' + version: + example: WzQ2LDJd + type: string + Data_views_fieldattrs: + description: A map of field attributes by field name. type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - nullable: true - type: string - note: - nullable: true + count: + description: Popularity count for the field. + type: integer + customDescription: + description: Custom description for the field. + maxLength: 300 type: string - timelineId: - nullable: true + customLabel: + description: Custom label for the field. type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true + Data_views_fieldformats: + description: A map of field formats by field name. + type: object + Data_views_namespaces: + description: >- + An array of space identifiers for sharing the data view between multiple + spaces. + items: + default: default + type: string + type: array + Data_views_runtimefieldmap: + description: A map of runtime field definitions by field name. + type: object + properties: + script: + type: object + properties: + source: + description: Script for the runtime field. + type: string + type: + description: Mapping type of the runtime field. type: string required: - - timelineId - Security_Solution_Timeline_API_ColumnHeaderResult: + - script + - type + Data_views_sourcefilters: + description: The array of field names you want to filter out in Discover. + items: + type: object + properties: + value: + type: string + required: + - value + type: array + Data_views_swap_data_view_request_object: + title: Data view reference swap request type: object properties: - aggregatable: + delete: + description: Deletes referenced saved object if all references are removed. type: boolean - category: - type: string - columnHeaderType: - type: string - description: - type: string - example: + forId: + description: Limit the affected saved objects to one or more by identifier. oneOf: - type: string - - type: number - id: + - items: + type: string + type: array + forType: + description: Limit the affected saved objects by type. type: string - indexes: - items: - type: string - type: array - name: + fromId: + description: The saved object reference to change. type: string - placeholder: + fromType: + description: > + Specify the type of the saved object reference to alter. The default + value is `index-pattern` for data views. type: string - searchable: - type: boolean - type: + toId: + description: New saved object reference value to replace the old value. type: string - Security_Solution_Timeline_API_DataProviderQueryMatch: + required: + - fromId + - toId + Data_views_timefieldname: + description: 'The timestamp field name, which you use for time-based data views.' + type: string + Data_views_title: + description: >- + Comma-separated list of data streams, indices, and aliases that you want + to search. Supports wildcards (`*`). + type: string + Data_views_type: + description: 'When set to `rollup`, identifies the rollup data views.' + type: string + Data_views_typemeta: + description: >- + When you use rollup indices, contains the field list for the rollup data + view API endpoints. type: object properties: - enabled: - nullable: true - type: boolean - excluded: - nullable: true - type: boolean - id: - nullable: true - type: string - kqlQuery: - nullable: true - type: string - name: - nullable: true - type: string - queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - Security_Solution_Timeline_API_DataProviderResult: + aggs: + description: A map of rollup restrictions by aggregation type and field name. + type: object + params: + description: Properties for retrieving rollup fields. + type: object + required: + - aggs + - params + Data_views_typemeta_response: + description: >- + When you use rollup indices, contains the field list for the rollup data + view API endpoints. + nullable: true type: object properties: - and: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderQueryMatch - nullable: true - type: array - enabled: - nullable: true - type: boolean - excluded: - nullable: true - type: boolean - id: - nullable: true - type: string - kqlQuery: - nullable: true - type: string - name: - nullable: true - type: string - queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - nullable: true - type: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DataProviderType' - nullable: true - Security_Solution_Timeline_API_DataProviderType: - description: >- - The type of data provider to create. Valid values are `default` and - `template`. - enum: - - default - - template - type: string - Security_Solution_Timeline_API_DocumentIds: - oneOf: - - items: - type: string - type: array - - type: string - Security_Solution_Timeline_API_FavoriteTimelineResponse: + aggs: + description: A map of rollup restrictions by aggregation type and field name. + type: object + params: + description: Properties for retrieving rollup fields. + type: object + Data_views_update_data_view_request_object: + title: Update data view request type: object properties: - code: - nullable: true - type: number - favorite: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult - type: array - message: - nullable: true - type: string - savedObjectId: - type: string - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - version: - type: string + data_view: + description: > + The data view properties you want to update. Only the specified + properties are updated in the data view. Unspecified fields stay as + they are persisted. + type: object + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + name: + type: string + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + type: + $ref: '#/components/schemas/Data_views_type' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta' + refresh_fields: + default: false + description: Reloads the data view fields after the data view is updated. + type: boolean required: - - savedObjectId - - version - Security_Solution_Timeline_API_FavoriteTimelineResult: + - data_view + Kibana_HTTP_APIs_core_status_redactedResponse: + additionalProperties: false + description: A minimal representation of Kibana's operational status. type: object properties: - favoriteDate: - nullable: true - type: number - fullName: - nullable: true - type: string - userName: - nullable: true - type: string - Security_Solution_Timeline_API_FilterTimelineResult: + status: + additionalProperties: false + type: object + properties: + overall: + additionalProperties: false + type: object + properties: + level: + description: Service status levels as human and machine readable values. + enum: + - available + - degraded + - unavailable + - critical + type: string + required: + - level + required: + - overall + required: + - status + Kibana_HTTP_APIs_core_status_response: + additionalProperties: false + description: >- + Kibana's operational status as well as a detailed breakdown of plugin + statuses indication of various loads (like event loop utilization and + network traffic) at time of request. type: object properties: - exists: - type: boolean - match_all: + metrics: + additionalProperties: false + description: Metric groups collected by Kibana. + type: object + properties: + collection_interval_in_millis: + description: The interval at which metrics should be collected. + type: number + elasticsearch_client: + additionalProperties: false + description: Current network metrics of Kibana's Elasticsearch client. + type: object + properties: + totalActiveSockets: + description: Count of network sockets currently in use. + type: number + totalIdleSockets: + description: Count of network sockets currently idle. + type: number + totalQueuedRequests: + description: Count of requests not yet assigned to sockets. + type: number + required: + - totalActiveSockets + - totalIdleSockets + - totalQueuedRequests + last_updated: + description: The time metrics were collected. + type: string + required: + - elasticsearch_client + - last_updated + - collection_interval_in_millis + name: + description: Kibana instance name. type: string - meta: + status: + additionalProperties: false type: object properties: - alias: - type: string - controlledBy: - type: string - disabled: - type: boolean - field: - type: string - formattedValue: - type: string - index: - type: string - key: - type: string - negate: - type: boolean - params: - type: string - type: - type: string - value: - type: string - missing: - type: string - query: - type: string - range: - type: string - script: - type: string - Security_Solution_Timeline_API_ImportTimelineResult: - type: object - properties: - errors: - items: - type: object - properties: - error: + core: + additionalProperties: false + description: Statuses of core Kibana services. + type: object + properties: + elasticsearch: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: >- + An unstructured set of extra metadata about this + service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + savedObjects: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: >- + An unstructured set of extra metadata about this + service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + required: + - elasticsearch + - savedObjects + overall: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: Service status levels as human and machine readable values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: An unstructured set of extra metadata about this service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + plugins: + additionalProperties: + additionalProperties: false type: object properties: - message: + detail: + description: Human readable detail of the service status. type: string - status_code: - type: number - id: - type: string - type: array - success: - type: boolean - success_count: - type: number - timelines_installed: - type: number - timelines_updated: - type: number - Security_Solution_Timeline_API_ImportTimelines: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' - - type: object + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: An unstructured set of extra metadata about this service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + description: A dynamic mapping of plugin ID to plugin status. + type: object + required: + - overall + - core + - plugins + uuid: + description: >- + Unique, generated Kibana instance UUID. This UUID should persist + even if the Kibana process restarts. + type: string + version: + additionalProperties: false + type: object properties: - eventNotes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - nullable: true - type: array - globalNotes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - nullable: true - type: array - pinnedEventIds: - items: - type: string - nullable: true - type: array - savedObjectId: - nullable: true + build_date: + description: The date and time of this build. type: string - version: - nullable: true + build_flavor: + description: >- + The build flavour determines configuration and behavior of + Kibana. On premise users will almost always run the + "traditional" flavour, while other flavours are reserved for + Elastic-specific use cases. + enum: + - serverless + - traditional type: string - Security_Solution_Timeline_API_Note: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - - type: object - properties: - noteId: + build_hash: + description: >- + A unique hash value representing the git commit of this Kibana + build. type: string - version: + build_number: + description: >- + A monotonically increasing number, each subsequent build will + have a higher number. + type: number + build_snapshot: + description: Whether this build is a snapshot build. + type: boolean + number: + description: A semantic version number. type: string - Security_Solution_Timeline_API_PinnedEvent: + required: + - number + - build_hash + - build_number + - build_snapshot + - build_flavor + - build_date + required: + - name + - uuid + - version + - status + - metrics + Machine_learning_APIs_mlSync200Response: + properties: + datafeedsAdded: + additionalProperties: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' + description: >- + If a saved object for an anomaly detection job is missing a datafeed + identifier, it is added when you run the sync machine learning saved + objects API. + type: object + datafeedsRemoved: + additionalProperties: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' + description: >- + If a saved object for an anomaly detection job references a datafeed + that no longer exists, it is deleted when you run the sync machine + learning saved objects API. + type: object + savedObjectsCreated: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsCreated + savedObjectsDeleted: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted + title: Successful sync API response type: object + Machine_learning_APIs_mlSync4xxResponse: properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true + error: + example: Unauthorized type: string - version: + message: type: string - required: - - eventId - - pinnedEventId - - timelineId - - version - Security_Solution_Timeline_API_QueryMatchResult: + statusCode: + example: 401 + type: integer + title: Unsuccessful sync API response type: object + Machine_learning_APIs_mlSyncResponseAnomalyDetectors: + description: >- + The sync machine learning saved objects API response contains this + object when there are anomaly detection jobs affected by the + synchronization. There is an object for each relevant job, which + contains the synchronization status. properties: - displayField: - nullable: true - type: string - displayValue: - nullable: true - type: string - field: - nullable: true - type: string - operator: - nullable: true - type: string - value: - nullable: true - type: string - Security_Solution_Timeline_API_Readable: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for anomaly detection jobs + type: object + Machine_learning_APIs_mlSyncResponseDatafeeds: + description: >- + The sync machine learning saved objects API response contains this + object when there are datafeeds affected by the synchronization. There + is an object for each relevant datafeed, which contains the + synchronization status. + properties: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for datafeeds type: object + Machine_learning_APIs_mlSyncResponseDataFrameAnalytics: + description: >- + The sync machine learning saved objects API response contains this + object when there are data frame analytics jobs affected by the + synchronization. There is an object for each relevant job, which + contains the synchronization status. properties: - _data: - additionalProperties: true - type: object - _encoding: - type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for data frame analytics jobs + type: object + Machine_learning_APIs_mlSyncResponseSavedObjectsCreated: + description: >- + If saved objects are missing for machine learning jobs or trained + models, they are created when you run the sync machine learning saved + objects API. + properties: + anomaly-detector: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors + description: >- + If saved objects are missing for anomaly detection jobs, they are + created. type: object - _position: - type: number - _read: - additionalProperties: true + data-frame-analytics: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics + description: >- + If saved objects are missing for data frame analytics jobs, they are + created. type: object - _readableState: - additionalProperties: true + trained-model: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels + description: 'If saved objects are missing for trained models, they are created.' type: object - readable: - type: boolean - Security_Solution_Timeline_API_RowRendererId: - enum: - - alert - - alerts - - auditd - - auditd_file - - library - - netflow - - plain - - registry - - suricata - - system - - system_dns - - system_endgame_process - - system_file - - system_fim - - system_security_event - - system_socket - - threat_match - - zeek - type: string - Security_Solution_Timeline_API_SavedTimeline: + title: Sync API response for created saved objects type: object + Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted: + description: >- + If saved objects exist for machine learning jobs or trained models that + no longer exist, they are deleted when you run the sync machine learning + saved objects API. properties: - columns: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ColumnHeaderResult - nullable: true - type: array - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - dataProviders: - items: + anomaly-detector: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderResult - nullable: true - type: array - dataViewId: - nullable: true - type: string - dateRange: - nullable: true - type: object - properties: - end: - oneOf: - - type: string - - type: number - start: - oneOf: - - type: string - - type: number - description: - nullable: true - type: string - eqlOptions: - nullable: true + #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors + description: >- + If there are saved objects exist for nonexistent anomaly detection + jobs, they are deleted. type: object - properties: - eventCategoryField: - nullable: true - type: string - query: - nullable: true - type: string - size: - oneOf: - - nullable: true - type: string - - nullable: true - type: number - tiebreakerField: - nullable: true - type: string - timestampField: - nullable: true - type: string - eventType: - nullable: true - type: string - excludedRowRendererIds: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_RowRendererId' - nullable: true - type: array - favorite: - items: + data-frame-analytics: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult - nullable: true - type: array - filters: - items: + #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics + description: >- + If there are saved objects exist for nonexistent data frame + analytics jobs, they are deleted. + type: object + trained-model: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FilterTimelineResult - nullable: true - type: array - indexNames: - items: - type: string - nullable: true - type: array - kqlMode: - nullable: true - type: string - kqlQuery: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SerializedFilterQueryResult - nullable: true - savedQueryId: - nullable: true - type: string - savedSearchId: - nullable: true - type: string - sort: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Sort' - nullable: true - status: - enum: - - active - - draft - - immutable - nullable: true - type: string - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - nullable: true - title: - nullable: true - type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true - type: string - Security_Solution_Timeline_API_SerializedFilterQueryResult: - type: object - properties: - filterQuery: - nullable: true + #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels + description: >- + If there are saved objects exist for nonexistent trained models, + they are deleted. type: object - properties: - kuery: - nullable: true - type: object - properties: - expression: - nullable: true - type: string - kind: - nullable: true - type: string - serializedQuery: - nullable: true - type: string - Security_Solution_Timeline_API_Sort: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' - - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' - type: array - Security_Solution_Timeline_API_SortFieldTimeline: - description: The field to sort the timelines by. - enum: - - title - - description - - updated - - created - type: string - Security_Solution_Timeline_API_SortObject: + title: Sync API response for deleted saved objects type: object - properties: - columnId: - nullable: true - type: string - columnType: - nullable: true - type: string - sortDirection: - nullable: true - type: string - Security_Solution_Timeline_API_TimelineResponse: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' - - type: object - properties: - eventIdToNoteIds: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' - type: array - noteIds: - items: - type: string - type: array - notes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' - type: array - pinnedEventIds: - items: - type: string - type: array - pinnedEventsSaveObject: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - type: array - savedObjectId: - type: string - version: - type: string - required: - - savedObjectId - - version - Security_Solution_Timeline_API_TimelineStatus: - description: >- - The status of the timeline. Valid values are `active`, `draft`, and - `immutable`. - enum: - - active - - draft - - immutable - type: string - Security_Solution_Timeline_API_TimelineType: + Machine_learning_APIs_mlSyncResponseSuccess: + description: The success or failure of the synchronization. + type: boolean + Machine_learning_APIs_mlSyncResponseTrainedModels: description: >- - The type of timeline to create. Valid values are `default` and - `template`. - enum: - - default - - template - type: string + The sync machine learning saved objects API response contains this + object when there are trained models affected by the synchronization. + There is an object for each relevant trained model, which contains the + synchronization status. + properties: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for trained models + type: object Serverless_saved_objects_400_response: title: Bad request type: object @@ -25587,16 +8617,15 @@ components: title: Update SLO request type: object securitySchemes: - apiKeyAuth: - description: > - These APIs use key-based authentication. You must create an API key and - use the encoded value in the request header. For example: - `Authorization: ApiKey base64AccessApiKey` - in: header - name: Authorization - type: apiKey + BasicAuth: + scheme: basic + type: http + Kibana_HTTP_APIs_basicAuth: + scheme: basic + type: http security: - - apiKeyAuth: [] + - BasicAuth: [] + - Kibana_HTTP_APIs_basicAuth: [] tags: - description: > Configure APM agent keys to authorize requests from APM agents to the APM @@ -25619,30 +8648,6 @@ tags: Manage Kibana saved objects, including dashboards, visualizations, and more. name: saved objects - - description: Manage and interact with Security Assistant resources. - name: Security AI Assistant API - - description: >- - You can create rules that automatically turn events and external alerts - sent to Elastic Security into detection alerts. These alerts are displayed - on the Detections page. - name: Security Solution Detections API - - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API - - description: '' - name: Security Solution Entity Analytics API - - description: >- - Exceptions API allows you to manage detection rule exceptions to prevent a - rule from generating an alert from incoming events even when the rule's - other criteria are met. - name: Security Solution Exceptions API - - description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.' - name: Security Solution Lists API - - description: 'Run live queries, manage packs and saved queries.' - name: Security Solution Osquery API - - description: >- - You can create Timelines and Timeline templates via the API, as well as - import new Timelines from an ndjson file. - name: Security Solution Timeline API - description: 'SLO APIs enable you to define, manage and track service-level objectives' name: slo - name: system diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 977a910dabf6bf..afabb83adf3169 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -810,255 +810,6 @@ paths: summary: Search for annotations tags: - APM annotations - /api/asset_criticality: - delete: - operationId: DeleteAssetCriticalityRecord - parameters: - - description: The ID value of the asset. - in: query - name: id_value - required: true - schema: - type: string - - description: The field representing the ID. - example: host.name - in: query - name: id_field - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField - - description: If 'wait_for' the request will wait for the index refresh. - in: query - name: refresh - required: false - schema: - enum: - - wait_for - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - deleted: - description: >- - If the record was deleted. If false the record did not - exist. - type: boolean - record: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - required: - - deleted - description: Successful response - '400': - description: Invalid request - summary: Delete Criticality Record - tags: - - Security Solution Entity Analytics API - get: - operationId: GetAssetCriticalityRecord - parameters: - - description: The ID value of the asset. - in: query - name: id_value - required: true - schema: - type: string - - description: The field representing the ID. - example: host.name - in: query - name: id_field - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_IdField - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - description: Successful response - '400': - description: Invalid request - '404': - description: Criticality record not found - summary: Get Criticality Record - tags: - - Security Solution Entity Analytics API - post: - operationId: CreateAssetCriticalityRecord - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - - type: object - properties: - refresh: - description: >- - If 'wait_for' the request will wait for the index - refresh. - enum: - - wait_for - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - description: Successful response - '400': - description: Invalid request - summary: Create Criticality Record - tags: - - Security Solution Entity Analytics API - /api/asset_criticality/bulk: - post: - operationId: BulkUpsertAssetCriticalityRecords - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - example: - records: - - criticality_level: low_impact - id_field: host.name - id_value: host-1 - - criticality_level: medium_impact - id_field: host.name - id_value: host-2 - type: object - properties: - records: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - maxItems: 1000 - minItems: 1 - type: array - required: - - records - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - example: - errors: - - index: 0 - message: Invalid ID field - stats: - failed: 1 - successful: 1 - total: 2 - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem - type: array - stats: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats - required: - - errors - - stats - description: Bulk upload successful - '413': - description: File too large - summary: >- - Bulk upsert asset criticality data, creating or updating records as - needed - tags: - - Security Solution Entity Analytics API - /api/asset_criticality/list: - post: - operationId: FindAssetCriticalityRecords - parameters: - - description: The field to sort by. - in: query - name: sort_field - required: false - schema: - enum: - - id_value - - id_field - - criticality_level - - \@timestamp - type: string - - description: The order to sort by. - in: query - name: sort_direction - required: false - schema: - enum: - - asc - - desc - type: string - - description: The page number to return. - in: query - name: page - required: false - schema: - minimum: 1 - type: integer - - description: The number of records to return per page. - in: query - name: per_page - required: false - schema: - maximum: 1000 - minimum: 1 - type: integer - - description: The kuery to filter by. - in: query - name: kuery - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - page: - minimum: 1 - type: integer - per_page: - maximum: 1000 - minimum: 1 - type: integer - records: - items: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecord - type: array - total: - minimum: 0 - type: integer - required: - - records - - page - - per_page - - total - description: Bulk upload successful - summary: 'List asset criticality data, filtering and sorting as needed' - tags: - - Security Solution Entity Analytics API /api/data_views: get: operationId: getAllDataViewsDefault @@ -1583,1061 +1334,838 @@ paths: summary: Preview a saved object reference swap tags: - data views - /api/detection_engine/index: - delete: - operationId: DeleteAlertsIndex + /api/encrypted_saved_objects/_rotate_key: + post: + description: > + Superuser role required. + + + If a saved object cannot be decrypted using the primary encryption key, + then Kibana will attempt to decrypt it using the specified + decryption-only keys. In most of the cases this overhead is negligible, + but if you're dealing with a large number of saved objects and + experiencing performance issues, you may want to rotate the encryption + key. + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: rotateEncryptionKey + parameters: + - description: > + Specifies a maximum number of saved objects that Kibana can process + in a single batch. Bulk key rotation is an iterative process since + Kibana may not be able to fetch and process all required saved + objects in one go and splits processing into consequent batches. By + default, the batch size is 10000, which is also a maximum allowed + value. + in: query + name: batch_size + required: false + schema: + default: 10000 + type: number + - description: > + Limits encryption key rotation only to the saved objects with the + specified type. By default, Kibana tries to rotate the encryption + key for all saved object types that may contain encrypted + attributes. + in: query + name: type + required: false + schema: + type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + rotateEncryptionKeyResponse: + $ref: '#/components/examples/Saved_objects_key_rotation_response' schema: type: object properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Not enough permissions response - '404': + failed: + description: > + Indicates the number of the saved objects that were still + encrypted with one of the old encryption keys that Kibana + failed to re-encrypt with the primary key. + type: number + successful: + description: > + Indicates the total number of all encrypted saved objects + (optionally filtered by the requested `type`), regardless + of the key Kibana used for encryption. + + + NOTE: In most cases, `total` will be greater than + `successful` even if `failed` is zero. The reason is that + Kibana may not need or may not be able to rotate + encryption keys for all encrypted saved objects. + type: number + total: + description: > + Indicates the total number of all encrypted saved objects + (optionally filtered by the requested `type`), regardless + of the key Kibana used for encryption. + type: number + description: Indicates a successful call. + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: string - description: Index does not exist response - '500': + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + '429': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Delete an alerts index + type: object + description: Already in progress. + summary: Rotate a key for encrypted saved objects tags: - - Security Solution Detections API - - Alert index API + - saved objects + /api/ml/saved_objects/sync: get: - operationId: ReadAlertsIndex + description: > + Synchronizes Kibana saved objects for machine learning jobs and trained + models in the default space. You must have `all` privileges for the + **Machine Learning** feature in the **Analytics** section of the Kibana + feature privileges. This API runs automatically when you start Kibana + and periodically thereafter. + operationId: mlSync + parameters: + - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + syncExample: + $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' schema: - type: object - properties: - index_mapping_outdated: - nullable: true - type: boolean - name: - type: string - required: - - name - - index_mapping_outdated - description: Successful response + $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' + description: Indicates a successful call '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Not enough permissions response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Reads the alert index name if it exists + $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' + description: Authorization information is missing or invalid. + summary: Sync saved objects in the default space tags: - - Security Solution Detections API - - Alert index API + - ml + /api/saved_objects/_bulk_create: post: - operationId: CreateAlertsIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: + deprecated: true + operationId: bulkCreateSavedObjects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - description: 'When true, overwrites the document with the same identifier.' + in: query + name: overwrite + schema: + type: boolean + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + items: type: object - properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Not enough permissions response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Create an alerts index - tags: - - Security Solution Detections API - - Alert index API - /api/detection_engine/privileges: - get: - description: > - Retrieves whether or not the user is authenticated, and the user's - Kibana - - space and index privileges, which determine if the user can create an - - index for the Elastic Security alerts generated by - - detection engine rules. - operationId: ReadPrivileges + type: array + required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: type: object - properties: - has_encryption_key: - type: boolean - is_authenticated: - type: boolean - required: - - is_authenticated - - has_encryption_key - description: Successful response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Returns user privileges for the Kibana space - tags: - - Security Solution Detections API - - Privileges API - /api/detection_engine/rules: - delete: - description: Delete a detection rule using the `rule_id` or `id` field. - operationId: DeleteRule - parameters: - - description: The rule's `id` value. - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - - description: The rule's `rule_id` value. - in: query - name: rule_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - responses: - '200': + description: Indicates a successful call. + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Delete a detection rule + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Create saved objects tags: - - Security Solution Detections API - - Rules API - get: - description: Retrieve a detection rule using the `rule_id` or `id` field. - operationId: ReadRule + - saved objects + /api/saved_objects/_bulk_delete: + post: + deprecated: true + description: | + WARNING: When you delete a saved object, it cannot be recovered. + operationId: bulkDeleteSavedObjects parameters: - - description: The rule's `id` value. - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - - description: The rule's `rule_id` value. + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - description: > + When true, force delete objects that exist in multiple namespaces. + Note that the option applies to the whole request. Use the delete + object API to specify per-object deletion behavior. TIP: Use this if + you attempted to delete objects and received an HTTP 400 error with + the following message: "Unable to delete saved object that exists in + multiple namespaces, use the force option to delete it anyway". + WARNING: When you bulk delete objects that exist in multiple + namespaces, the API also deletes legacy url aliases that reference + the object. These requests are batched to minimise the impact but + they can place a heavy load on Kibana. Make sure you limit the + number of objects that exist in multiple namespaces in a single bulk + delete operation. in: query - name: rule_id - required: false + name: force schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Retrieve a detection rule - tags: - - Security Solution Detections API - - Rules API - patch: - description: >- - Update specific fields of an existing detection rule using the `rule_id` - or `id` field. - operationId: PatchRule + type: boolean requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps + items: + type: object + type: array required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Patch a detection rule - tags: - - Security Solution Detections API - - Rules API - post: - description: Create a new detection rule. - operationId: CreateRule - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps - required: true - responses: - '200': + type: object + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - description: Indicates a successful call. - summary: Create a detection rule + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Delete saved objects tags: - - Security Solution Detections API - - Rules API - put: - description: > - Update a detection rule using the `rule_id` or `id` field. The original - rule is replaced, and all unspecified fields are deleted. - - > info - - > You cannot modify the `id` or `rule_id` values. - operationId: UpdateRule + - saved objects + /api/saved_objects/_bulk_get: + post: + deprecated: true + operationId: bulkGetSavedObjects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps + items: + type: object + type: array required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse + type: object description: Indicates a successful call. - summary: Update a detection rule - tags: - - Security Solution Detections API - - Rules API - /api/detection_engine/rules/_bulk_action: - post: - description: >- - Apply a bulk action, such as bulk edit, duplicate, or delete, to - multiple detection rules. The bulk action is applied to all rules that - match the query or to the rules listed by their IDs. - operationId: PerformRulesBulkAction - parameters: - - description: Enables dry run mode for the request call. - in: query - name: dry_run - required: false - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDeleteRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDisableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEnableRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkDuplicateRules - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkManualRuleRun - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditRules - responses: - '200': + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkExportActionResponse - description: OK - summary: Apply a bulk action to detection rules + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Get saved objects tags: - - Security Solution Detections API - - Bulk API - /api/detection_engine/rules/_bulk_create: + - saved objects + /api/saved_objects/_bulk_resolve: post: deprecated: true - description: Create new detection rules in bulk. - operationId: BulkCreateRules + description: > + Retrieve multiple Kibana saved objects by identifier using any legacy + URL aliases if they exist. Under certain circumstances when Kibana is + upgraded, saved object migrations may necessitate regenerating some + object IDs to enable new features. When an object's ID is regenerated, a + legacy URL alias is created for that object, preserving its old ID. In + such a scenario, that object can be retrieved by the bulk resolve API + using either its new ID or its old ID. + operationId: bulkResolveSavedObjects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleCreateProps + type: object type: array - description: 'A JSON array of rules, where each rule contains the required fields.' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse - description: Indicates a successful call. - summary: Create multiple detection rules + type: object + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Resolve saved objects tags: - - Security Solution Detections API - - Bulk API - /api/detection_engine/rules/_bulk_delete: - delete: + - saved objects + /api/saved_objects/_bulk_update: + post: deprecated: true - description: Delete detection rules in bulk. - operationId: BulkDeleteRules + description: Update the attributes for multiple Kibana saved objects. + operationId: bulkUpdateSavedObjects + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: items: type: object - properties: - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId type: array - description: >- - A JSON array of `id` or `rule_id` fields of the rules you want to - delete. required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Delete multiple detection rules - tags: - - Security Solution Detections API - - Bulk API - post: - deprecated: true - description: Deletes multiple rules. - operationId: BulkDeleteRulesPost - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: type: object - properties: - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - type: array - description: >- - A JSON array of `id` or `rule_id` fields of the rules you want to - delete. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse - description: Indicates a successful call. + description: > + Indicates a successful call. NOTE: This HTTP response code indicates + that the bulk operation succeeded. Errors pertaining to individual + objects will be returned in the response body. '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Delete multiple detection rules - tags: - - Security Solution Detections API - - Bulk API - /api/detection_engine/rules/_bulk_update: - patch: - deprecated: true - description: >- - Update specific fields of existing detection rules using the `rule_id` - or `id` field. - operationId: BulkPatchRules - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePatchProps - type: array - description: 'A JSON array of rules, where each rule contains the required fields.' - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse - description: Indicates a successful call. - summary: Patch multiple detection rules + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Update saved objects tags: - - Security Solution Detections API - - Bulk API - put: - deprecated: true + - saved objects + /api/saved_objects/_export: + post: description: > - Update multiple detection rules using the `rule_id` or `id` field. The - original rules are replaced, and all unspecified fields are deleted. + Retrieve sets of saved objects that you want to import into Kibana. - > info + You must include `type` or `objects` in the request body. - > You cannot modify the `id` or `rule_id` values. - operationId: BulkUpdateRules - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleUpdateProps - type: array - description: >- - A JSON array where each element includes the `id` or `rule_id` field - of the rule you want to update and the fields you want to modify. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkCrudRulesResponse - description: Indicates a successful call. - summary: Update multiple detection rules - tags: - - Security Solution Detections API - - Bulk API - /api/detection_engine/rules/_export: - post: - description: > - Export detection rules to an `.ndjson` file. The following configuration - items are also included in the `.ndjson` file: - - Actions + Exported saved objects are not backwards compatible and cannot be + imported into an older version of Kibana. + - - Exception lists + NOTE: The `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be exported. - > info - > You cannot export prebuilt rules. - operationId: ExportRules + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: exportSavedObjectsDefault parameters: - - description: Determines whether a summary of the exported rules is returned. - in: query - name: exclude_export_details - required: false - schema: - default: false - type: boolean - - description: File name for saving the exported rules. - in: query - name: file_name - required: false - schema: - default: export.ndjson - type: string + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: + examples: + exportSavedObjectsRequest: + $ref: '#/components/examples/Saved_objects_export_objects_request' schema: - nullable: true type: object properties: - objects: + excludeExportDetails: + default: false + description: Do not add export details entry at the end of the stream. + type: boolean + includeReferencesDeep: description: >- - Array of `rule_id` fields. Exports all rules when - unspecified. + Includes all of the referenced objects in the exported + objects. + type: boolean + objects: + description: A list of objects to export. items: type: object - properties: - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - required: - - rule_id type: array - required: - - objects - required: false + type: + description: >- + The saved object types to include in the export. Use `*` to + export all the types. + oneOf: + - type: string + - items: + type: string + type: array + required: true responses: '200': content: - application/ndjson; Elastic-Api-Version=2023-10-31: + application/x-ndjson; Elastic-Api-Version=2023-10-31: + examples: + exportSavedObjectsResponse: + $ref: '#/components/examples/Saved_objects_export_objects_response' schema: - description: An `.ndjson` file containing the returned rules. - format: binary - type: string + additionalProperties: true + type: object description: Indicates a successful call. - summary: Export detection rules + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request. + summary: Export saved objects tags: - - Security Solution Detections API - - Import/Export API - /api/detection_engine/rules/_find: + - saved objects + /api/saved_objects/_find: get: - description: >- - Retrieve a paginated list of detection rules. By default, the first page - is returned, with 20 results per page. - operationId: FindRules + deprecated: true + description: Retrieve a paginated set of Kibana saved objects. + operationId: findSavedObjects parameters: - - in: query + - description: > + An aggregation structure, serialized as a string. The field format + is similar to filter, meaning that to use a saved object type + attribute in the aggregation, the `savedObjectType.attributes.title: + "myTitle"` format must be used. For root fields, the syntax is + `savedObjectType.rootField`. NOTE: As objects change in Kibana, the + results on each page of the response also change. Use the find API + for traditional paginated results, but avoid using it to export + large amounts of data. + in: query + name: aggs + schema: + type: string + - description: The default operator to use for the `simple_query_string`. + in: query + name: default_search_operator + schema: + type: string + - description: The fields to return in the attributes key of the response. + in: query name: fields - required: false schema: - items: - type: string - type: array - - description: Search query + oneOf: + - type: string + - type: array + - description: > + The filter is a KQL string with the caveat that if you filter with + an attribute from your saved object type, it should look like that: + `savedObjectType.attributes.title: "myTitle"`. However, if you use a + root attribute of a saved object such as `updated_at`, you will have + to define your filter like that: `savedObjectType.updated_at > + 2018-12-22`. in: query name: filter - required: false schema: type: string - - description: Field to sort by + - description: >- + Filters to objects that do not have a relationship with the type and + identifier combination. + in: query + name: has_no_reference + schema: + type: object + - description: >- + The operator to use for the `has_no_reference` parameter. Either + `OR` or `AND`. Defaults to `OR`. + in: query + name: has_no_reference_operator + schema: + type: string + - description: >- + Filters to objects that have a relationship with the type and ID + combination. in: query - name: sort_field - required: false + name: has_reference schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_FindRulesSortField - - description: Sort order + type: object + - description: >- + The operator to use for the `has_reference` parameter. Either `OR` + or `AND`. Defaults to `OR`. in: query - name: sort_order - required: false + name: has_reference_operator schema: - $ref: '#/components/schemas/Security_Solution_Detections_API_SortOrder' - - description: Page number + type: string + - description: The page of objects to return. in: query name: page - required: false schema: - default: 1 - minimum: 1 type: integer - - description: Rules per page + - description: The number of objects to return per page. in: query name: per_page - required: false schema: - default: 20 - minimum: 0 type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - summary: List all detection rules - tags: - - Security Solution Detections API - - Rules API - /api/detection_engine/rules/_import: - post: - description: > - Import detection rules from an `.ndjson` file, including actions and - exception lists. The request must include: - - - The `Content-Type: multipart/form-data` HTTP header. - - - A link to the `.ndjson` file containing the rules. - operationId: ImportRules - parameters: - description: >- - Determines whether existing rules with the same `rule_id` are - overwritten. + An Elasticsearch `simple_query_string` query that filters the + objects in the response. in: query - name: overwrite - required: false + name: search schema: - default: false - type: boolean + type: string - description: >- - Determines whether existing exception lists with the same `list_id` - are overwritten. + The fields to perform the `simple_query_string` parsed query + against. in: query - name: overwrite_exceptions - required: false + name: search_fields + schema: + oneOf: + - type: string + - type: array + - description: > + Sorts the response. Includes "root" and "type" fields. "root" fields + exist for all saved objects, such as "updated_at". "type" fields are + specific to an object type, such as fields returned in the + attributes key of the response. When a single type is defined in the + type parameter, the "root" and "type" fields are allowed, and + validity checks are made in that order. When multiple types are + defined in the type parameter, only "root" fields are allowed. + in: query + name: sort_field + schema: + type: string + - description: The saved object types to include. + in: query + name: type + required: true + schema: + oneOf: + - type: string + - type: array + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + description: Indicates a successful call. + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request + summary: Search for saved objects + tags: + - saved objects + /api/saved_objects/_import: + post: + description: > + Create sets of Kibana saved objects from a file created by the export + API. + + Saved objects can be imported only into the same version, a newer minor + on the same major, or the next major. Exported saved objects are not + backwards compatible and cannot be imported into an older version of + Kibana. + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: importSavedObjectsDefault + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - description: > + Creates copies of saved objects, regenerates each object ID, and + resets the origin. When used, potential conflict errors are avoided. + NOTE: This option cannot be used with the `overwrite` and + `compatibilityMode` options. + in: query + name: createNewCopies + required: false schema: - default: false type: boolean - - description: >- - Determines whether existing actions with the same - `kibana.alert.rule.actions.id` are overwritten. + - description: > + Overwrites saved objects when they already exist. When used, + potential conflict errors are automatically resolved by overwriting + the destination object. NOTE: This option cannot be used with the + `createNewCopies` option. in: query - name: overwrite_action_connectors + name: overwrite required: false schema: - default: false type: boolean - - description: Generates a new list ID for each imported exception list. + - description: > + Applies various adjustments to the saved objects that are being + imported to maintain compatibility between different Kibana + versions. Use this option only if you encounter issues with imported + saved objects. NOTE: This option cannot be used with the + `createNewCopies` option. in: query - name: as_new_list + name: compatibilityMode required: false schema: - default: false type: boolean requestBody: content: multipart/form-data; Elastic-Api-Version=2023-10-31: + examples: + importObjectsRequest: + $ref: '#/components/examples/Saved_objects_import_objects_request' schema: type: object properties: file: - description: The `.ndjson` file containing the rules. - format: binary - type: string + description: > + A file exported using the export API. NOTE: The + `savedObjects.maxImportExportSize` configuration setting + limits the number of saved objects which may be included in + this file. Similarly, the + `savedObjects.maxImportPayloadBytes` setting limits the + overall size of the file that can be imported. required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: + examples: + importObjectsResponse: + $ref: '#/components/examples/Saved_objects_import_objects_response' schema: - additionalProperties: false type: object properties: - action_connectors_errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema - type: array - action_connectors_success: - type: boolean - action_connectors_success_count: - minimum: 0 - type: integer - action_connectors_warnings: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_WarningSchema - type: array errors: + description: > + Indicates the import was unsuccessful and specifies the + objects that failed to import. + + + NOTE: One object may result in multiple errors, which + requires separate steps to resolve. For instance, a + `missing_references` error and conflict error. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema - type: array - exceptions_errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ErrorSchema + type: object type: array - exceptions_success: - type: boolean - exceptions_success_count: - minimum: 0 - type: integer - rules_count: - minimum: 0 - type: integer success: + description: > + Indicates when the import was successfully completed. When + set to false, some objects may not have been created. For + additional information, refer to the `errors` and + `successResults` properties. type: boolean - success_count: - minimum: 0 + successCount: + description: Indicates the number of successfully imported records. type: integer - required: - - exceptions_success - - exceptions_success_count - - exceptions_errors - - rules_count - - success - - success_count - - errors - - action_connectors_errors - - action_connectors_warnings - - action_connectors_success - - action_connectors_success_count + successResults: + description: > + Indicates the objects that are successfully imported, with + any metadata if applicable. + + + NOTE: Objects are created only when all resolvable errors + are addressed, including conflicts and missing references. + If objects are created as new copies, each entry in the + `successResults` array includes a `destinationId` + attribute. + items: + type: object + type: array description: Indicates a successful call. - summary: Import detection rules + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request. + summary: Import saved objects tags: - - Security Solution Detections API - - Import/Export API - '/api/detection_engine/rules/{id}/exceptions': + - saved objects + /api/saved_objects/_resolve_import_errors: post: - operationId: CreateRuleExceptionListItems + description: > + To resolve errors from the Import objects API, you can: + + + * Retry certain saved objects + + * Overwrite specific saved objects + + * Change references to different saved objects + + + This functionality is in technical preview and may be changed or removed + in a future release. Elastic will work to fix any issues, but features + in technical preview are not subject to the support SLA of official GA + features. + operationId: resolveImportErrors parameters: - - description: Detection rule's identifier - in: path - name: id - required: true + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - description: > + Applies various adjustments to the saved objects that are being + imported to maintain compatibility between different Kibana + versions. When enabled during the initial import, also enable when + resolving import errors. This option cannot be used with the + `createNewCopies` option. + in: query + name: compatibilityMode + required: false + schema: + type: boolean + - description: > + Creates copies of the saved objects, regenerates each object ID, and + resets the origin. When enabled during the initial import, also + enable when resolving import errors. + in: query + name: createNewCopies + required: false schema: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_RuleId' + type: boolean requestBody: content: - application/json; Elastic-Api-Version=2023-10-31: + multipart/form-data; Elastic-Api-Version=2023-10-31: + examples: + resolveImportErrorsRequest: + $ref: >- + #/components/examples/Saved_objects_resolve_missing_reference_request schema: type: object properties: - items: + file: + description: The same file given to the import API. + format: binary + type: string + retries: + description: >- + The retry operations, which can specify how to resolve + different types of errors. items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps + type: object + properties: + destinationId: + description: >- + Specifies the destination ID that the imported object + should have, if different from the current ID. + type: string + id: + description: The saved object ID. + type: string + ignoreMissingReferences: + description: >- + When set to `true`, ignores missing reference errors. + When set to `false`, does nothing. + type: boolean + overwrite: + description: >- + When set to `true`, the source object overwrites the + conflicting destination object. When set to `false`, + does nothing. + type: boolean + replaceReferences: + description: >- + A list of `type`, `from`, and `to` used to change the + object references. + items: + type: object + properties: + from: + type: string + to: + type: string + type: + type: string + type: array + type: + description: The saved object type. + type: string + required: + - type + - id type: array required: - - items - description: Rule exception list items + - retries required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: - schema: - items: + examples: + resolveImportErrorsResponse: $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: + #/components/examples/Saved_objects_resolve_missing_reference_response schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates rule exception list items - tags: - - Security Solution Exceptions API - /api/detection_engine/rules/prepackaged: - put: - description: Install and update all Elastic prebuilt detection rules and Timelines. - operationId: InstallPrebuiltRulesAndTimelines - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: false type: object properties: - rules_installed: - description: The number of rules installed - minimum: 0 - type: integer - rules_updated: - description: The number of rules updated - minimum: 0 - type: integer - timelines_installed: - description: The number of timelines installed - minimum: 0 - type: integer - timelines_updated: - description: The number of timelines updated - minimum: 0 - type: integer - required: - - rules_installed - - rules_updated - - timelines_installed - - timelines_updated - description: Indicates a successful call - summary: Install prebuilt detection rules and Timelines - tags: - - Security Solution Detections API - - Prebuilt Rules API - /api/detection_engine/rules/prepackaged/_status: - get: - description: >- - Retrieve the status of all Elastic prebuilt detection rules and - Timelines. - operationId: ReadPrebuiltRulesAndTimelinesStatus - responses: - '200': + errors: + description: > + Specifies the objects that failed to resolve. + + + NOTE: One object can result in multiple errors, which + requires separate steps to resolve. For instance, a + `missing_references` error and a `conflict` error. + items: + type: object + type: array + success: + description: > + Indicates a successful import. When set to `false`, some + objects may not have been created. For additional + information, refer to the `errors` and `successResults` + properties. + type: boolean + successCount: + description: | + Indicates the number of successfully resolved records. + type: number + successResults: + description: > + Indicates the objects that are successfully imported, with + any metadata if applicable. + + + NOTE: Objects are only created when all resolvable errors + are addressed, including conflict and missing references. + items: + type: object + type: array + description: Indicates a successful call. + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - additionalProperties: false - type: object - properties: - rules_custom_installed: - description: The total number of custom rules - minimum: 0 - type: integer - rules_installed: - description: The total number of installed prebuilt rules - minimum: 0 - type: integer - rules_not_installed: - description: >- - The total number of available prebuilt rules that are not - installed - minimum: 0 - type: integer - rules_not_updated: - description: The total number of outdated prebuilt rules - minimum: 0 - type: integer - timelines_installed: - description: The total number of installed prebuilt timelines - minimum: 0 - type: integer - timelines_not_installed: - description: >- - The total number of available prebuilt timelines that are - not installed - minimum: 0 - type: integer - timelines_not_updated: - description: The total number of outdated prebuilt timelines - minimum: 0 - type: integer - required: - - rules_custom_installed - - rules_installed - - rules_not_installed - - rules_not_updated - - timelines_installed - - timelines_not_installed - - timelines_not_updated - description: Indicates a successful call - summary: Retrieve the status of prebuilt detection rules and Timelines + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request. + summary: Resolve import errors tags: - - Security Solution Detections API - - Prebuilt Rules API - /api/detection_engine/rules/preview: + - saved objects + '/api/saved_objects/{type}': post: - operationId: RulePreview + deprecated: true + description: Create a Kibana saved object with a randomly generated identifier. + operationId: createSavedObject + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - description: 'If true, overwrites the document with the same identifier.' + in: query + name: overwrite + schema: + type: boolean requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - anyOf: - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewParams - discriminator: - propertyName: type - description: >- - An object containing tags to add or remove and alert ids the changes - will be applied + type: object + properties: + attributes: + $ref: '#/components/schemas/Saved_objects_attributes' + initialNamespaces: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' + references: + $ref: '#/components/schemas/Saved_objects_references' + required: + - attributes required: true responses: '200': @@ -2645,25191 +2173,7664 @@ paths: application/json; Elastic-Api-Version=2023-10-31: schema: type: object - properties: - isAborted: - type: boolean - logs: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RulePreviewLogs - type: array - previewId: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - required: - - logs - description: Successful response - '400': + description: Indicates a successful call. + '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': + type: object + description: Indicates a conflict error. + summary: Create a saved object + tags: + - saved objects + '/api/saved_objects/{type}/{id}': + get: + deprecated: true + description: Retrieve a single Kibana saved object by identifier. + operationId: getSavedObject + parameters: + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + responses: + '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + type: object + description: Indicates a successful call. + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Preview rule alerts generated on specified time range + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request. + summary: Get a saved object tags: - - Security Solution Detections API - - Rule preview API - /api/detection_engine/signals/assignees: + - saved objects post: - description: | - Assign users to detection alerts, and unassign them from alerts. - > info - > You cannot add and remove the same assignee in the same request. - operationId: SetAlertAssignees + deprecated: true + description: >- + Create a Kibana saved object and specify its identifier instead of using + a randomly generated ID. + operationId: createSavedObjectId + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' + - description: 'If true, overwrites the document with the same identifier.' + in: query + name: overwrite + schema: + type: boolean requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: type: object properties: - assignees: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertAssignees - description: Details about the assignees to assign and unassign. - ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds - description: List of alerts ids to assign and unassign passed assignees. + attributes: + $ref: '#/components/schemas/Saved_objects_attributes' + initialNamespaces: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' + references: + $ref: '#/components/schemas/Saved_objects_initial_namespaces' required: - - assignees - - ids + - attributes required: true responses: '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object description: Indicates a successful call. - '400': - description: Invalid request. - summary: Assign and unassign users from detection alerts + '409': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + type: object + description: Indicates a conflict error. + summary: Create a saved object tags: - - Security Solution Detections API - /api/detection_engine/signals/finalize_migration: - post: - description: > - Finalize successful migrations of detection alerts. This replaces the - original index's alias with the successfully migrated index's alias. - - The endpoint is idempotent; therefore, it can safely be used to poll a - given migration and, upon completion, - - finalize it. - operationId: FinalizeAlertsMigration + - saved objects + put: + deprecated: true + description: Update the attributes for Kibana saved objects. + operationId: updateSavedObject + parameters: + - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: type: object - properties: - migration_ids: - items: - type: string - minItems: 1 - type: array - required: - - migration_ids - description: Array of `migration_id`s to finalize required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationFinalizationResult - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': + type: object + description: Indicates a successful call. + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + type: object + description: Indicates the object was not found. + '409': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Finalize detection alert migrations + type: object + description: Indicates a conflict error. + summary: Update a saved object tags: - - Security Solution Detections API - - Alerts migration API - /api/detection_engine/signals/migration: - delete: + - saved objects + '/api/saved_objects/resolve/{type}/{id}': + get: + deprecated: true description: > - Migrations favor data integrity over shard size. Consequently, unused or - orphaned indices are artifacts of - - the migration process. A successful migration will result in both the - old and new indices being present. - - As such, the old, orphaned index can (and likely should) be deleted. - - - While you can delete these indices manually, - - the endpoint accomplishes this task by applying a deletion policy to the - relevant index, causing it to be deleted - - after 30 days. It also deletes other artifacts specific to the migration - implementation. - operationId: AlertsMigrationCleanup - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - migration_ids: - items: - type: string - minItems: 1 - type: array - required: - - migration_ids - description: Array of `migration_id`s to cleanup - required: true + Retrieve a single Kibana saved object by identifier using any legacy URL + alias if it exists. Under certain circumstances, when Kibana is + upgraded, saved object migrations may necessitate regenerating some + object IDs to enable new features. When an object's ID is regenerated, a + legacy URL alias is created for that object, preserving its old ID. In + such a scenario, that object can be retrieved using either its new ID or + its old ID. + operationId: resolveSavedObject + parameters: + - $ref: '#/components/parameters/Saved_objects_saved_object_id' + - $ref: '#/components/parameters/Saved_objects_saved_object_type' responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationCleanupResult - type: array - description: Successful response + type: object + description: Indicates a successful call. '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Clean up detection alert migrations + $ref: '#/components/schemas/Saved_objects_400_response' + description: Bad request. + summary: Resolve a saved object tags: - - Security Solution Detections API - - Alerts migration API - post: - description: > - Initiate a migration of detection alerts. - - Migrations are initiated per index. While the process is neither - destructive nor interferes with existing data, it may be - resource-intensive. As such, it is recommended that you plan your - migrations accordingly. - operationId: CreateAlertsMigration - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - allOf: - - type: object - properties: - index: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - minItems: 1 - type: array - required: - - index - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsReindexOptions - description: Alerts migration parameters - required: true + - saved objects + /api/status: + get: + operationId: /api/status#0 + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: Set to "true" to get the response in v7 format. + in: query + name: v7format + required: false + schema: + type: boolean + - description: Set to "true" to get the response in v8 format. + in: query + name: v8format + required: false + schema: + type: boolean responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - indices: - items: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexMigrationSuccess - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexMigrationError - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SkippedAlertsIndexMigration - type: array - required: - - indices - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: Overall status is OK and Kibana should be functioning normally. + '503': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Initiate a detection alert migration + anyOf: + - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' + - $ref: >- + #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse + description: >- + Kibana's operational status. A minimal response is sent for + unauthorized users. + description: >- + Kibana or some of it's essential services are unavailable. Kibana + may be degraded or unavailable. + summary: Get Kibana's current status tags: - - Security Solution Detections API - - Alerts migration API - /api/detection_engine/signals/migration_status: - post: - description: >- - Retrieve indices that contain detection alerts of a particular age, - along with migration information for each of those indices. - operationId: ReadAlertsMigrationStatus + - system + '/s/{spaceId}/api/observability/slos': + get: + description: > + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: findSlosOp parameters: - - description: Maximum age of qualifying detection alerts + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - description: A valid kql query to filter the SLO with + example: 'slo.name:latency* and slo.tags : "prod"' in: query - name: from - required: true + name: kqlQuery schema: - description: > - Time from which data is analyzed. For example, now-4200s means the - rule analyzes data from 70 minutes - - before its start time. Defaults to now-6m (analyzes data from 6 - minutes before the start time). - format: date-math type: string + - description: 'The page to use for pagination, must be greater or equal than 1' + example: 1 + in: query + name: page + schema: + default: 1 + type: integer + - description: Number of SLOs returned by page + example: 25 + in: query + name: perPage + schema: + default: 25 + maximum: 5000 + type: integer + - description: Sort by field + example: status + in: query + name: sortBy + schema: + default: status + enum: + - sli_value + - status + - error_budget_consumed + - error_budget_remaining + type: string + - description: Sort order + example: asc + in: query + name: sortDirection + schema: + default: asc + enum: + - asc + - desc + type: string + - description: >- + Hide stale SLOs from the list as defined by stale SLO threshold in + SLO settings + in: query + name: hideStale + schema: + type: boolean responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - properties: - indices: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexMigrationStatus - type: array - required: - - indices - description: Successful response + $ref: '#/components/schemas/SLOs_find_slo_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Retrieve the status of detection alert migrations + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Get a paginated list of SLOs tags: - - Security Solution Detections API - - Alerts migration API - /api/detection_engine/signals/search: + - slo post: - description: Find and/or aggregate detection alerts that match the given query. - operationId: SearchAlerts + description: > + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: createSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - description: Elasticsearch query and aggregation request - type: object - properties: - _source: - oneOf: - - type: boolean - - type: string - - items: - type: string - type: array - aggs: - additionalProperties: true - type: object - fields: - items: - type: string - type: array - query: - additionalProperties: true - type: object - runtime_mappings: - additionalProperties: true - type: object - size: - minimum: 0 - type: integer - sort: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSort - track_total_hits: - type: boolean - description: Search and/or aggregation query + $ref: '#/components/schemas/SLOs_create_slo_request' required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - additionalProperties: true - description: Elasticsearch search response - type: object - description: Successful response + $ref: '#/components/schemas/SLOs_create_slo_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Find and/or aggregate detection alerts + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '409': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_409_response' + description: Conflict - The SLO id already exists + summary: Create an SLO tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/signals/status: + - slo + '/s/{spaceId}/api/observability/slos/_delete_instances': post: - description: Set the status of one or more detection alerts. - operationId: SetAlertsStatus + description: > + The deletion occurs for the specified list of `sloId` and `instanceId`. + You must have `all` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: deleteSloInstancesOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' requestBody: content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByIds - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertsStatusByQuery - description: >- - An object containing desired status and explicit alert ids or a query - to select alerts + $ref: '#/components/schemas/SLOs_delete_slo_instances_request' required: true responses: - '200': + '204': + description: Successful request + '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - additionalProperties: true - description: Elasticsearch update by query response - type: object - description: Successful response - '400': + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request + '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Set a detection alert status + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + summary: Batch delete rollup and summary data tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/signals/tags: - post: - description: | - And tags to detection alerts, and remove them from alerts. - > info - > You cannot add and remove the same alert tag in the same request. - operationId: SetAlertTags - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - ids: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertIds - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SetAlertTags - required: - - ids - - tags - description: >- - An object containing tags to add or remove and alert ids the changes - will be applied - required: true + - slo + '/s/{spaceId}/api/observability/slos/{sloId}': + delete: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: deleteSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: true - description: Elasticsearch update by query response - type: object - description: Successful response + '204': + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Invalid input data response + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_PlatformErrorResponse - description: Unsuccessful authentication response - '500': + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SiemErrorResponse - description: Internal server error response - summary: Add and remove detection alert tags - tags: - - Security Solution Detections API - - Alerts API - /api/detection_engine/tags: - get: - description: List all unique tags from all detection rules. - operationId: ReadTags - responses: - '200': + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - description: Indicates a successful call - summary: List all detection rule tags + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Delete an SLO tags: - - Security Solution Detections API - - Tags API - /api/encrypted_saved_objects/_rotate_key: - post: + - slo + get: description: > - Superuser role required. - - - If a saved object cannot be decrypted using the primary encryption key, - then Kibana will attempt to decrypt it using the specified - decryption-only keys. In most of the cases this overhead is negligible, - but if you're dealing with a large number of saved objects and - experiencing performance issues, you may want to rotate the encryption - key. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: rotateEncryptionKey + You must have the `read` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: getSloOp parameters: - - description: > - Specifies a maximum number of saved objects that Kibana can process - in a single batch. Bulk key rotation is an iterative process since - Kibana may not be able to fetch and process all required saved - objects in one go and splits processing into consequent batches. By - default, the batch size is 10000, which is also a maximum allowed - value. - in: query - name: batch_size - required: false - schema: - default: 10000 - type: number - - description: > - Limits encryption key rotation only to the saved objects with the - specified type. By default, Kibana tries to rotate the encryption - key for all saved object types that may contain encrypted - attributes. + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + - description: the specific instanceId used by the summary calculation + example: host-abcde in: query - name: type - required: false + name: instanceId schema: type: string responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: - examples: - rotateEncryptionKeyResponse: - $ref: '#/components/examples/Saved_objects_key_rotation_response' schema: - type: object - properties: - failed: - description: > - Indicates the number of the saved objects that were still - encrypted with one of the old encryption keys that Kibana - failed to re-encrypt with the primary key. - type: number - successful: - description: > - Indicates the total number of all encrypted saved objects - (optionally filtered by the requested `type`), regardless - of the key Kibana used for encryption. - - - NOTE: In most cases, `total` will be greater than - `successful` even if `failed` is zero. The reason is that - Kibana may not need or may not be able to rotate - encryption keys for all encrypted saved objects. - type: number - total: - description: > - Indicates the total number of all encrypted saved objects - (optionally filtered by the requested `type`), regardless - of the key Kibana used for encryption. - type: number - description: Indicates a successful call. + $ref: '#/components/schemas/SLOs_slo_with_summary_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: '#/components/schemas/Saved_objects_400_response' + $ref: '#/components/schemas/SLOs_400_response' description: Bad request - '429': + '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - type: object - description: Already in progress. - summary: Rotate a key for encrypted saved objects + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response + '403': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Get an SLO tags: - - saved objects - /api/endpoint_list: - post: - description: Creates an endpoint list or does nothing if the list already exists - operationId: CreateEndpointList + - slo + put: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: updateSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/SLOs_update_slo_request' + required: true responses: '200': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointList - description: Successful response + $ref: '#/components/schemas/SLOs_slo_definition_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '500': + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response + '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Creates an endpoint list - /api/endpoint_list/items: - delete: - operationId: DeleteEndpointListItem + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Update an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/_reset': + post: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: resetSloOp parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: - '200': + '204': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response + $ref: '#/components/schemas/SLOs_slo_definition_response' + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Deletes an endpoint list item - get: - operationId: ReadEndpointListItem - parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Reads an endpoint list item + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Reset an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/disable': post: - operationId: CreateEndpointListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item already exists - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Creates an endpoint list item - put: - operationId: UpdateEndpointListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - description: Either `id` or `item_id` must be specified - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: disableSloOp + parameters: + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - description: Successful response + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list item not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Updates an endpoint list item - /api/endpoint_list/items/_find: - get: - operationId: FindEndpointListItems + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Disable an SLO + tags: + - slo + '/s/{spaceId}/api/observability/slos/{sloId}/enable': + post: + description: > + You must have the `write` privileges for the **SLOs** feature in the + **Observability** section of the Kibana feature privileges. + operationId: enableSloOp parameters: - - description: > - Filters the returned results according to the value of the specified - field, - - using the `:` syntax. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 0 - type: integer - - description: The number of exception list items to return per page - in: query - name: per_page - required: false - schema: - minimum: 0 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string + - $ref: '#/components/parameters/SLOs_kbn_xsrf' + - $ref: '#/components/parameters/SLOs_space_id' + - $ref: '#/components/parameters/SLOs_slo_id' responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_EndpointListItem - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - pit: - type: string - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response + '204': + description: Successful request '400': content: application/json; Elastic-Api-Version=2023-10-31: schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Invalid input data + $ref: '#/components/schemas/SLOs_400_response' + description: Bad request '401': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication + $ref: '#/components/schemas/SLOs_401_response' + description: Unauthorized response '403': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse - description: Insufficient privileges + $ref: '#/components/schemas/SLOs_403_response' + description: Unauthorized response '404': content: application/json; Elastic-Api-Version=2023-10-31: schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Endpoint list not found - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse - description: Internal server error - summary: Finds endpoint list items - /api/endpoint/action: - get: - description: Get a list of action requests and their responses - operationId: EndpointGetActionsList - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Actions List schema + $ref: '#/components/schemas/SLOs_404_response' + description: Not found response + summary: Enable an SLO tags: - - Security Solution Endpoint Management API - '/api/endpoint/action_log/{agent_id}': - get: - deprecated: true - description: Get action requests log - operationId: EndpointGetActionLog - parameters: - - in: path - name: agent_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionLogRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get action requests log schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action_status: - get: - description: Get action status - operationId: EndpointGetActionsStatus - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - agent_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse - description: OK - summary: Get Actions status schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}': - get: - description: Get action details - operationId: EndpointGetActionsDetails - parameters: - - in: path - name: action_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Action details schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}/file/{file_id}/download`': - get: - description: Download a file from an endpoint - operationId: EndpointFileDownload - parameters: - - in: path - name: action_id - required: true - schema: - type: string - - in: path - name: file_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: File Download schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/action/{action_id}/file/{file_id}`': - get: - description: Get file info - operationId: EndpointFileInfo - parameters: - - in: path - name: action_id - required: true - schema: - type: string - - in: path - name: file_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: File Info schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/execute: - post: - description: Execute a given command on an endpoint - operationId: EndpointExecuteAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Execute Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/get_file: - post: - description: Get a file from an endpoint - operationId: EndpointGetFileAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get File Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/isolate: - post: - description: Isolate an endpoint - operationId: EndpointIsolateAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Isolate Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/kill_process: - post: - description: Kill a running process on an endpoint - operationId: EndpointKillProcessAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Kill process Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/running_procs: - post: - description: Get list of running processes on an endpoint - operationId: EndpointGetProcessesAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Running Processes Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/scan: - post: - description: Scan a file or directory - operationId: EndpointScanAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ScanRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Scan Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/state: - get: - operationId: EndpointGetActionsState - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse - description: OK - summary: Get Action State schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/suspend_process: - post: - description: Suspend a running process on an endpoint - operationId: EndpointSuspendProcessAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Suspend process Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/unisolate: - post: - description: Release an endpoint - operationId: EndpointUnisolateAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Unisolate Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/action/upload: - post: - description: Upload a file to an endpoint - operationId: EndpointUploadAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UploadRouteRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Upload Action - tags: - - Security Solution Endpoint Management API - /api/endpoint/isolate: - post: - deprecated: true - operationId: EndpointIsolateRedirect - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - '308': - description: Permanent Redirect - headers: - Location: - description: Permanently redirects to "/api/endpoint/action/isolate" - schema: - example: /api/endpoint/action/isolate - type: string - summary: Permanently redirects to a new location - tags: - - Security Solution Endpoint Management API - /api/endpoint/metadata: - get: - operationId: GetEndpointMetadataList - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ListRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata List schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/metadata/{id}': - get: - operationId: GetEndpointMetadata - parameters: - - in: path - name: id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/metadata/transforms: - get: - operationId: GetEndpointMetadataTransform - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Metadata Transform schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/policy_response: - get: - operationId: GetPolicyResponse - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - agentId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Policy Response schema - tags: - - Security Solution Endpoint Management API - /api/endpoint/policy/summaries: - get: - deprecated: true - operationId: GetAgentPolicySummary - parameters: - - in: query - name: query - required: true - schema: - type: object - properties: - package_name: - type: string - policy_id: - nullable: true - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get Agent Policy Summary schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/protection_updates_note/{package_policy_id}': - get: - operationId: GetProtectionUpdatesNote - parameters: - - in: path - name: package_policy_id - required: true - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse - description: OK - summary: Get Protection Updates Note schema - tags: - - Security Solution Endpoint Management API - post: - operationId: CreateUpdateProtectionUpdatesNote - parameters: - - in: path - name: package_policy_id - required: true - schema: - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - note: - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse - description: OK - summary: Create Update Protection Updates Note schema - tags: - - Security Solution Endpoint Management API - '/api/endpoint/suggestions/{suggestion_type}': - post: - operationId: GetEndpointSuggestions - parameters: - - in: path - name: suggestion_type - required: true - schema: - enum: - - eventFilters - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - field: - type: string - fieldMeta: {} - filters: {} - query: - type: string - required: - - parameters - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - summary: Get suggestions - tags: - - Security Solution Endpoint Management API - /api/endpoint/unisolate: - post: - deprecated: true - operationId: EndpointUnisolateRedirect - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_SuccessResponse - description: OK - '308': - description: Permanent Redirect - headers: - Location: - description: Permanently redirects to "/api/endpoint/action/unisolate" - schema: - example: /api/endpoint/action/unisolate - type: string - summary: Permanently redirects to a new location - tags: - - Security Solution Endpoint Management API - /api/exception_lists: - delete: - operationId: DeleteExceptionList - parameters: - - description: Either `id` or `list_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Either `id` or `list_id` must be specified - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Deletes an exception list - tags: - - Security Solution Exceptions API - get: - operationId: ReadExceptionList - parameters: - - description: Either `id` or `list_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Either `id` or `list_id` must be specified - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves an exception list using its `id` or `list_id` field - tags: - - Security Solution Exceptions API - post: - operationId: CreateExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion - default: 1 - required: - - name - - description - - type - description: Exception list's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates an exception list - tags: - - Security Solution Exceptions API - put: - operationId: UpdateExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion - required: - - name - - description - - type - description: Exception list's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Updates an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_duplicate: - post: - operationId: DuplicateExceptionList - parameters: - - description: Exception list's human identifier - in: query - name: list_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - - description: >- - Determines whether to include expired exceptions in the exported - list - in: query - name: include_expired_exceptions - required: true - schema: - default: 'true' - enum: - - 'true' - - 'false' - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list to duplicate not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Duplicates an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_export: - post: - description: Exports an exception list and its associated items to an .ndjson file - operationId: ExportExceptionList - parameters: - - description: Exception list's identifier - in: query - name: id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Exception list's human identifier - in: query - name: list_id - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - - description: >- - Determines whether to include expired exceptions in the exported - list - in: query - name: include_expired_exceptions - required: true - schema: - default: 'true' - enum: - - 'true' - - 'false' - type: string - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: >- - A `.ndjson` file containing specified exception list and its - items - format: binary - type: string - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Exports an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/_find: - get: - operationId: FindExceptionLists - parameters: - - description: > - Filters the returned results according to the value of the specified - field. - - - Uses the `so type.field name:field` value syntax, where `so type` - can be: - - - - `exception-list`: Specify a space-aware exception list. - - - `exception-list-agnostic`: Specify an exception list that is - shared across spaces. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListsFilter - - description: > - Determines whether the returned containers are Kibana associated - with a Kibana space - - or available in all spaces (`agnostic` or `single`) - in: query - name: namespace_type - required: false - schema: - default: - - single - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - type: array - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 1 - type: integer - - description: The number of exception lists to return per page - in: query - name: per_page - required: false - schema: - minimum: 1 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - type: string - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - type: array - page: - minimum: 1 - type: integer - per_page: - minimum: 1 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Finds exception lists - tags: - - Security Solution Exceptions API - /api/exception_lists/_import: - post: - description: Imports an exception list and associated items - operationId: ImportExceptionList - parameters: - - description: > - Determines whether existing exception lists with the same `list_id` - are overwritten. - - If any exception items have the same `item_id`, those are also - overwritten. - in: query - name: overwrite - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_exceptions - required: false - schema: - default: false - type: boolean - - in: query - name: overwrite_action_connectors - required: false - schema: - default: false - type: boolean - - description: > - Determines whether the list being imported will have a new `list_id` - generated. - - Additional `item_id`'s are generated for each exception item. Both - the exception - - list and its items are overwritten. - in: query - name: as_new_list - required: false - schema: - default: false - type: boolean - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - description: A `.ndjson` file containing the exception list - format: binary - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - errors: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray - success: - type: boolean - success_count: - minimum: 0 - type: integer - success_count_exception_list_items: - minimum: 0 - type: integer - success_count_exception_lists: - minimum: 0 - type: integer - success_exception_list_items: - type: boolean - success_exception_lists: - type: boolean - required: - - errors - - success - - success_count - - success_exception_lists - - success_count_exception_lists - - success_exception_list_items - - success_count_exception_list_items - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Imports an exception list - tags: - - Security Solution Exceptions API - /api/exception_lists/items: - delete: - operationId: DeleteExceptionListItem - parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Deletes an exception list item - tags: - - Security Solution Exceptions API - get: - operationId: ReadExceptionListItem - parameters: - - description: Either `id` or `item_id` must be specified - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - - description: Either `id` or `item_id` must be specified - in: query - name: item_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Gets an exception list item - tags: - - Security Solution Exceptions API - post: - operationId: CreateExceptionListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - required: - - list_id - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates an exception list item - tags: - - Security Solution Exceptions API - put: - operationId: UpdateExceptionListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - description: Either `id` or `item_id` must be specified - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - description: Either `id` or `item_id` must be specified - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - required: - - type - - name - - description - - entries - description: Exception list item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Updates an exception list item - tags: - - Security Solution Exceptions API - /api/exception_lists/items/_find: - get: - operationId: FindExceptionListItems - parameters: - - description: List's id - in: query - name: list_id - required: true - schema: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - type: array - - description: > - Filters the returned results according to the value of the specified - field, - - using the `:` syntax. - in: query - name: filter - required: false - schema: - default: [] - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_FindExceptionListItemsFilter - type: array - - description: > - Determines whether the returned containers are Kibana associated - with a Kibana space - - or available in all spaces (`agnostic` or `single`) - in: query - name: namespace_type - required: false - schema: - default: - - single - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - type: array - - in: query - name: search - required: false - schema: - type: string - - description: The page number to return - in: query - name: page - required: false - schema: - minimum: 0 - type: integer - - description: The number of exception list items to return per page - in: query - name: per_page - required: false - schema: - minimum: 0 - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItem - type: array - page: - minimum: 1 - type: integer - per_page: - minimum: 1 - type: integer - pit: - type: string - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Finds exception list items - tags: - - Security Solution Exceptions API - /api/exception_lists/summary: - get: - operationId: ReadExceptionListSummary - parameters: - - description: Exception list's identifier generated upon creation - in: query - name: id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - - description: Exception list's human readable identifier - in: query - name: list_id - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - - in: query - name: namespace_type - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - - description: Search filter clause - in: query - name: filter - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - linux: - minimum: 0 - type: integer - macos: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - windows: - minimum: 0 - type: integer - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves an exception list summary - tags: - - Security Solution Exceptions API - /api/exceptions/shared: - post: - operationId: CreateSharedExceptionList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - required: - - name - - description - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionList - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Exception list already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_SiemErrorResponse - description: Internal server error response - summary: Creates a shared exception list - tags: - - Security Solution Exceptions API - /api/lists: - delete: - operationId: DeleteList - parameters: - - description: List's `id` value - in: query - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - in: query - name: deleteReferences - required: false - schema: - default: false - type: boolean - - in: query - name: ignoreReferences - required: false - schema: - default: false - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes a list - tags: - - Security Solution Lists API - get: - operationId: ReadList - parameters: - - description: List's `id` value - in: query - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Retrieves a list using its id field - tags: - - Security Solution Lists API - patch: - operationId: PatchList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - version: - minimum: 1 - type: integer - required: - - id - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Patches a list - tags: - - Security Solution Lists API - post: - operationId: CreateList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - deserializer: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - serializer: - type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - version: - default: 1 - minimum: 1 - type: integer - required: - - name - - description - - type - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates a list - tags: - - Security Solution Lists API - put: - operationId: UpdateList - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListDescription - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListMetadata - name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - version: - minimum: 1 - type: integer - required: - - id - - name - - description - description: List's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Updates a list - tags: - - Security Solution Lists API - /api/lists/_find: - get: - operationId: FindLists - parameters: - - description: The page number to return - in: query - name: page - required: false - schema: - type: integer - - description: The number of lists to return per page - in: query - name: per_page - required: false - schema: - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query - name: cursor - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsCursor' - - description: > - Filters the returned results according to the value of the specified - field, - - using the : syntax. - in: query - name: filter - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_FindListsFilter' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListsCursor - data: - items: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - - cursor - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Finds lists - tags: - - Security Solution Lists API - /api/lists/index: - delete: - operationId: DeleteListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes list data streams - tags: - - Security Solution Lists API - get: - operationId: ReadListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - list_index: - type: boolean - list_item_index: - type: boolean - required: - - list_index - - list_item_index - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream(s) not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Get list data stream existence status - tags: - - Security Solution Lists API - post: - operationId: CreateListIndex - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - acknowledged: - type: boolean - required: - - acknowledged - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List data stream exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates necessary list data streams - tags: - - Security Solution Lists API - /api/lists/items: - delete: - operationId: DeleteListItem - parameters: - - description: Required if `list_id` and `value` are not specified - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: value - required: false - schema: - type: string - - description: >- - Determines when changes made by the request are made visible to - search - in: query - name: refresh - required: false - schema: - default: 'false' - enum: - - 'true' - - 'false' - - wait_for - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Deletes a list item - tags: - - Security Solution Lists API - get: - operationId: ReadListItem - parameters: - - description: Required if `list_id` and `value` are not specified - in: query - name: id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: Required if `id` is not specified - in: query - name: value - required: false - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Gets a list item - tags: - - Security Solution Lists API - patch: - operationId: PatchListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - refresh: - description: >- - Determines when changes made by the request are made visible - to search - enum: - - 'true' - - 'false' - - wait_for - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - id - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Patches a list item - tags: - - Security Solution Lists API - post: - operationId: CreateListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - refresh: - description: >- - Determines when changes made by the request are made visible - to search - enum: - - 'true' - - 'false' - - wait_for - type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - list_id - - value - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item already exists response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Creates a list item - tags: - - Security Solution Lists API - put: - operationId: UpdateListItem - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - _version: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - meta: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemMetadata - value: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemValue - required: - - id - - value - description: List item's properties - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItem' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List item not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Updates a list item - tags: - - Security Solution Lists API - /api/lists/items/_export: - post: - description: Exports list item values from the specified list - operationId: ExportListItems - parameters: - - description: List's id to export - in: query - name: list_id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: A `.txt` file containing list items from the specified list - format: binary - type: string - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List not found response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Exports list items - tags: - - Security Solution Lists API - /api/lists/items/_find: - get: - operationId: FindListItems - parameters: - - description: List's id - in: query - name: list_id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: The page number to return - in: query - name: page - required: false - schema: - type: integer - - description: The number of list items to return per page - in: query - name: per_page - required: false - schema: - type: integer - - description: Determines which field is used to sort the results - in: query - name: sort_field - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - - description: 'Determines the sort order, which can be `desc` or `asc`' - in: query - name: sort_order - required: false - schema: - enum: - - desc - - asc - type: string - - description: > - Returns the list that come after the last list returned in the - previous call - - (use the cursor value returned in the previous call). This parameter - uses - - the `tie_breaker_id` field to ensure all lists are sorted and - returned correctly. - in: query - name: cursor - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor - - description: > - Filters the returned results according to the value of the specified - field, - - using the : syntax. - in: query - name: filter - required: false - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsFilter - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - cursor: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_FindListItemsCursor - data: - items: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItem - type: array - page: - minimum: 0 - type: integer - per_page: - minimum: 0 - type: integer - total: - minimum: 0 - type: integer - required: - - data - - page - - per_page - - total - - cursor - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Finds list items - tags: - - Security Solution Lists API - /api/lists/items/_import: - post: - description: > - Imports a list of items from a `.txt` or `.csv` file. The maximum file - size is 9 million bytes. - - - You can import items to a new or existing list. - operationId: ImportListItems - parameters: - - description: | - List's id. - - Required when importing to an existing list. - in: query - name: list_id - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - - description: > - Type of the importing list. - - - Required when importing a new list that is `list_id` is not - specified. - in: query - name: type - required: false - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - - in: query - name: serializer - required: false - schema: - type: string - - in: query - name: deserializer - required: false - schema: - type: string - - description: >- - Determines when changes made by the request are made visible to - search - in: query - name: refresh - required: false - schema: - enum: - - 'true' - - 'false' - - wait_for - type: string - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - description: >- - A `.txt` or `.csv` file containing newline separated list - items - format: binary - type: string - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_Solution_Lists_API_List' - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: List with specified list_id does not exist response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Imports list items - tags: - - Security Solution Lists API - /api/lists/privileges: - get: - operationId: ReadListPrivileges - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - is_authenticated: - type: boolean - listItems: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListItemPrivileges - lists: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_ListPrivileges - required: - - lists - - listItems - - is_authenticated - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Invalid input data response - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Unsuccessful authentication response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_PlatformErrorResponse - description: Not enough privileges response - '500': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Lists_API_SiemErrorResponse - description: Internal server error response - summary: Gets list privileges - tags: - - Security Solution Lists API - /api/ml/saved_objects/sync: - get: - description: > - Synchronizes Kibana saved objects for machine learning jobs and trained - models in the default space. You must have `all` privileges for the - **Machine Learning** feature in the **Analytics** section of the Kibana - feature privileges. This API runs automatically when you start Kibana - and periodically thereafter. - operationId: mlSync - parameters: - - $ref: '#/components/parameters/Machine_learning_APIs_simulateParam' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - syncExample: - $ref: '#/components/examples/Machine_learning_APIs_mlSyncExample' - schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync200Response' - description: Indicates a successful call - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Machine_learning_APIs_mlSync4xxResponse' - description: Authorization information is missing or invalid. - summary: Sync saved objects in the default space - tags: - - ml - /api/note: - delete: - operationId: DeleteNote - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - oneOf: - - nullable: true - type: object - properties: - noteId: - type: string - required: - - noteId - - type: object - properties: - noteIds: - items: - type: string - nullable: true - type: array - required: - - noteIds - description: The id of the note to delete. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - description: Indicates the note was successfully deleted. - summary: Deletes a note from a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - get: - description: Gets notes - operationId: GetNotes - parameters: - - in: query - name: documentIds - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DocumentIds' - - in: query - name: page - schema: - nullable: true - type: number - - in: query - name: perPage - schema: - nullable: true - type: number - - in: query - name: search - schema: - nullable: true - type: string - - in: query - name: sortField - schema: - nullable: true - type: string - - in: query - name: sortOrder - schema: - nullable: true - type: string - - in: query - name: filter - schema: - nullable: true - type: string - responses: - '200': - description: Indicates the requested notes were returned. - summary: Get all notes for a given document. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - patch: - operationId: PersistNoteRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - eventDataView: - nullable: true - type: string - eventIngested: - nullable: true - type: string - eventTimestamp: - nullable: true - type: string - note: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - noteId: - nullable: true - type: string - overrideOwner: - nullable: true - type: boolean - version: - nullable: true - type: string - required: - - note - description: The note to persist or update along with additional metadata. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistNote: - type: object - properties: - code: - type: number - message: - type: string - note: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Note - required: - - code - - message - - note - required: - - persistNote - required: - - data - description: Indicates the note was successfully created. - summary: Persists a note to a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/osquery/live_queries: - get: - operationId: OsqueryFindLiveQueries - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindLiveQueryRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find live queries - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreateLiveQuery - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateLiveQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a live query - tags: - - Security Solution Osquery API - '/api/osquery/live_queries/{id}': - get: - operationId: OsqueryGetLiveQueryDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: query - name: query - schema: - additionalProperties: true - type: object - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get live query details - tags: - - Security Solution Osquery API - '/api/osquery/live_queries/{id}/results/{actionId}': - get: - operationId: OsqueryGetLiveQueryResults - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: path - name: actionId - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get live query results - tags: - - Security Solution Osquery API - /api/osquery/packs: - get: - operationId: OsqueryFindPacks - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindPacksRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find packs - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreatePacks - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreatePacksRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a packs - tags: - - Security Solution Osquery API - '/api/osquery/packs/{id}': - delete: - operationId: OsqueryDeletePacks - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Delete packs - tags: - - Security Solution Osquery API - get: - operationId: OsqueryGetPacksDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get packs details - tags: - - Security Solution Osquery API - put: - operationId: OsqueryUpdatePacks - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdatePacksRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Update packs - tags: - - Security Solution Osquery API - /api/osquery/saved_queries: - get: - operationId: OsqueryFindSavedQueries - parameters: - - in: query - name: query - required: true - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_FindSavedQueryRequestQuery - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Find saved queries - tags: - - Security Solution Osquery API - post: - operationId: OsqueryCreateSavedQuery - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_CreateSavedQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Create a saved query - tags: - - Security Solution Osquery API - '/api/osquery/saved_queries/{id}': - delete: - operationId: OsqueryDeleteSavedQuery - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Delete saved query - tags: - - Security Solution Osquery API - get: - operationId: OsqueryGetSavedQueryDetails - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Get saved query details - tags: - - Security Solution Osquery API - put: - operationId: OsqueryUpdateSavedQuery - parameters: - - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_UpdateSavedQueryRequestBody - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DefaultSuccessResponse - description: OK - summary: Update saved query - tags: - - Security Solution Osquery API - /api/pinned_event: - patch: - operationId: PersistPinnedEventRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - eventId: - type: string - pinnedEventId: - nullable: true - type: string - timelineId: - type: string - required: - - eventId - - timelineId - description: The pinned event to persist or update along with additional metadata. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistPinnedEventOnTimeline: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - - type: object - properties: - code: - type: number - message: - type: string - required: - - persistPinnedEventOnTimeline - required: - - data - description: Indicate the event was successfully pinned in the timeline. - summary: Persists a pinned event to a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/saved_objects/_bulk_create: - post: - deprecated: true - operationId: bulkCreateSavedObjects - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - description: 'When true, overwrites the document with the same identifier.' - in: query - name: overwrite - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - type: object - type: array - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Create saved objects - tags: - - saved objects - /api/saved_objects/_bulk_delete: - post: - deprecated: true - description: | - WARNING: When you delete a saved object, it cannot be recovered. - operationId: bulkDeleteSavedObjects - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - description: > - When true, force delete objects that exist in multiple namespaces. - Note that the option applies to the whole request. Use the delete - object API to specify per-object deletion behavior. TIP: Use this if - you attempted to delete objects and received an HTTP 400 error with - the following message: "Unable to delete saved object that exists in - multiple namespaces, use the force option to delete it anyway". - WARNING: When you bulk delete objects that exist in multiple - namespaces, the API also deletes legacy url aliases that reference - the object. These requests are batched to minimise the impact but - they can place a heavy load on Kibana. Make sure you limit the - number of objects that exist in multiple namespaces in a single bulk - delete operation. - in: query - name: force - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - type: object - type: array - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Delete saved objects - tags: - - saved objects - /api/saved_objects/_bulk_get: - post: - deprecated: true - operationId: bulkGetSavedObjects - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - type: object - type: array - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Get saved objects - tags: - - saved objects - /api/saved_objects/_bulk_resolve: - post: - deprecated: true - description: > - Retrieve multiple Kibana saved objects by identifier using any legacy - URL aliases if they exist. Under certain circumstances when Kibana is - upgraded, saved object migrations may necessitate regenerating some - object IDs to enable new features. When an object's ID is regenerated, a - legacy URL alias is created for that object, preserving its old ID. In - such a scenario, that object can be retrieved by the bulk resolve API - using either its new ID or its old ID. - operationId: bulkResolveSavedObjects - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - type: object - type: array - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Resolve saved objects - tags: - - saved objects - /api/saved_objects/_bulk_update: - post: - deprecated: true - description: Update the attributes for multiple Kibana saved objects. - operationId: bulkUpdateSavedObjects - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - items: - type: object - type: array - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: > - Indicates a successful call. NOTE: This HTTP response code indicates - that the bulk operation succeeded. Errors pertaining to individual - objects will be returned in the response body. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Update saved objects - tags: - - saved objects - /api/saved_objects/_export: - post: - description: > - Retrieve sets of saved objects that you want to import into Kibana. - - You must include `type` or `objects` in the request body. - - - Exported saved objects are not backwards compatible and cannot be - imported into an older version of Kibana. - - - NOTE: The `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be exported. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: exportSavedObjectsDefault - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - exportSavedObjectsRequest: - $ref: '#/components/examples/Saved_objects_export_objects_request' - schema: - type: object - properties: - excludeExportDetails: - default: false - description: Do not add export details entry at the end of the stream. - type: boolean - includeReferencesDeep: - description: >- - Includes all of the referenced objects in the exported - objects. - type: boolean - objects: - description: A list of objects to export. - items: - type: object - type: array - type: - description: >- - The saved object types to include in the export. Use `*` to - export all the types. - oneOf: - - type: string - - items: - type: string - type: array - required: true - responses: - '200': - content: - application/x-ndjson; Elastic-Api-Version=2023-10-31: - examples: - exportSavedObjectsResponse: - $ref: '#/components/examples/Saved_objects_export_objects_response' - schema: - additionalProperties: true - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request. - summary: Export saved objects - tags: - - saved objects - /api/saved_objects/_find: - get: - deprecated: true - description: Retrieve a paginated set of Kibana saved objects. - operationId: findSavedObjects - parameters: - - description: > - An aggregation structure, serialized as a string. The field format - is similar to filter, meaning that to use a saved object type - attribute in the aggregation, the `savedObjectType.attributes.title: - "myTitle"` format must be used. For root fields, the syntax is - `savedObjectType.rootField`. NOTE: As objects change in Kibana, the - results on each page of the response also change. Use the find API - for traditional paginated results, but avoid using it to export - large amounts of data. - in: query - name: aggs - schema: - type: string - - description: The default operator to use for the `simple_query_string`. - in: query - name: default_search_operator - schema: - type: string - - description: The fields to return in the attributes key of the response. - in: query - name: fields - schema: - oneOf: - - type: string - - type: array - - description: > - The filter is a KQL string with the caveat that if you filter with - an attribute from your saved object type, it should look like that: - `savedObjectType.attributes.title: "myTitle"`. However, if you use a - root attribute of a saved object such as `updated_at`, you will have - to define your filter like that: `savedObjectType.updated_at > - 2018-12-22`. - in: query - name: filter - schema: - type: string - - description: >- - Filters to objects that do not have a relationship with the type and - identifier combination. - in: query - name: has_no_reference - schema: - type: object - - description: >- - The operator to use for the `has_no_reference` parameter. Either - `OR` or `AND`. Defaults to `OR`. - in: query - name: has_no_reference_operator - schema: - type: string - - description: >- - Filters to objects that have a relationship with the type and ID - combination. - in: query - name: has_reference - schema: - type: object - - description: >- - The operator to use for the `has_reference` parameter. Either `OR` - or `AND`. Defaults to `OR`. - in: query - name: has_reference_operator - schema: - type: string - - description: The page of objects to return. - in: query - name: page - schema: - type: integer - - description: The number of objects to return per page. - in: query - name: per_page - schema: - type: integer - - description: >- - An Elasticsearch `simple_query_string` query that filters the - objects in the response. - in: query - name: search - schema: - type: string - - description: >- - The fields to perform the `simple_query_string` parsed query - against. - in: query - name: search_fields - schema: - oneOf: - - type: string - - type: array - - description: > - Sorts the response. Includes "root" and "type" fields. "root" fields - exist for all saved objects, such as "updated_at". "type" fields are - specific to an object type, such as fields returned in the - attributes key of the response. When a single type is defined in the - type parameter, the "root" and "type" fields are allowed, and - validity checks are made in that order. When multiple types are - defined in the type parameter, only "root" fields are allowed. - in: query - name: sort_field - schema: - type: string - - description: The saved object types to include. - in: query - name: type - required: true - schema: - oneOf: - - type: string - - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request - summary: Search for saved objects - tags: - - saved objects - /api/saved_objects/_import: - post: - description: > - Create sets of Kibana saved objects from a file created by the export - API. - - Saved objects can be imported only into the same version, a newer minor - on the same major, or the next major. Exported saved objects are not - backwards compatible and cannot be imported into an older version of - Kibana. - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: importSavedObjectsDefault - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - description: > - Creates copies of saved objects, regenerates each object ID, and - resets the origin. When used, potential conflict errors are avoided. - NOTE: This option cannot be used with the `overwrite` and - `compatibilityMode` options. - in: query - name: createNewCopies - required: false - schema: - type: boolean - - description: > - Overwrites saved objects when they already exist. When used, - potential conflict errors are automatically resolved by overwriting - the destination object. NOTE: This option cannot be used with the - `createNewCopies` option. - in: query - name: overwrite - required: false - schema: - type: boolean - - description: > - Applies various adjustments to the saved objects that are being - imported to maintain compatibility between different Kibana - versions. Use this option only if you encounter issues with imported - saved objects. NOTE: This option cannot be used with the - `createNewCopies` option. - in: query - name: compatibilityMode - required: false - schema: - type: boolean - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - examples: - importObjectsRequest: - $ref: '#/components/examples/Saved_objects_import_objects_request' - schema: - type: object - properties: - file: - description: > - A file exported using the export API. NOTE: The - `savedObjects.maxImportExportSize` configuration setting - limits the number of saved objects which may be included in - this file. Similarly, the - `savedObjects.maxImportPayloadBytes` setting limits the - overall size of the file that can be imported. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - importObjectsResponse: - $ref: '#/components/examples/Saved_objects_import_objects_response' - schema: - type: object - properties: - errors: - description: > - Indicates the import was unsuccessful and specifies the - objects that failed to import. - - - NOTE: One object may result in multiple errors, which - requires separate steps to resolve. For instance, a - `missing_references` error and conflict error. - items: - type: object - type: array - success: - description: > - Indicates when the import was successfully completed. When - set to false, some objects may not have been created. For - additional information, refer to the `errors` and - `successResults` properties. - type: boolean - successCount: - description: Indicates the number of successfully imported records. - type: integer - successResults: - description: > - Indicates the objects that are successfully imported, with - any metadata if applicable. - - - NOTE: Objects are created only when all resolvable errors - are addressed, including conflicts and missing references. - If objects are created as new copies, each entry in the - `successResults` array includes a `destinationId` - attribute. - items: - type: object - type: array - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request. - summary: Import saved objects - tags: - - saved objects - /api/saved_objects/_resolve_import_errors: - post: - description: > - To resolve errors from the Import objects API, you can: - - - * Retry certain saved objects - - * Overwrite specific saved objects - - * Change references to different saved objects - - - This functionality is in technical preview and may be changed or removed - in a future release. Elastic will work to fix any issues, but features - in technical preview are not subject to the support SLA of official GA - features. - operationId: resolveImportErrors - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - description: > - Applies various adjustments to the saved objects that are being - imported to maintain compatibility between different Kibana - versions. When enabled during the initial import, also enable when - resolving import errors. This option cannot be used with the - `createNewCopies` option. - in: query - name: compatibilityMode - required: false - schema: - type: boolean - - description: > - Creates copies of the saved objects, regenerates each object ID, and - resets the origin. When enabled during the initial import, also - enable when resolving import errors. - in: query - name: createNewCopies - required: false - schema: - type: boolean - requestBody: - content: - multipart/form-data; Elastic-Api-Version=2023-10-31: - examples: - resolveImportErrorsRequest: - $ref: >- - #/components/examples/Saved_objects_resolve_missing_reference_request - schema: - type: object - properties: - file: - description: The same file given to the import API. - format: binary - type: string - retries: - description: >- - The retry operations, which can specify how to resolve - different types of errors. - items: - type: object - properties: - destinationId: - description: >- - Specifies the destination ID that the imported object - should have, if different from the current ID. - type: string - id: - description: The saved object ID. - type: string - ignoreMissingReferences: - description: >- - When set to `true`, ignores missing reference errors. - When set to `false`, does nothing. - type: boolean - overwrite: - description: >- - When set to `true`, the source object overwrites the - conflicting destination object. When set to `false`, - does nothing. - type: boolean - replaceReferences: - description: >- - A list of `type`, `from`, and `to` used to change the - object references. - items: - type: object - properties: - from: - type: string - to: - type: string - type: - type: string - type: array - type: - description: The saved object type. - type: string - required: - - type - - id - type: array - required: - - retries - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - examples: - resolveImportErrorsResponse: - $ref: >- - #/components/examples/Saved_objects_resolve_missing_reference_response - schema: - type: object - properties: - errors: - description: > - Specifies the objects that failed to resolve. - - - NOTE: One object can result in multiple errors, which - requires separate steps to resolve. For instance, a - `missing_references` error and a `conflict` error. - items: - type: object - type: array - success: - description: > - Indicates a successful import. When set to `false`, some - objects may not have been created. For additional - information, refer to the `errors` and `successResults` - properties. - type: boolean - successCount: - description: | - Indicates the number of successfully resolved records. - type: number - successResults: - description: > - Indicates the objects that are successfully imported, with - any metadata if applicable. - - - NOTE: Objects are only created when all resolvable errors - are addressed, including conflict and missing references. - items: - type: object - type: array - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request. - summary: Resolve import errors - tags: - - saved objects - '/api/saved_objects/{type}': - post: - deprecated: true - description: Create a Kibana saved object with a randomly generated identifier. - operationId: createSavedObject - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - - description: 'If true, overwrites the document with the same identifier.' - in: query - name: overwrite - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - attributes: - $ref: '#/components/schemas/Saved_objects_attributes' - initialNamespaces: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' - references: - $ref: '#/components/schemas/Saved_objects_references' - required: - - attributes - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a conflict error. - summary: Create a saved object - tags: - - saved objects - '/api/saved_objects/{type}/{id}': - get: - deprecated: true - description: Retrieve a single Kibana saved object by identifier. - operationId: getSavedObject - parameters: - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request. - summary: Get a saved object - tags: - - saved objects - post: - deprecated: true - description: >- - Create a Kibana saved object and specify its identifier instead of using - a randomly generated ID. - operationId: createSavedObjectId - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - - description: 'If true, overwrites the document with the same identifier.' - in: query - name: overwrite - schema: - type: boolean - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - attributes: - $ref: '#/components/schemas/Saved_objects_attributes' - initialNamespaces: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' - references: - $ref: '#/components/schemas/Saved_objects_initial_namespaces' - required: - - attributes - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a conflict error. - summary: Create a saved object - tags: - - saved objects - put: - deprecated: true - description: Update the attributes for Kibana saved objects. - operationId: updateSavedObject - parameters: - - $ref: '#/components/parameters/Saved_objects_kbn_xsrf' - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates the object was not found. - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a conflict error. - summary: Update a saved object - tags: - - saved objects - '/api/saved_objects/resolve/{type}/{id}': - get: - deprecated: true - description: > - Retrieve a single Kibana saved object by identifier using any legacy URL - alias if it exists. Under certain circumstances, when Kibana is - upgraded, saved object migrations may necessitate regenerating some - object IDs to enable new features. When an object's ID is regenerated, a - legacy URL alias is created for that object, preserving its old ID. In - such a scenario, that object can be retrieved using either its new ID or - its old ID. - operationId: resolveSavedObject - parameters: - - $ref: '#/components/parameters/Saved_objects_saved_object_id' - - $ref: '#/components/parameters/Saved_objects_saved_object_type' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Saved_objects_400_response' - description: Bad request. - summary: Resolve a saved object - tags: - - saved objects - /api/security_ai_assistant/anonymization_fields/_bulk_action: - post: - description: >- - The bulk action is applied to all anonymization fields that match the - filter or to the list of anonymization fields by their IDs. - operationId: PerformAnonymizationFieldsBulkAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - create: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldCreateProps - type: array - delete: - type: object - properties: - ids: - description: Array of anonymization fields IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter anonymization fields - type: string - update: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldUpdateProps - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Applies a bulk action to multiple anonymization fields - tags: - - Security AI Assistant API - - Bulk API - /api/security_ai_assistant/anonymization_fields/_find: - get: - description: Finds anonymization fields that match the given query. - operationId: FindAnonymizationFields - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindAnonymizationFieldsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: AnonymizationFields per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds anonymization fields that match the given query. - tags: - - Security AI Assistant API - - AnonymizationFields API - /api/security_ai_assistant/chat/complete: - post: - description: Creates a model response for the given chat conversation. - operationId: ChatComplete - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatCompleteProps' - required: true - responses: - '200': - content: - application/octet-stream; Elastic-Api-Version=2023-10-31: - schema: - format: binary - type: string - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Creates a model response for the given chat conversation. - tags: - - Security AI Assistant API - - Chat Complete API - /api/security_ai_assistant/current_user/conversations: - post: - description: Create a conversation - operationId: CreateConversation - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationCreateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Create a conversation - tags: - - Security AI Assistant API - - Conversation API - /api/security_ai_assistant/current_user/conversations/_find: - get: - description: Finds conversations that match the given query. - operationId: FindConversations - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindConversationsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: Conversations per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds conversations that match the given query. - tags: - - Security AI Assistant API - - Conversations API - '/api/security_ai_assistant/current_user/conversations/{id}': - delete: - description: Deletes a single conversation using the `id` field. - operationId: DeleteConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Deletes a single conversation using the `id` field. - tags: - - Security AI Assistant API - - Conversation API - get: - description: Read a single conversation - operationId: ReadConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Read a single conversation - tags: - - Security AI Assistant API - - Conversations API - put: - description: Update a single conversation - operationId: UpdateConversation - parameters: - - description: The conversation's `id` value. - in: path - name: id - required: true - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationUpdateProps - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Update a conversation - tags: - - Security AI Assistant API - - Conversation API - /api/security_ai_assistant/prompts/_bulk_action: - post: - description: >- - The bulk action is applied to all prompts that match the filter or to - the list of prompts by their IDs. - operationId: PerformPromptsBulkAction - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - create: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptCreateProps - type: array - delete: - type: object - properties: - ids: - description: Array of prompts IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter promps - type: string - update: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptUpdateProps - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkCrudActionResponse - description: Indicates a successful call. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Applies a bulk action to multiple prompts - tags: - - Security AI Assistant API - - Bulk API - /api/security_ai_assistant/prompts/_find: - get: - description: Finds prompts that match the given query. - operationId: FindPrompts - parameters: - - in: query - name: fields - required: false - schema: - items: - type: string - type: array - - description: Search query - in: query - name: filter - required: false - schema: - type: string - - description: Field to sort by - in: query - name: sort_field - required: false - schema: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_FindPromptsSortField - - description: Sort order - in: query - name: sort_order - required: false - schema: - $ref: '#/components/schemas/Security_AI_Assistant_API_SortOrder' - - description: Page number - in: query - name: page - required: false - schema: - default: 1 - minimum: 1 - type: integer - - description: Prompts per page - in: query - name: per_page - required: false - schema: - default: 20 - minimum: 0 - type: integer - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptResponse - type: array - page: - type: integer - perPage: - type: integer - total: - type: integer - required: - - page - - perPage - - total - - data - description: Successful response - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - description: Generic Error - summary: Finds prompts that match the given query. - tags: - - Security AI Assistant API - - Prompts API - /api/status: - get: - operationId: /api/status#0 - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - - description: Set to "true" to get the response in v7 format. - in: query - name: v7format - required: false - schema: - type: boolean - - description: Set to "true" to get the response in v8 format. - in: query - name: v8format - required: false - schema: - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: Overall status is OK and Kibana should be functioning normally. - '503': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - anyOf: - - $ref: '#/components/schemas/Kibana_HTTP_APIs_core_status_response' - - $ref: >- - #/components/schemas/Kibana_HTTP_APIs_core_status_redactedResponse - description: >- - Kibana's operational status. A minimal response is sent for - unauthorized users. - description: >- - Kibana or some of it's essential services are unavailable. Kibana - may be degraded or unavailable. - summary: Get Kibana's current status - tags: - - system - /api/timeline: - delete: - operationId: DeleteTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - savedObjectIds: - items: - type: string - type: array - searchIds: - description: >- - Saved search ids that should be deleted alongside the - timelines - items: - type: string - type: array - required: - - savedObjectIds - description: The ids of the timelines or timeline templates to delete. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - deleteTimeline: - type: boolean - required: - - deleteTimeline - required: - - data - description: Indicates the timeline was successfully deleted. - summary: Deletes one or more timelines or timeline templates. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - get: - operationId: GetTimeline - parameters: - - description: The ID of the template timeline to retrieve - in: query - name: template_timeline_id - schema: - type: string - - description: The ID of the timeline to retrieve - in: query - name: id - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - nullable: true - required: - - getOneTimeline - required: - - data - description: Indicates that the (template) timeline was found and returned. - summary: >- - Get an existing saved timeline or timeline template. This API is used to - retrieve an existing saved timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - patch: - description: >- - Updates an existing timeline. This API is used to update the title, - description, date range, pinned events, pinned queries, and/or pinned - saved queries of an existing timeline. - operationId: PatchTimeline - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - timelineId: - nullable: true - type: string - version: - nullable: true - type: string - required: - - timelineId - - version - - timeline - description: The timeline updates along with the timeline ID and version. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: >- - Indicates that the draft timeline was successfully created. In the - event the user already has a draft timeline, the existing draft - timeline is cleared and returned. - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates that the user does not have the required access to create - a draft timeline. - summary: Updates an existing timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - post: - operationId: CreateTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - status: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineStatus - nullable: true - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - timelineId: - nullable: true - type: string - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - nullable: true - version: - nullable: true - type: string - required: - - timeline - description: >- - The required timeline fields used to create a new timeline along with - optional fields that will be created if not provided. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - persistTimeline - required: - - data - description: Indicates the timeline was successfully created. - '405': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Indicates that there was an error in the timeline creation. - summary: Creates a new timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_draft: - get: - operationId: GetDraftTimelines - parameters: - - in: query - name: timelineType - required: true - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: Indicates that the draft timeline was successfully retrieved. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - If a draft timeline was not found and we attempted to create one, it - indicates that the user does not have the required permissions to - create a draft timeline. - '409': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - This should never happen, but if a draft timeline was not found and - we attempted to create one, it indicates that there is already a - draft timeline with the given timelineId. - summary: >- - Retrieves the draft timeline for the current user. If the user does not - have a draft timeline, an empty timeline is returned. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - post: - description: > - Retrieves a clean draft timeline. If a draft timeline does not exist, it - is created and returned. - operationId: CleanDraftTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - required: - - timelineType - description: >- - The type of timeline to create. Valid values are `default` and - `template`. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistTimeline: - type: object - properties: - timeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - required: - - timeline - required: - - persistTimeline - required: - - data - description: >- - Indicates that the draft timeline was successfully created. In the - event the user already has a draft timeline, the existing draft - timeline is cleared and returned. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - Indicates that the user does not have the required permissions to - create a draft timeline. - '409': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - message: - type: string - status_code: - type: number - description: >- - Indicates that there is already a draft timeline with the given - timelineId. - summary: Retrieves a draft timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_export: - post: - operationId: ExportTimelines - parameters: - - description: The name of the file to export - in: query - name: file_name - required: true - schema: - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - ids: - items: - type: string - nullable: true - type: array - description: The ids of the timelines to export - required: true - responses: - '200': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - description: NDJSON of the exported timelines - type: string - description: Indicates the timelines were successfully exported - '400': - content: - application/ndjson; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Indicates that the export size limit was exceeded - summary: Exports timelines as an NDJSON file - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_favorite: - patch: - operationId: PersistFavoriteRoute - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timelineId: - nullable: true - type: string - timelineType: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineType - nullable: true - required: - - timelineId - - templateTimelineId - - templateTimelineVersion - - timelineType - description: The required fields used to favorite a (template) timeline. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - persistFavorite: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResponse - required: - - persistFavorite - required: - - data - description: Indicates the favorite status was successfully updated. - '403': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates the user does not have the required permissions to persist - the favorite status. - summary: Persists a given users favorite status of a timeline. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_import: - post: - operationId: ImportTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - file: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_Readable - - type: object - properties: - hapi: - type: object - properties: - filename: - type: string - headers: - type: object - isImmutable: - enum: - - 'true' - - 'false' - type: string - required: - - filename - - headers - required: - - hapi - description: The timelines to import as a readable stream. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult - required: - - data - description: Indicates the import of timelines was successful. - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - id: - type: string - statusCode: - type: number - description: >- - Indicates the import of timelines was unsuccessful because of an - invalid file extension. - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - id: - type: string - statusCode: - type: number - description: >- - Indicates that we were unable to locate the saved object client - necessary to handle the import. - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - body: - type: string - id: - type: string - statusCode: - type: number - description: Indicates the import of timelines was unsuccessful. - summary: Imports timelines. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/_prepackaged: - post: - operationId: InstallPrepackedTimelines - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - prepackagedTimelines: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SavedTimeline - type: array - timelinesToInstall: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines - nullable: true - type: array - timelinesToUpdate: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelines - nullable: true - type: array - required: - - timelinesToInstall - - timelinesToUpdate - - prepackagedTimelines - description: The timelines to install or update. - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ImportTimelineResult - required: - - data - description: Indicates the installation of prepackaged timelines was successful. - '500': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: >- - Indicates the installation of prepackaged timelines was - unsuccessful. - summary: Installs prepackaged timelines. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timeline/resolve: - get: - operationId: ResolveTimeline - parameters: - - description: The ID of the template timeline to resolve - in: query - name: template_timeline_id - schema: - type: string - - description: The ID of the timeline to resolve - in: query - name: id - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - getOneTimeline: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - nullable: true - required: - - getOneTimeline - required: - - data - description: The (template) timeline has been found - '400': - description: The request is missing parameters - '404': - description: The (template) timeline was not found - summary: Get an existing saved timeline or timeline template. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - /api/timelines: - get: - operationId: GetTimelines - parameters: - - description: >- - If true, only timelines that are marked as favorites by the user are - returned. - in: query - name: only_user_favorite - schema: - enum: - - 'true' - - 'false' - nullable: true - type: string - - in: query - name: timeline_type - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - nullable: true - - in: query - name: sort_field - schema: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SortFieldTimeline - - in: query - name: sort_order - schema: - enum: - - asc - - desc - type: string - - in: query - name: page_size - schema: - nullable: true - type: string - - in: query - name: page_index - schema: - nullable: true - type: string - - in: query - name: search - schema: - nullable: true - type: string - - in: query - name: status - schema: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineStatus' - nullable: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - type: object - properties: - data: - type: object - properties: - customTemplateTimelineCount: - type: number - defaultTimelineCount: - type: number - elasticTemplateTimelineCount: - type: number - favoriteCount: - type: number - templateTimelineCount: - type: number - timelines: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_TimelineResponse - type: array - totalCount: - type: number - required: - - timelines - - totalCount - - defaultTimelineCount - - templateTimelineCount - - favoriteCount - - elasticTemplateTimelineCount - - customTemplateTimelineCount - required: - - data - description: Indicates that the (template) timelines were found and returned. - '400': - content: - 'application:json; Elastic-Api-Version=2023-10-31': - schema: - type: object - properties: - body: - type: string - statusCode: - type: number - description: Bad request. The user supplied invalid data. - summary: >- - This API is used to retrieve a list of existing saved timelines or - timeline templates. - tags: - - Security Solution Timeline API - - 'access:securitySolution' - '/s/{spaceId}/api/observability/slos': - get: - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: findSlosOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - description: A valid kql query to filter the SLO with - example: 'slo.name:latency* and slo.tags : "prod"' - in: query - name: kqlQuery - schema: - type: string - - description: 'The page to use for pagination, must be greater or equal than 1' - example: 1 - in: query - name: page - schema: - default: 1 - type: integer - - description: Number of SLOs returned by page - example: 25 - in: query - name: perPage - schema: - default: 25 - maximum: 5000 - type: integer - - description: Sort by field - example: status - in: query - name: sortBy - schema: - default: status - enum: - - sli_value - - status - - error_budget_consumed - - error_budget_remaining - type: string - - description: Sort order - example: asc - in: query - name: sortDirection - schema: - default: asc - enum: - - asc - - desc - type: string - - description: >- - Hide stale SLOs from the list as defined by stale SLO threshold in - SLO settings - in: query - name: hideStale - schema: - type: boolean - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_find_slo_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Get a paginated list of SLOs - tags: - - slo - post: - description: > - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: createSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_create_slo_request' - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_create_slo_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '409': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_409_response' - description: Conflict - The SLO id already exists - summary: Create an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/_delete_instances': - post: - description: > - The deletion occurs for the specified list of `sloId` and `instanceId`. - You must have `all` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: deleteSloInstancesOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_delete_slo_instances_request' - required: true - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - summary: Batch delete rollup and summary data - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}': - delete: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: deleteSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Delete an SLO - tags: - - slo - get: - description: > - You must have the `read` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: getSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - - description: the specific instanceId used by the summary calculation - example: host-abcde - in: query - name: instanceId - schema: - type: string - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_with_summary_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Get an SLO - tags: - - slo - put: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: updateSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_update_slo_request' - required: true - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Update an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/_reset': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: resetSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_slo_definition_response' - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Reset an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/disable': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: disableSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '200': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Disable an SLO - tags: - - slo - '/s/{spaceId}/api/observability/slos/{sloId}/enable': - post: - description: > - You must have the `write` privileges for the **SLOs** feature in the - **Observability** section of the Kibana feature privileges. - operationId: enableSloOp - parameters: - - $ref: '#/components/parameters/SLOs_kbn_xsrf' - - $ref: '#/components/parameters/SLOs_space_id' - - $ref: '#/components/parameters/SLOs_slo_id' - responses: - '204': - description: Successful request - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_400_response' - description: Bad request - '401': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_401_response' - description: Unauthorized response - '403': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_403_response' - description: Unauthorized response - '404': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/SLOs_404_response' - description: Not found response - summary: Enable an SLO - tags: - - slo -components: - examples: - Connectors_create_email_connector_request: - summary: Create an email connector. - value: - config: - from: tester@example.com - hasAuth: true - host: 'https://example.com' - port: 1025 - secure: false - service: other - connector_type_id: .email - name: email-connector-1 - secrets: - password: password - user: username - Connectors_create_email_connector_response: - summary: A new email connector. - value: - config: - clientId: null - from: tester@example.com - hasAuth: true - host: 'https://example.com' - oauthTokenUrl: null - port: 1025 - secure: false - service: other - tenantId: null - connector_type_id: .email - id: 90a82c60-478f-11ee-a343-f98a117c727f - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: email-connector-1 - Connectors_create_index_connector_request: - summary: Create an index connector. - value: - config: - index: test-index - connector_type_id: .index - name: my-connector - Connectors_create_index_connector_response: - summary: A new index connector. - value: - config: - executionTimeField: null - index: test-index - refresh: false - connector_type_id: .index - id: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-connector - Connectors_create_webhook_connector_request: - summary: Create a webhook connector with SSL authentication. - value: - config: - authType: webhook-authentication-ssl - certType: ssl-crt-key - method: post - url: 'https://example.com' - connector_type_id: .webhook - name: my-webhook-connector - secrets: - crt: QmFnIEF0dH... - key: LS0tLS1CRUdJ... - password: my-passphrase - Connectors_create_webhook_connector_response: - summary: A new webhook connector. - value: - config: - authType: webhook-authentication-ssl - certType: ssl-crt-key - hasAuth: true - headers: null - method: post - url: 'https://example.com' - verificationMode: full - connector_type_id: .webhook - id: 900eb010-3b9d-11ee-a642-8ffbb94e38bd - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-webhook-connector - Connectors_create_xmatters_connector_request: - summary: Create an xMatters connector with URL authentication. - value: - config: - usesBasic: false - connector_type_id: .xmatters - name: my-xmatters-connector - secrets: - secretsUrl: 'https://example.com?apiKey=xxxxx' - Connectors_create_xmatters_connector_response: - summary: A new xMatters connector. - value: - config: - configUrl: null - usesBasic: false - connector_type_id: .xmatters - id: 4d2d8da0-4d1f-11ee-9367-577408be4681 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-xmatters-connector - Connectors_get_connector_response: - summary: Get connector details. - value: - config: {} - connector_type_id: .server-log - id: df770e30-8b8b-11ed-a780-3b746c987a81 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my_server_log_connector - Connectors_get_connector_types_generativeai_response: - summary: A list of connector types for the `generativeAI` feature. - value: - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .gen-ai - is_system_action_type: false - minimum_license_required: enterprise - name: OpenAI - supported_feature_ids: - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .bedrock - is_system_action_type: false - minimum_license_required: enterprise - name: AWS Bedrock - supported_feature_ids: - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - enabled: true - enabled_in_config: true - enabled_in_license: true - id: .gemini - is_system_action_type: false - minimum_license_required: enterprise - name: Google Gemini - supported_feature_ids: - - generativeAIForSecurity - Connectors_get_connectors_response: - summary: A list of connectors - value: - - connector_type_id: .email - id: preconfigured-email-connector - is_deprecated: false - is_preconfigured: true - is_system_action: false - name: my-preconfigured-email-notification - referenced_by_count: 0 - - config: - executionTimeField: null - index: test-index - refresh: false - connector_type_id: .index - id: e07d0c80-8b8b-11ed-a780-3b746c987a81 - is_deprecated: false - is_missing_secrets: false - is_preconfigured: false - is_system_action: false - name: my-index-connector - referenced_by_count: 2 - Connectors_run_cases_webhook_connector_request: - summary: Run a Webhook - Case Management connector to create a case. - value: - params: - subAction: pushToService - subActionParams: - comments: - - comment: A comment about the incident. - commentId: 1 - incident: - description: Description of the incident. - id: caseID - severity: low - status: open - tags: - - tag1 - - tag2 - title: Case title - Connectors_run_cases_webhook_connector_response: - summary: >- - Response from a pushToService action for a Webhook - Case Management - connector. - value: - connector_id: 1824b5b8-c005-4dcc-adac-57f92db46459 - data: - comments: - - commentId: 1 - pushedDate: '2023-12-05T19:43:36.360Z' - id: 100665 - pushedDate: '2023-12-05T19:43:36.360Z' - title: TEST-29034 - url: 'https://example.com/browse/TEST-29034' - status: ok - Connectors_run_email_connector_request: - summary: Send an email message from an email connector. - value: - params: - bcc: - - user1@example.com - cc: - - user2@example.com - - user3@example.com - message: Test email message. - subject: Test message subject - to: - - user4@example.com - Connectors_run_email_connector_response: - summary: Response for sending a message from an email connector. - value: - connector_id: 7fc7b9a0-ecc9-11ec-8736-e7d63118c907 - data: - accepted: - - user1@example.com - - user2@example.com - - user3@example.com - - user4@example.com - envelope: - from: tester@example.com - to: - - user1@example.com - - user2@example.com - - user3@example.com - - user4@example.com - envelopeTime: 8 - messageId: <08a92d29-642a-0706-750c-de5996bd5cf3@example.com> - messageSize: 729 - messageTime: 3 - rejected: [] - response: 250 Message queued as QzEXKcGJ - status: ok - Connectors_run_index_connector_request: - summary: Run an index connector. - value: - params: - documents: - - id: my_doc_id - message: 'hello, world' - name: my_doc_name - Connectors_run_index_connector_response: - summary: Response from running an index connector. - value: - connector_id: fd38c600-96a5-11ed-bb79-353b74189cba - data: - errors: false - items: - - create: - _id: 4JtvwYUBrcyxt2NnfW3y - _index: my-index - _primary_term: 1 - _seq_no: 0 - _shards: - failed: 0 - successful: 1 - total: 2 - _version: 1 - result: created - status: 201 - took: 135 - status: ok - Connectors_run_jira_connector_request: - summary: Run a Jira connector to retrieve the list of issue types. - value: - params: - subAction: issueTypes - Connectors_run_jira_connector_response: - summary: Response from retrieving the list of issue types for a Jira connector. - value: - connector_id: b3aad810-edbe-11ec-82d1-11348ecbf4a6 - data: - - id: 10024 - name: Improvement - - id: 10006 - name: Task - - id: 10007 - name: Sub-task - - id: 10025 - name: New Feature - - id: 10023 - name: Bug - - id: 10000 - name: Epic - status: ok - Connectors_run_pagerduty_connector_request: - summary: Run a PagerDuty connector to trigger an alert. - value: - params: - customDetails: - my_data_1: test data - eventAction: trigger - links: - - href: 'http://example.com/pagerduty' - text: An example link - summary: A brief event summary - Connectors_run_pagerduty_connector_response: - summary: Response from running a PagerDuty connector. - value: - connector_id: 45de9f70-954f-4608-b12a-db7cf808e49d - data: - dedup_key: 5115e138b26b484a81eaea779faa6016 - message: Event processed - status: success - status: ok - Connectors_run_server_log_connector_request: - summary: Run a server log connector. - value: - params: - level: warn - message: Test warning message. - Connectors_run_server_log_connector_response: - summary: Response from running a server log connector. - value: - connector_id: 7fc7b9a0-ecc9-11ec-8736-e7d63118c907 - status: ok - Connectors_run_servicenow_itom_connector_request: - summary: Run a ServiceNow ITOM connector to retrieve the list of choices. - value: - params: - subAction: getChoices - subActionParams: - fields: - - severity - - urgency - Connectors_run_servicenow_itom_connector_response: - summary: >- - Response from retrieving the list of choices for a ServiceNow ITOM - connector. - value: - connector_id: 9d9be270-2fd2-11ed-b0e0-87533c532698 - data: - - dependent_value: '' - element: severity - label: Critical - value: 1 - - dependent_value: '' - element: severity - label: Major - value: 2 - - dependent_value: '' - element: severity - label: Minor - value: 3 - - dependent_value: '' - element: severity - label: Warning - value: 4 - - dependent_value: '' - element: severity - label: OK - value: 5 - - dependent_value: '' - element: severity - label: Clear - value: 0 - - dependent_value: '' - element: urgency - label: 1 - High - value: 1 - - dependent_value: '' - element: urgency - label: 2 - Medium - value: 2 - - dependent_value: '' - element: urgency - label: 3 - Low - value: 3 - status: ok - Connectors_run_slack_api_connector_request: - summary: >- - Run a Slack connector that uses the web API method to post a message on - a channel. - value: - params: - subAction: postMessage - subActionParams: - channelIds: - - C123ABC456 - text: A test message. - Connectors_run_slack_api_connector_response: - summary: Response from posting a message with a Slack connector. - value: - connector_id: .slack_api - data: - channel: C123ABC456 - message: - app_id: A01BC2D34EF - blocks: - - block_id: /NXe - elements: - - elements: - - text: A test message. - type: text - type: rich_text_section - type: rich_text - bot_id: B12BCDEFGHI - bot_profile: - app_id: A01BC2D34EF - deleted: false - icons: - image_36: 'https://a.slack-edge.com/80588/img/plugins/app/bot_36.png' - id: B12BCDEFGHI - name: test - team_id: T01ABCDE2F - updated: 1672169705 - team: T01ABCDE2F - text: A test message - ts: '1234567890.123456' - type: message - user: U12A345BC6D - ok: true - ts: '1234567890.123456' - status: ok - Connectors_run_swimlane_connector_request: - summary: Run a Swimlane connector to create an incident. - value: - params: - subAction: pushToService - subActionParams: - comments: - - comment: A comment about the incident. - commentId: 1 - incident: - caseId: '1000' - caseName: Case name - description: Description of the incident. - Connectors_run_swimlane_connector_response: - summary: Response from creating a Swimlane incident. - value: - connector_id: a4746470-2f94-11ed-b0e0-87533c532698 - data: - comments: - - commentId: 1 - pushedDate: '2022-09-08T16:52:27.865Z' - id: aKPmBHWzmdRQtx6Mx - pushedDate: '2022-09-08T16:52:27.866Z' - title: TEST-457 - url: >- - https://elastic.swimlane.url.us/record/aNcL2xniGHGpa2AHb/aKPmBHWzmdRQtx6Mx - status: ok - Connectors_update_index_connector_request: - summary: Update an index connector. - value: - config: - index: updated-index - name: updated-connector - Data_views_create_data_view_request: - summary: Create a data view with runtime fields. - value: - data_view: - name: My Logstash data view - runtimeFieldMap: - runtime_shape_name: - script: - source: 'emit(doc[''shape_name''].value)' - type: keyword - title: logstash-* - Data_views_create_runtime_field_request: - summary: Create a runtime field. - value: - name: runtimeFoo - runtimeField: - script: - source: 'emit(doc["foo"].value)' - type: long - Data_views_get_data_view_response: - summary: >- - The get data view API returns a JSON object that contains information - about the data view. - value: - data_view: - allowNoIndex: false - fieldAttrs: - products.manufacturer: - count: 1 - products.price: - count: 1 - products.product_name: - count: 1 - total_quantity: - count: 1 - fieldFormats: - products.base_price: - id: number - params: - pattern: '$0,0.00' - products.base_unit_price: - id: number - params: - pattern: '$0,0.00' - products.min_price: - id: number - params: - pattern: '$0,0.00' - products.price: - id: number - params: - pattern: '$0,0.00' - products.taxful_price: - id: number - params: - pattern: '$0,0.00' - products.taxless_price: - id: number - params: - pattern: '$0,0.00' - taxful_total_price: - id: number - params: - pattern: '$0,0.[00]' - taxless_total_price: - id: number - params: - pattern: '$0,0.00' - fields: - _id: - aggregatable: false - count: 0 - esTypes: - - _id - format: - id: string - isMapped: true - name: _id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _index: - aggregatable: true - count: 0 - esTypes: - - _index - format: - id: string - isMapped: true - name: _index - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _score: - aggregatable: false - count: 0 - format: - id: number - isMapped: true - name: _score - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: number - _source: - aggregatable: false - count: 0 - esTypes: - - _source - format: - id: _source - isMapped: true - name: _source - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: _source - category: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: category - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - category.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: category.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: category - type: string - currency: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: currency - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_birth_date: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: customer_birth_date - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - customer_first_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_first_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_first_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_first_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_first_name - type: string - customer_full_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_full_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_full_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_full_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_full_name - type: string - customer_gender: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_gender - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_id: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_last_name: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: customer_last_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - customer_last_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_last_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: customer_last_name - type: string - customer_phone: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: customer_phone - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - day_of_week: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: day_of_week - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - day_of_week_i: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: day_of_week_i - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - email: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: email - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - event.dataset: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: event.dataset - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.city_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.city_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.continent_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.continent_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.country_iso_code: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.country_iso_code - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - geoip.location: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: geoip.location - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - geoip.region_name: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: geoip.region_name - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - manufacturer: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: manufacturer - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - manufacturer.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: manufacturer.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: manufacturer - type: string - order_date: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: order_date - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - order_id: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: order_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - products._id: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: products._id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products._id.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products._id.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products._id - type: string - products.base_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.base_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.base_unit_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.base_unit_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.category: - aggregatable: false - count: 0 - esTypes: - - text - format: - id: string - isMapped: true - name: products.category - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.category.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.category.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.category - type: string - products.created_on: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: products.created_on - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - products.discount_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.discount_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.discount_percentage: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.discount_percentage - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.manufacturer: - aggregatable: false - count: 1 - esTypes: - - text - format: - id: string - isMapped: true - name: products.manufacturer - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.manufacturer.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.manufacturer.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.manufacturer - type: string - products.min_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.min_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.price: - aggregatable: true - count: 1 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.product_id: - aggregatable: true - count: 0 - esTypes: - - long - format: - id: number - isMapped: true - name: products.product_id - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.product_name: - aggregatable: false - count: 1 - esTypes: - - text - format: - id: string - isMapped: true - name: products.product_name - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.product_name.keyword: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.product_name.keyword - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - subType: - multi: - parent: products.product_name - type: string - products.quantity: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: products.quantity - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.sku: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: products.sku - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - products.tax_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.tax_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.taxful_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.taxful_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.taxless_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: products.taxless_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - products.unit_discount_amount: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - isMapped: true - name: products.unit_discount_amount - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - sku: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: sku - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - taxful_total_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.[00]' - isMapped: true - name: taxful_total_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - taxless_total_price: - aggregatable: true - count: 0 - esTypes: - - half_float - format: - id: number - params: - pattern: '$0,0.00' - isMapped: true - name: taxless_total_price - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - total_quantity: - aggregatable: true - count: 1 - esTypes: - - integer - format: - id: number - isMapped: true - name: total_quantity - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - total_unique_products: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: total_unique_products - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - type: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: type - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - user: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: user - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - name: Kibana Sample Data eCommerce - namespaces: - - default - runtimeFieldMap: {} - sourceFilters: [] - timeFieldName: order_date - title: kibana_sample_data_ecommerce - typeMeta: {} - version: WzUsMV0= - Data_views_get_data_views_response: - summary: The get all data views API returns a list of data views. - value: - data_view: - - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - name: Kibana Sample Data eCommerce - namespaces: - - default - title: kibana_sample_data_ecommerce - typeMeta: {} - - id: d3d7af60-4c81-11e8-b3d7-01146121b73d - name: Kibana Sample Data Flights - namespaces: - - default - title: kibana_sample_data_flights - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: Kibana Sample Data Logs - namespaces: - - default - title: kibana_sample_data_logs - Data_views_get_default_data_view_response: - summary: The get default data view API returns the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - Data_views_get_runtime_field_response: - summary: >- - The get runtime field API returns a JSON object that contains - information about the runtime field (`hour_of_day`) and the data view - (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). - value: - data_view: - allowNoIndex: false - fieldAttrs: {} - fieldFormats: - AvgTicketPrice: - id: number - params: - pattern: '$0,0.[00]' - hour_of_day: - id: number - params: - pattern: '00' - fields: - _id: - aggregatable: false - count: 0 - esTypes: - - _id - format: - id: string - isMapped: true - name: _id - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _index: - aggregatable: true - count: 0 - esTypes: - - _index - format: - id: string - isMapped: true - name: _index - readFromDocValues: false - scripted: false - searchable: true - shortDotsEnable: false - type: string - _score: - aggregatable: false - count: 0 - format: - id: number - isMapped: true - name: _score - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: number - _source: - aggregatable: false - count: 0 - esTypes: - - _source - format: - id: _source - isMapped: true - name: _source - readFromDocValues: false - scripted: false - searchable: false - shortDotsEnable: false - type: _source - AvgTicketPrice: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - params: - pattern: '$0,0.[00]' - isMapped: true - name: AvgTicketPrice - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - Cancelled: - aggregatable: true - count: 0 - esTypes: - - boolean - format: - id: boolean - isMapped: true - name: Cancelled - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: boolean - Carrier: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Carrier - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - dayOfWeek: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: dayOfWeek - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - Dest: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Dest - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestAirportID: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestAirportID - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestCityName: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestCityName - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestCountry: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestCountry - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestLocation: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: DestLocation - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - DestRegion: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestRegion - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DestWeather: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: DestWeather - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - DistanceKilometers: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: DistanceKilometers - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - DistanceMiles: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: DistanceMiles - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - FlightDelay: - aggregatable: true - count: 0 - esTypes: - - boolean - format: - id: boolean - isMapped: true - name: FlightDelay - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: boolean - FlightDelayMin: - aggregatable: true - count: 0 - esTypes: - - integer - format: - id: number - isMapped: true - name: FlightDelayMin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - FlightDelayType: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightDelayType - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightNum: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightNum - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightTimeHour: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: FlightTimeHour - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - FlightTimeMin: - aggregatable: true - count: 0 - esTypes: - - float - format: - id: number - isMapped: true - name: FlightTimeMin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: number - hour_of_day: - aggregatable: true - count: 0 - esTypes: - - long - format: - id: number - params: - pattern: '00' - name: hour_of_day - readFromDocValues: false - runtimeField: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - scripted: false - searchable: true - shortDotsEnable: false - type: number - Origin: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: Origin - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginAirportID: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginAirportID - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginCityName: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginCityName - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginCountry: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginCountry - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginLocation: - aggregatable: true - count: 0 - esTypes: - - geo_point - format: - id: geo_point - params: - transform: wkt - isMapped: true - name: OriginLocation - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: geo_point - OriginRegion: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginRegion - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - OriginWeather: - aggregatable: true - count: 0 - esTypes: - - keyword - format: - id: string - isMapped: true - name: OriginWeather - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: string - timestamp: - aggregatable: true - count: 0 - esTypes: - - date - format: - id: date - isMapped: true - name: timestamp - readFromDocValues: true - scripted: false - searchable: true - shortDotsEnable: false - type: date - id: d3d7af60-4c81-11e8-b3d7-01146121b73d - name: Kibana Sample Data Flights - runtimeFieldMap: - hour_of_day: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - sourceFilters: [] - timeFieldName: timestamp - title: kibana_sample_data_flights - version: WzM2LDJd - fields: - - aggregatable: true - count: 0 - esTypes: - - long - name: hour_of_day - readFromDocValues: false - runtimeField: - script: - source: 'emit(doc[''timestamp''].value.getHour());' - type: long - scripted: false - searchable: true - shortDotsEnable: false - type: number - Data_views_preview_swap_data_view_request: - summary: Preview swapping references from data view ID "abcd-efg" to "xyz-123". - value: - fromId: abcd-efg - toId: xyz-123 - Data_views_set_default_data_view_request: - summary: Set the default data view identifier. - value: - data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f - force: true - Data_views_swap_data_view_request: - summary: >- - Swap references from data view ID "abcd-efg" to "xyz-123" and remove the - data view that is no longer referenced. - value: - delete: true - fromId: abcd-efg - toId: xyz-123 - Data_views_update_data_view_request: - summary: Update some properties for a data view. - value: - data_view: - allowNoIndex: false - name: Kibana Sample Data eCommerce - timeFieldName: order_date - title: kibana_sample_data_ecommerce - refresh_fields: true - Data_views_update_field_metadata_request: - summary: Update metadata for multiple fields. - value: - fields: - field1: - count: 123 - customLabel: Field 1 label - field2: - customDescription: Field 2 description - customLabel: Field 2 label - Data_views_update_runtime_field_request: - summary: Update an existing runtime field on a data view. - value: - runtimeField: - script: - source: 'emit(doc["bar"].value)' - Machine_learning_APIs_mlSyncExample: - summary: Two anomaly detection jobs required synchronization in this example. - value: - datafeedsAdded: {} - datafeedsRemoved: {} - savedObjectsCreated: - anomaly-detector: - myjob1: - success: true - myjob2: - success: true - savedObjectsDeleted: {} - Saved_objects_export_objects_request: - summary: Export a specific saved object. - value: - excludeExportDetails: true - includeReferencesDeep: false - objects: - - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 - type: map - Saved_objects_export_objects_response: - summary: >- - The export objects API response contains a JSON record for each exported - object. - value: - attributes: - description: '' - layerListJSON: >- - [{"id":"0hmz5","alpha":1,"sourceDescriptor":{"type":"EMS_TMS","isAutoSelect":true,"lightModeDefault":"road_map_desaturated"},"visible":true,"style":{},"type":"EMS_VECTOR_TILE","minZoom":0,"maxZoom":24},{"id":"edh66","label":"Total - Requests by - Destination","minZoom":0,"maxZoom":24,"alpha":0.5,"sourceDescriptor":{"type":"EMS_FILE","id":"world_countries","tooltipProperties":["name","iso2"]},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"__kbnjoin__count__673ff994-fc75-4c67-909b-69fcb0e1060e","origin":"join"},"color":"Greys","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"STATIC","options":{"size":10}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR","joins":[{"leftField":"iso2","right":{"type":"ES_TERM_SOURCE","id":"673ff994-fc75-4c67-909b-69fcb0e1060e","indexPatternTitle":"kibana_sample_data_logs","term":"geo.dest","indexPatternRefName":"layer_1_join_0_index_pattern","metrics":[{"type":"count","label":"web - logs - count"}],"applyGlobalQuery":true}}]},{"id":"gaxya","label":"Actual - Requests","minZoom":9,"maxZoom":24,"alpha":1,"sourceDescriptor":{"id":"b7486535-171b-4d3b-bb2e-33c1a0a2854c","type":"ES_SEARCH","geoField":"geo.coordinates","limit":2048,"filterByMapBounds":true,"tooltipProperties":["clientip","timestamp","host","request","response","machine.os","agent","bytes"],"indexPatternRefName":"layer_2_source_index_pattern","applyGlobalQuery":true,"scalingType":"LIMIT"},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"STATIC","options":{"color":"#2200ff"}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":2}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"bytes","origin":"source"},"minSize":1,"maxSize":23,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"},{"id":"tfi3f","label":"Total - Requests and - Bytes","minZoom":0,"maxZoom":9,"alpha":1,"sourceDescriptor":{"type":"ES_GEO_GRID","resolution":"COARSE","id":"8aaa65b5-a4e9-448b-9560-c98cb1c5ac5b","geoField":"geo.coordinates","requestType":"point","metrics":[{"type":"count","label":"web - logs - count"},{"type":"sum","field":"bytes"}],"indexPatternRefName":"layer_3_source_index_pattern","applyGlobalQuery":true},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"color":"Blues","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#cccccc"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"sum_of_bytes","origin":"source"},"minSize":7,"maxSize":25,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelText":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelSize":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"minSize":12,"maxSize":24,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"}] - mapStateJSON: >- - {"zoom":3.64,"center":{"lon":-88.92107,"lat":42.16337},"timeFilters":{"from":"now-7d","to":"now"},"refreshConfig":{"isPaused":true,"interval":0},"query":{"language":"kuery","query":""},"settings":{"autoFitToDataBounds":false}} - title: '[Logs] Total Requests and Bytes' - uiStateJSON: '{"isDarkMode":false}' - coreMigrationVersion: 8.8.0 - created_at: '2023-08-23T20:03:32.204Z' - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 - managed: false - references: - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_1_join_0_index_pattern - type: index-pattern - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_2_source_index_pattern - type: index-pattern - - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - name: layer_3_source_index_pattern - type: index-pattern - type: map - typeMigrationVersion: 8.4.0 - updated_at: '2023-08-23T20:03:32.204Z' - version: WzEzLDFd - Saved_objects_import_objects_request: - value: - file: file.ndjson - Saved_objects_import_objects_response: - summary: >- - The import objects API response indicates a successful import and the - objects are created. Since these objects are created as new copies, each - entry in the successResults array includes a destinationId attribute. - value: - success: true - successCount: 1 - successResults: - - destinationId: 82d2760c-468f-49cf-83aa-b9a35b6a8943 - id: 90943e30-9a47-11e8-b64d-95841ca0b247 - managed: false - meta: - icon: indexPatternApp - title: Kibana Sample Data Logs - type: index-pattern - Saved_objects_key_rotation_response: - summary: Encryption key rotation using default parameters. - value: - failed: 0 - successful: 300 - total: 1000 - Saved_objects_resolve_missing_reference_request: - value: - file: file.ndjson - retries: - - id: my-pattern - overwrite: true - type: index-pattern - - destinationId: another-vis - id: my-vis - overwrite: true - type: visualization - - destinationId: yet-another-canvas - id: my-canvas - overwrite: true - type: canvas - - id: my-dashboard - type: dashboard - Saved_objects_resolve_missing_reference_response: - summary: Resolve missing reference errors. - value: - success: true - successCount: 3 - successResults: - - id: my-vis - meta: - icon: visualizeApp - title: Look at my visualization - type: visualization - - id: my-search - meta: - icon: searchApp - title: Look at my search - type: search - - id: my-dashboard - meta: - icon: dashboardApp - title: Look at my dashboard - type: dashboard - parameters: - Connectors_action_id: - description: An identifier for the action. - in: path - name: actionId - required: true - schema: - example: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad - type: string - Connectors_connector_id: - description: An identifier for the connector. - in: path - name: connectorId - required: true - schema: - example: df770e30-8b8b-11ed-a780-3b746c987a81 - type: string - Connectors_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - Data_views_field_name: - description: The name of the runtime field. - in: path - name: fieldName - required: true - schema: - example: hour_of_day - type: string - Data_views_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - Data_views_view_id: - description: An identifier for the data view. - in: path - name: viewId - required: true - schema: - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f - type: string - Machine_learning_APIs_simulateParam: - description: >- - When true, simulates the synchronization by returning only the list of - actions that would be performed. - example: 'true' - in: query - name: simulate - required: false - schema: - type: boolean - Saved_objects_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - Saved_objects_saved_object_id: - description: An identifier for the saved object. - in: path - name: id - required: true - schema: - type: string - Saved_objects_saved_object_type: - description: >- - Valid options include `visualization`, `dashboard`, `search`, - `index-pattern`, `config`. - in: path - name: type - required: true - schema: - type: string - SLOs_kbn_xsrf: - description: Cross-site request forgery protection - in: header - name: kbn-xsrf - required: true - schema: - type: string - SLOs_slo_id: - description: An identifier for the slo. - in: path - name: sloId - required: true - schema: - example: 9c235211-6834-11ea-a78c-6feb38a34414 - type: string - SLOs_space_id: - description: >- - An identifier for the space. If `/s/` and the identifier are omitted - from the path, the default space is used. - in: path - name: spaceId - required: true - schema: - example: default - type: string - responses: - Connectors_200_actions: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - $ref: '#/components/schemas/Connectors_action_response_properties' - description: Indicates a successful call. - Connectors_401: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - properties: - error: - enum: - - Unauthorized - example: Unauthorized - type: string - message: - type: string - statusCode: - enum: - - 401 - example: 401 - type: integer - title: Unauthorized response - type: object - description: Authorization information is missing or invalid. - Connectors_404: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - properties: - error: - enum: - - Not Found - example: Not Found - type: string - message: - example: >- - Saved object [action/baf33fc0-920c-11ed-b36a-874bd1548a00] not - found - type: string - statusCode: - enum: - - 404 - example: 404 - type: integer - title: Not found response - type: object - description: Object is not found. - schemas: - Connectors_action_response_properties: - description: The properties vary depending on the action type. - properties: - actionTypeId: - type: string - config: - type: object - id: - type: string - isDeprecated: - description: Indicates whether the action type is deprecated. - type: boolean - isMissingSecrets: - description: Indicates whether secrets are missing for the action. - type: boolean - isPreconfigured: - description: Indicates whether it is a preconfigured action. - type: boolean - name: - type: string - title: Action response properties - type: object - Connectors_config_properties_bedrock: - description: Defines properties for connectors when type is `.bedrock`. - properties: - apiUrl: - description: The Amazon Bedrock request URL. - type: string - defaultModel: - default: 'anthropic.claude-3-5-sonnet-20240620-v1:0' - description: > - The generative artificial intelligence model for Amazon Bedrock to - use. Current support is for the Anthropic Claude models. - type: string - required: - - apiUrl - title: Connector request properties for an Amazon Bedrock connector - type: object - Connectors_config_properties_cases_webhook: - description: Defines properties for connectors when type is `.cases-webhook`. - type: object - properties: - createCommentJson: - description: > - A JSON payload sent to the create comment URL to create a case - comment. You can use variables to add Kibana Cases data to the - payload. The required variable is `case.comment`. Due to Mustache - template variables (the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated once the Mustache variables have - been placed when the REST method runs. Manually ensure that the JSON - is valid, disregarding the Mustache variables, so the later - validation will pass. - example: '{"body": {{{case.comment}}}}' - type: string - createCommentMethod: - default: put - description: > - The REST API HTTP request method to create a case comment in the - third-party system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - createCommentUrl: - description: > - The REST API URL to create a case comment by ID in the third-party - system. You can use a variable to add the external system ID to the - URL. If you are using the `xpack.actions.allowedHosts setting`, add - the hostname to the allowed hosts. - example: 'https://example.com/issue/{{{external.system.id}}}/comment' - type: string - createIncidentJson: - description: > - A JSON payload sent to the create case URL to create a case. You can - use variables to add case data to the payload. Required variables - are `case.title` and `case.description`. Due to Mustache template - variables (which is the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated after the Mustache variables have - been placed when REST method runs. Manually ensure that the JSON is - valid to avoid future validation errors; disregard Mustache - variables during your review. - example: >- - {"fields": {"summary": {{{case.title}}},"description": - {{{case.description}}},"labels": {{{case.tags}}}}} - type: string - createIncidentMethod: - default: post - description: > - The REST API HTTP request method to create a case in the third-party - system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - createIncidentResponseKey: - description: >- - The JSON key in the create external case response that contains the - case ID. - type: string - createIncidentUrl: - description: > - The REST API URL to create a case in the third-party system. If you - are using the `xpack.actions.allowedHosts` setting, add the hostname - to the allowed hosts. - type: string - getIncidentResponseExternalTitleKey: - description: >- - The JSON key in get external case response that contains the case - title. - type: string - getIncidentUrl: - description: > - The REST API URL to get the case by ID from the third-party system. - If you are using the `xpack.actions.allowedHosts` setting, add the - hostname to the allowed hosts. You can use a variable to add the - external system ID to the URL. Due to Mustache template variables - (the text enclosed in triple braces, for example, - `{{{case.title}}}`), the JSON is not validated when you create the - connector. The JSON is validated after the Mustache variables have - been placed when REST method runs. Manually ensure that the JSON is - valid, disregarding the Mustache variables, so the later validation - will pass. - example: 'https://example.com/issue/{{{external.system.id}}}' - type: string - hasAuth: - default: true - description: >- - If true, a username and password for login type authentication must - be provided. - type: boolean - headers: - description: > - A set of key-value pairs sent as headers with the request URLs for - the create case, update case, get case, and create comment methods. - type: string - updateIncidentJson: - description: > - The JSON payload sent to the update case URL to update the case. You - can use variables to add Kibana Cases data to the payload. Required - variables are `case.title` and `case.description`. Due to Mustache - template variables (which is the text enclosed in triple braces, for - example, `{{{case.title}}}`), the JSON is not validated when you - create the connector. The JSON is validated after the Mustache - variables have been placed when REST method runs. Manually ensure - that the JSON is valid to avoid future validation errors; disregard - Mustache variables during your review. - example: >- - {"fields": {"summary": {{{case.title}}},"description": - {{{case.description}}},"labels": {{{case.tags}}}}} - type: string - updateIncidentMethod: - default: put - description: > - The REST API HTTP request method to update the case in the - third-party system. Valid values are `patch`, `post`, and `put`. - enum: - - patch - - post - - put - type: string - updateIncidentUrl: - description: > - The REST API URL to update the case by ID in the third-party system. - You can use a variable to add the external system ID to the URL. If - you are using the `xpack.actions.allowedHosts` setting, add the - hostname to the allowed hosts. - example: 'https://example.com/issue/{{{external.system.ID}}}' - type: string - viewIncidentUrl: - description: > - The URL to view the case in the external system. You can use - variables to add the external system ID or external system title to - the URL. - example: >- - https://testing-jira.atlassian.net/browse/{{{external.system.title}}} - type: string - required: - - createIncidentJson - - createIncidentResponseKey - - createIncidentUrl - - getIncidentResponseExternalTitleKey - - getIncidentUrl - - updateIncidentJson - - updateIncidentUrl - - viewIncidentUrl - title: Connector request properties for Webhook - Case Management connector - Connectors_config_properties_d3security: - description: Defines properties for connectors when type is `.d3security`. - properties: - url: - description: > - The D3 Security API request URL. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - url - title: Connector request properties for a D3 Security connector - type: object - Connectors_config_properties_email: - description: Defines properties for connectors when type is `.email`. - type: object - properties: - clientId: - description: > - The client identifier, which is a part of OAuth 2.0 client - credentials authentication, in GUID format. If `service` is - `exchange_server`, this property is required. - nullable: true - type: string - from: - description: > - The from address for all emails sent by the connector. It must be - specified in `user@host-name` format. - type: string - hasAuth: - default: true - description: > - Specifies whether a user and password are required inside the - secrets configuration. - type: boolean - host: - description: > - The host name of the service provider. If the `service` is - `elastic_cloud` (for Elastic Cloud notifications) or one of - Nodemailer's well-known email service providers, this property is - ignored. If `service` is `other`, this property must be defined. - type: string - oauthTokenUrl: - nullable: true - type: string - port: - description: > - The port to connect to on the service provider. If the `service` is - `elastic_cloud` (for Elastic Cloud notifications) or one of - Nodemailer's well-known email service providers, this property is - ignored. If `service` is `other`, this property must be defined. - type: integer - secure: - description: > - Specifies whether the connection to the service provider will use - TLS. If the `service` is `elastic_cloud` (for Elastic Cloud - notifications) or one of Nodemailer's well-known email service - providers, this property is ignored. - type: boolean - service: - description: | - The name of the email service. - enum: - - elastic_cloud - - exchange_server - - gmail - - other - - outlook365 - - ses - type: string - tenantId: - description: > - The tenant identifier, which is part of OAuth 2.0 client credentials - authentication, in GUID format. If `service` is `exchange_server`, - this property is required. - nullable: true - type: string - required: - - from - title: Connector request properties for an email connector - Connectors_config_properties_gemini: - description: Defines properties for connectors when type is `.gemini`. - properties: - apiUrl: - description: The Google Gemini request URL. - type: string - defaultModel: - default: gemini-1.5-pro-001 - description: >- - The generative artificial intelligence model for Google Gemini to - use. - type: string - gcpProjectID: - description: The Google ProjectID that has Vertex AI endpoint enabled. - type: string - gcpRegion: - description: The GCP region where the Vertex AI endpoint enabled. - type: string - required: - - apiUrl - - gcpRegion - - gcpProjectID - title: Connector request properties for an Google Gemini connector - type: object - Connectors_config_properties_genai: - description: Defines properties for connectors when type is `.gen-ai`. - discriminator: - mapping: - Azure OpenAI: '#/components/schemas/Connectors_config_properties_genai_azure' - OpenAI: '#/components/schemas/Connectors_config_properties_genai_openai' - propertyName: apiProvider - oneOf: - - $ref: '#/components/schemas/Connectors_config_properties_genai_azure' - - $ref: '#/components/schemas/Connectors_config_properties_genai_openai' - title: Connector request properties for an OpenAI connector - Connectors_config_properties_genai_azure: - description: > - Defines properties for connectors when type is `.gen-ai` and the API - provider is `Azure OpenAI'. - properties: - apiProvider: - description: The OpenAI API provider. - enum: - - Azure OpenAI - type: string - apiUrl: - description: The OpenAI API endpoint. - type: string - required: - - apiProvider - - apiUrl - title: >- - Connector request properties for an OpenAI connector that uses Azure - OpenAI - type: object - Connectors_config_properties_genai_openai: - description: > - Defines properties for connectors when type is `.gen-ai` and the API - provider is `OpenAI'. - properties: - apiProvider: - description: The OpenAI API provider. - enum: - - OpenAI - type: string - apiUrl: - description: The OpenAI API endpoint. - type: string - defaultModel: - description: The default model to use for requests. - type: string - required: - - apiProvider - - apiUrl - title: Connector request properties for an OpenAI connector - type: object - Connectors_config_properties_index: - description: Defines properties for connectors when type is `.index`. - type: object - properties: - executionTimeField: - default: null - description: A field that indicates when the document was indexed. - nullable: true - type: string - index: - description: The Elasticsearch index to be written to. - type: string - refresh: - default: false - description: > - The refresh policy for the write request, which affects when changes - are made visible to search. Refer to the refresh setting for - Elasticsearch document APIs. - type: boolean - required: - - index - title: Connector request properties for an index connector - Connectors_config_properties_jira: - description: Defines properties for connectors when type is `.jira`. - type: object - properties: - apiUrl: - description: The Jira instance URL. - type: string - projectKey: - description: The Jira project key. - type: string - required: - - apiUrl - - projectKey - title: Connector request properties for a Jira connector - Connectors_config_properties_opsgenie: - description: Defines properties for connectors when type is `.opsgenie`. - type: object - properties: - apiUrl: - description: > - The Opsgenie URL. For example, `https://api.opsgenie.com` or - `https://api.eu.opsgenie.com`. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - apiUrl - title: Connector request properties for an Opsgenie connector - Connectors_config_properties_pagerduty: - description: Defines properties for connectors when type is `.pagerduty`. - properties: - apiUrl: - description: The PagerDuty event URL. - example: 'https://events.pagerduty.com/v2/enqueue' - nullable: true - type: string - title: Connector request properties for a PagerDuty connector - type: object - Connectors_config_properties_resilient: - description: Defines properties for connectors when type is `.resilient`. - type: object - properties: - apiUrl: - description: The IBM Resilient instance URL. - type: string - orgId: - description: The IBM Resilient organization ID. - type: string - required: - - apiUrl - - orgId - title: Connector request properties for a IBM Resilient connector - Connectors_config_properties_sentinelone: - description: Defines properties for connectors when type is `.sentinelone`. - type: object - properties: - url: - description: > - The SentinelOne tenant URL. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - url - title: Connector request properties for a SentinelOne connector - Connectors_config_properties_servicenow: - description: Defines properties for connectors when type is `.servicenow`. - type: object - properties: - apiUrl: - description: The ServiceNow instance URL. - type: string - clientId: - description: > - The client ID assigned to your OAuth application. This property is - required when `isOAuth` is `true`. - type: string - isOAuth: - default: false - description: > - The type of authentication to use. The default value is false, which - means basic authentication is used instead of open authorization - (OAuth). - type: boolean - jwtKeyId: - description: > - The key identifier assigned to the JWT verifier map of your OAuth - application. This property is required when `isOAuth` is `true`. - type: string - userIdentifierValue: - description: > - The identifier to use for OAuth authentication. This identifier - should be the user field you selected when you created an OAuth JWT - API endpoint for external clients in your ServiceNow instance. For - example, if the selected user field is `Email`, the user identifier - should be the user's email address. This property is required when - `isOAuth` is `true`. - type: string - usesTableApi: - default: true - description: > - Determines whether the connector uses the Table API or the Import - Set API. This property is supported only for ServiceNow ITSM and - ServiceNow SecOps connectors. NOTE: If this property is set to - `false`, the Elastic application should be installed in ServiceNow. - type: boolean - required: - - apiUrl - title: Connector request properties for a ServiceNow ITSM connector - Connectors_config_properties_servicenow_itom: - description: Defines properties for connectors when type is `.servicenow`. - type: object - properties: - apiUrl: - description: The ServiceNow instance URL. - type: string - clientId: - description: > - The client ID assigned to your OAuth application. This property is - required when `isOAuth` is `true`. - type: string - isOAuth: - default: false - description: > - The type of authentication to use. The default value is false, which - means basic authentication is used instead of open authorization - (OAuth). - type: boolean - jwtKeyId: - description: > - The key identifier assigned to the JWT verifier map of your OAuth - application. This property is required when `isOAuth` is `true`. - type: string - userIdentifierValue: - description: > - The identifier to use for OAuth authentication. This identifier - should be the user field you selected when you created an OAuth JWT - API endpoint for external clients in your ServiceNow instance. For - example, if the selected user field is `Email`, the user identifier - should be the user's email address. This property is required when - `isOAuth` is `true`. - type: string - required: - - apiUrl - title: Connector request properties for a ServiceNow ITSM connector - Connectors_config_properties_slack_api: - description: Defines properties for connectors when type is `.slack_api`. - properties: - allowedChannels: - description: A list of valid Slack channels. - items: - maxItems: 25 - type: object - properties: - id: - description: The Slack channel ID. - example: C123ABC456 - minLength: 1 - type: string - name: - description: The Slack channel name. - minLength: 1 - type: string - required: - - id - - name - type: array - title: Connector request properties for a Slack connector - type: object - Connectors_config_properties_swimlane: - description: Defines properties for connectors when type is `.swimlane`. - type: object - properties: - apiUrl: - description: The Swimlane instance URL. - type: string - appId: - description: The Swimlane application ID. - type: string - connectorType: - description: >- - The type of connector. Valid values are `all`, `alerts`, and - `cases`. - enum: - - all - - alerts - - cases - type: string - mappings: - description: The field mapping. - properties: - alertIdConfig: - description: Mapping for the alert ID. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Alert identifier mapping - type: object - caseIdConfig: - description: Mapping for the case ID. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case identifier mapping - type: object - caseNameConfig: - description: Mapping for the case name. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case name mapping - type: object - commentsConfig: - description: Mapping for the case comments. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case comment mapping - type: object - descriptionConfig: - description: Mapping for the case description. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Case description mapping - type: object - ruleNameConfig: - description: Mapping for the name of the alert's rule. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Rule name mapping - type: object - severityConfig: - description: Mapping for the severity. - properties: - fieldType: - description: The type of field in Swimlane. - type: string - id: - description: The identifier for the field in Swimlane. - type: string - key: - description: The key for the field in Swimlane. - type: string - name: - description: The name of the field in Swimlane. - type: string - required: - - fieldType - - id - - key - - name - title: Severity mapping - type: object - title: Connector mappings properties for a Swimlane connector - type: object - required: - - apiUrl - - appId - - connectorType - title: Connector request properties for a Swimlane connector - Connectors_config_properties_tines: - description: Defines properties for connectors when type is `.tines`. - properties: - url: - description: > - The Tines tenant URL. If you are using the - `xpack.actions.allowedHosts` setting, make sure this hostname is - added to the allowed hosts. - type: string - required: - - url - title: Connector request properties for a Tines connector - type: object - Connectors_config_properties_torq: - description: Defines properties for connectors when type is `.torq`. - properties: - webhookIntegrationUrl: - description: The endpoint URL of the Elastic Security integration in Torq. - type: string - required: - - webhookIntegrationUrl - title: Connector request properties for a Torq connector - type: object - Connectors_config_properties_webhook: - description: Defines properties for connectors when type is `.webhook`. - properties: - authType: - description: | - The type of authentication to use: basic, SSL, or none. - enum: - - webhook-authentication-basic - - webhook-authentication-ssl - nullable: true - type: string - ca: - description: > - A base64 encoded version of the certificate authority file that the - connector can trust to sign and validate certificates. This option - is available for all authentication types. - type: string - certType: - description: > - If the `authType` is `webhook-authentication-ssl`, specifies whether - the certificate authentication data is in a CRT and key file format - or a PFX file format. - enum: - - ssl-crt-key - - ssl-pfx - type: string - hasAuth: - description: > - If `true`, a user name and password must be provided for login type - authentication. - type: boolean - headers: - description: A set of key-value pairs sent as headers with the request. - nullable: true - type: object - method: - default: post - description: | - The HTTP request method, either `post` or `put`. - enum: - - post - - put - type: string - url: - description: > - The request URL. If you are using the `xpack.actions.allowedHosts` - setting, add the hostname to the allowed hosts. - type: string - verificationMode: - default: full - description: > - Controls the verification of certificates. Use `full` to validate - that the certificate has an issue date within the `not_before` and - `not_after` dates, chains to a trusted certificate authority (CA), - and has a hostname or IP address that matches the names within the - certificate. Use `certificate` to validate the certificate and - verify that it is signed by a trusted authority; this option does - not check the certificate hostname. Use `none` to skip certificate - validation. - enum: - - certificate - - full - - none - type: string - title: Connector request properties for a Webhook connector - type: object - Connectors_config_properties_xmatters: - description: Defines properties for connectors when type is `.xmatters`. - properties: - configUrl: - description: > - The request URL for the Elastic Alerts trigger in xMatters. It is - applicable only when `usesBasic` is `true`. - nullable: true - type: string - usesBasic: - default: true - description: >- - Specifies whether the connector uses HTTP basic authentication - (`true`) or URL authentication (`false`). - type: boolean - title: Connector request properties for an xMatters connector - type: object - Connectors_connector_response_properties: - description: The properties vary depending on the connector type. - discriminator: - mapping: - .bedrock: >- - #/components/schemas/Connectors_connector_response_properties_bedrock - .cases-webhook: >- - #/components/schemas/Connectors_connector_response_properties_cases_webhook - .d3security: >- - #/components/schemas/Connectors_connector_response_properties_d3security - .email: '#/components/schemas/Connectors_connector_response_properties_email' - .gemini: '#/components/schemas/Connectors_connector_response_properties_gemini' - .gen-ai: '#/components/schemas/Connectors_connector_response_properties_genai' - .index: '#/components/schemas/Connectors_connector_response_properties_index' - .jira: '#/components/schemas/Connectors_connector_response_properties_jira' - .opsgenie: >- - #/components/schemas/Connectors_connector_response_properties_opsgenie - .pagerduty: >- - #/components/schemas/Connectors_connector_response_properties_pagerduty - .resilient: >- - #/components/schemas/Connectors_connector_response_properties_resilient - .sentinelone: >- - #/components/schemas/Connectors_connector_response_properties_sentinelone - .server-log: >- - #/components/schemas/Connectors_connector_response_properties_serverlog - .servicenow: >- - #/components/schemas/Connectors_connector_response_properties_servicenow - .servicenow-itom: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_itom - .servicenow-sir: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_sir - .slack: >- - #/components/schemas/Connectors_connector_response_properties_slack_webhook - .slack_api: >- - #/components/schemas/Connectors_connector_response_properties_slack_api - .swimlane: >- - #/components/schemas/Connectors_connector_response_properties_swimlane - .teams: '#/components/schemas/Connectors_connector_response_properties_teams' - .tines: '#/components/schemas/Connectors_connector_response_properties_tines' - .torq: '#/components/schemas/Connectors_connector_response_properties_torq' - .webhook: >- - #/components/schemas/Connectors_connector_response_properties_webhook - .xmatters: >- - #/components/schemas/Connectors_connector_response_properties_xmatters - propertyName: connector_type_id - oneOf: - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_bedrock - - $ref: '#/components/schemas/Connectors_connector_response_properties_gemini' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_cases_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_d3security - - $ref: '#/components/schemas/Connectors_connector_response_properties_email' - - $ref: '#/components/schemas/Connectors_connector_response_properties_genai' - - $ref: '#/components/schemas/Connectors_connector_response_properties_index' - - $ref: '#/components/schemas/Connectors_connector_response_properties_jira' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_opsgenie - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_pagerduty - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_resilient - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_sentinelone - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_serverlog - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_itom - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_servicenow_sir - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_slack_api - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_slack_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_swimlane - - $ref: '#/components/schemas/Connectors_connector_response_properties_teams' - - $ref: '#/components/schemas/Connectors_connector_response_properties_tines' - - $ref: '#/components/schemas/Connectors_connector_response_properties_torq' - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_webhook - - $ref: >- - #/components/schemas/Connectors_connector_response_properties_xmatters - title: Connector response properties - Connectors_connector_response_properties_bedrock: - title: Connector response properties for an Amazon Bedrock connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - connector_type_id: - description: The type of connector. - enum: - - .bedrock - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - required: - - config - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_cases_webhook: - title: Connector request properties for a Webhook - Case Management connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - connector_type_id: - description: The type of connector. - enum: - - .cases-webhook - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_d3security: - title: Connector response properties for a D3 Security connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - connector_type_id: - description: The type of connector. - enum: - - .d3security - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_email: - title: Connector response properties for an email connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - connector_type_id: - description: The type of connector. - enum: - - .email - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_gemini: - title: Connector response properties for a Google Gemini connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - connector_type_id: - description: The type of connector. - enum: - - .gemini - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_genai: - title: Connector response properties for an OpenAI connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_genai' - connector_type_id: - description: The type of connector. - enum: - - .gen-ai - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_index: - title: Connector response properties for an index connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - connector_type_id: - description: The type of connector. - enum: - - .index - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_jira: - title: Connector response properties for a Jira connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - connector_type_id: - description: The type of connector. - enum: - - .jira - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_opsgenie: - title: Connector response properties for an Opsgenie connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - connector_type_id: - description: The type of connector. - enum: - - .opsgenie - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_pagerduty: - title: Connector response properties for a PagerDuty connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - connector_type_id: - description: The type of connector. - enum: - - .pagerduty - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_resilient: - title: Connector response properties for a IBM Resilient connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - connector_type_id: - description: The type of connector. - enum: - - .resilient - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_sentinelone: - title: Connector response properties for a SentinelOne connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - connector_type_id: - description: The type of connector. - enum: - - .sentinelone - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_serverlog: - title: Connector response properties for a server log connector - type: object - properties: - config: - nullable: true - type: object - connector_type_id: - description: The type of connector. - enum: - - .server-log - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow: - title: Connector response properties for a ServiceNow ITSM connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow_itom: - title: Connector response properties for a ServiceNow ITOM connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-itom - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_servicenow_sir: - title: Connector response properties for a ServiceNow SecOps connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-sir - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_slack_api: - title: Connector response properties for a Slack connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - connector_type_id: - description: The type of connector. - enum: - - .slack_api - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_slack_webhook: - title: Connector response properties for a Slack connector - type: object - properties: - connector_type_id: - description: The type of connector. - enum: - - .slack - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_swimlane: - title: Connector response properties for a Swimlane connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - connector_type_id: - description: The type of connector. - enum: - - .swimlane - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_teams: - title: Connector response properties for a Microsoft Teams connector - type: object - properties: - config: - type: object - connector_type_id: - description: The type of connector. - enum: - - .teams - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_tines: - title: Connector response properties for a Tines connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - connector_type_id: - description: The type of connector. - enum: - - .tines - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_torq: - title: Connector response properties for a Torq connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - connector_type_id: - description: The type of connector. - enum: - - .torq - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_webhook: - title: Connector response properties for a Webhook connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - connector_type_id: - description: The type of connector. - enum: - - .webhook - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_response_properties_xmatters: - title: Connector response properties for an xMatters connector - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - connector_type_id: - description: The type of connector. - enum: - - .xmatters - type: string - id: - description: The identifier for the connector. - type: string - is_deprecated: - $ref: '#/components/schemas/Connectors_is_deprecated' - is_missing_secrets: - $ref: '#/components/schemas/Connectors_is_missing_secrets' - is_preconfigured: - $ref: '#/components/schemas/Connectors_is_preconfigured' - is_system_action: - $ref: '#/components/schemas/Connectors_is_system_action' - name: - description: The display name for the connector. - type: string - referenced_by_count: - $ref: '#/components/schemas/Connectors_referenced_by_count' - required: - - connector_type_id - - id - - is_deprecated - - is_preconfigured - - name - Connectors_connector_types: - description: >- - The type of connector. For example, `.email`, `.index`, `.jira`, - `.opsgenie`, or `.server-log`. - enum: - - .bedrock - - .gemini - - .cases-webhook - - .d3security - - .email - - .gen-ai - - .index - - .jira - - .opsgenie - - .pagerduty - - .resilient - - .sentinelone - - .servicenow - - .servicenow-itom - - .servicenow-sir - - .server-log - - .slack - - .slack_api - - .swimlane - - .teams - - .tines - - .torq - - .webhook - - .xmatters - example: .server-log - title: Connector types - type: string - Connectors_create_connector_request: - description: The properties vary depending on the connector type. - discriminator: - mapping: - .bedrock: '#/components/schemas/Connectors_create_connector_request_bedrock' - .cases-webhook: >- - #/components/schemas/Connectors_create_connector_request_cases_webhook - .d3security: '#/components/schemas/Connectors_create_connector_request_d3security' - .email: '#/components/schemas/Connectors_create_connector_request_email' - .gemini: '#/components/schemas/Connectors_create_connector_request_gemini' - .gen-ai: '#/components/schemas/Connectors_create_connector_request_genai' - .index: '#/components/schemas/Connectors_create_connector_request_index' - .jira: '#/components/schemas/Connectors_create_connector_request_jira' - .opsgenie: '#/components/schemas/Connectors_create_connector_request_opsgenie' - .pagerduty: '#/components/schemas/Connectors_create_connector_request_pagerduty' - .resilient: '#/components/schemas/Connectors_create_connector_request_resilient' - .sentinelone: '#/components/schemas/Connectors_create_connector_request_sentinelone' - .server-log: '#/components/schemas/Connectors_create_connector_request_serverlog' - .servicenow: '#/components/schemas/Connectors_create_connector_request_servicenow' - .servicenow-itom: >- - #/components/schemas/Connectors_create_connector_request_servicenow_itom - .servicenow-sir: >- - #/components/schemas/Connectors_create_connector_request_servicenow_sir - .slack: >- - #/components/schemas/Connectors_create_connector_request_slack_webhook - .slack_api: '#/components/schemas/Connectors_create_connector_request_slack_api' - .swimlane: '#/components/schemas/Connectors_create_connector_request_swimlane' - .teams: '#/components/schemas/Connectors_create_connector_request_teams' - .tines: '#/components/schemas/Connectors_create_connector_request_tines' - .torq: '#/components/schemas/Connectors_create_connector_request_torq' - .webhook: '#/components/schemas/Connectors_create_connector_request_webhook' - .xmatters: '#/components/schemas/Connectors_create_connector_request_xmatters' - propertyName: connector_type_id - oneOf: - - $ref: '#/components/schemas/Connectors_create_connector_request_bedrock' - - $ref: '#/components/schemas/Connectors_create_connector_request_gemini' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_cases_webhook - - $ref: '#/components/schemas/Connectors_create_connector_request_d3security' - - $ref: '#/components/schemas/Connectors_create_connector_request_email' - - $ref: '#/components/schemas/Connectors_create_connector_request_genai' - - $ref: '#/components/schemas/Connectors_create_connector_request_index' - - $ref: '#/components/schemas/Connectors_create_connector_request_jira' - - $ref: '#/components/schemas/Connectors_create_connector_request_opsgenie' - - $ref: '#/components/schemas/Connectors_create_connector_request_pagerduty' - - $ref: '#/components/schemas/Connectors_create_connector_request_resilient' - - $ref: '#/components/schemas/Connectors_create_connector_request_sentinelone' - - $ref: '#/components/schemas/Connectors_create_connector_request_serverlog' - - $ref: '#/components/schemas/Connectors_create_connector_request_servicenow' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_servicenow_itom - - $ref: >- - #/components/schemas/Connectors_create_connector_request_servicenow_sir - - $ref: '#/components/schemas/Connectors_create_connector_request_slack_api' - - $ref: >- - #/components/schemas/Connectors_create_connector_request_slack_webhook - - $ref: '#/components/schemas/Connectors_create_connector_request_swimlane' - - $ref: '#/components/schemas/Connectors_create_connector_request_teams' - - $ref: '#/components/schemas/Connectors_create_connector_request_tines' - - $ref: '#/components/schemas/Connectors_create_connector_request_torq' - - $ref: '#/components/schemas/Connectors_create_connector_request_webhook' - - $ref: '#/components/schemas/Connectors_create_connector_request_xmatters' - title: Create connector request body properties - Connectors_create_connector_request_bedrock: - description: >- - The Amazon Bedrock connector uses axios to send a POST request to Amazon - Bedrock. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - connector_type_id: - description: The type of connector. - enum: - - .bedrock - example: .bedrock - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' - required: - - config - - connector_type_id - - name - - secrets - title: Create Amazon Bedrock connector request - type: object - Connectors_create_connector_request_cases_webhook: - description: > - The Webhook - Case Management connector uses axios to send POST, PUT, - and GET requests to a case management RESTful API web service. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - connector_type_id: - description: The type of connector. - enum: - - .cases-webhook - example: .cases-webhook - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' - required: - - config - - connector_type_id - - name - title: Create Webhook - Case Managment connector request - type: object - Connectors_create_connector_request_d3security: - description: > - The connector uses axios to send a POST request to a D3 Security - endpoint. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - connector_type_id: - description: The type of connector. - enum: - - .d3security - example: .d3security - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_d3security' - required: - - config - - connector_type_id - - name - - secrets - title: Create D3 Security connector request - type: object - Connectors_create_connector_request_email: - description: > - The email connector uses the SMTP protocol to send mail messages, using - an integration of Nodemailer. An exception is Microsoft Exchange, which - uses HTTP protocol for sending emails, Send mail. Email message text is - sent as both plain text and html text. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - connector_type_id: - description: The type of connector. - enum: - - .email - example: .email - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_email' - required: - - config - - connector_type_id - - name - - secrets - title: Create email connector request - type: object - Connectors_create_connector_request_gemini: - description: >- - The Google Gemini connector uses axios to send a POST request to Google - Gemini. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - connector_type_id: - description: The type of connector. - enum: - - .gemini - example: .gemini - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_gemini' - required: - - config - - connector_type_id - - name - - secrets - title: Create Google Gemini connector request - type: object - Connectors_create_connector_request_genai: - description: > - The OpenAI connector uses axios to send a POST request to either OpenAI - or Azure OpenAPI. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_genai' - connector_type_id: - description: The type of connector. - enum: - - .gen-ai - example: .gen-ai - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_genai' - required: - - config - - connector_type_id - - name - - secrets - title: Create OpenAI connector request - type: object - Connectors_create_connector_request_index: - description: The index connector indexes a document into Elasticsearch. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - connector_type_id: - description: The type of connector. - enum: - - .index - example: .index - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - required: - - config - - connector_type_id - - name - title: Create index connector request - type: object - Connectors_create_connector_request_jira: - description: The Jira connector uses the REST API v2 to create Jira issues. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - connector_type_id: - description: The type of connector. - enum: - - .jira - example: .jira - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_jira' - required: - - config - - connector_type_id - - name - - secrets - title: Create Jira connector request - type: object - Connectors_create_connector_request_opsgenie: - description: The Opsgenie connector uses the Opsgenie alert API. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - connector_type_id: - description: The type of connector. - enum: - - .opsgenie - example: .opsgenie - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' - required: - - config - - connector_type_id - - name - - secrets - title: Create Opsgenie connector request - type: object - Connectors_create_connector_request_pagerduty: - description: > - The PagerDuty connector uses the v2 Events API to trigger, acknowledge, - and resolve PagerDuty alerts. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - connector_type_id: - description: The type of connector. - enum: - - .pagerduty - example: .pagerduty - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' - required: - - config - - connector_type_id - - name - - secrets - title: Create PagerDuty connector request - type: object - Connectors_create_connector_request_resilient: - description: >- - The IBM Resilient connector uses the RESILIENT REST v2 to create IBM - Resilient incidents. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - connector_type_id: - description: The type of connector. - enum: - - .resilient - example: .resilient - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_resilient' - required: - - config - - connector_type_id - - name - - secrets - title: Create IBM Resilient connector request - type: object - Connectors_create_connector_request_sentinelone: - description: > - The SentinelOne connector communicates with SentinelOne Management - Console via REST API. This functionality is in technical preview and may - be changed or removed in a future release. Elastic will work to fix any - issues, but features in technical preview are not subject to the support - SLA of official GA features. - title: Create SentinelOne connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - connector_type_id: - description: The type of connector. - enum: - - .sentinelone - example: .sentinelone - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' - required: - - config - - connector_type_id - - name - - secrets - x-technical-preview: true - Connectors_create_connector_request_serverlog: - description: This connector writes an entry to the Kibana server log. - properties: - connector_type_id: - description: The type of connector. - enum: - - .server-log - example: .server-log - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - required: - - connector_type_id - - name - title: Create server log connector request - type: object - Connectors_create_connector_request_servicenow: - description: > - The ServiceNow ITSM connector uses the import set API to create - ServiceNow incidents. You can use the connector for rule actions and - cases. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow - example: .servicenow - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow ITSM connector request - type: object - Connectors_create_connector_request_servicenow_itom: - description: > - The ServiceNow ITOM connector uses the event API to create ServiceNow - events. You can use the connector for rule actions. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-itom - example: .servicenow-itom - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow ITOM connector request - type: object - Connectors_create_connector_request_servicenow_sir: - description: > - The ServiceNow SecOps connector uses the import set API to create - ServiceNow security incidents. You can use the connector for rule - actions and cases. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - connector_type_id: - description: The type of connector. - enum: - - .servicenow-sir - example: .servicenow-sir - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - connector_type_id - - name - - secrets - title: Create ServiceNow SecOps connector request - type: object - Connectors_create_connector_request_slack_api: - description: The Slack connector uses an API method to send Slack messages. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - connector_type_id: - description: The type of connector. - enum: - - .slack_api - example: .slack_api - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' - required: - - connector_type_id - - name - - secrets - title: Create Slack connector request - type: object - Connectors_create_connector_request_slack_webhook: - description: The Slack connector uses Slack Incoming Webhooks. - properties: - connector_type_id: - description: The type of connector. - enum: - - .slack - example: .slack - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' - required: - - connector_type_id - - name - - secrets - title: Create Slack connector request - type: object - Connectors_create_connector_request_swimlane: - description: >- - The Swimlane connector uses the Swimlane REST API to create Swimlane - records. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - connector_type_id: - description: The type of connector. - enum: - - .swimlane - example: .swimlane - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' - required: - - config - - connector_type_id - - name - - secrets - title: Create Swimlane connector request - type: object - Connectors_create_connector_request_teams: - description: The Microsoft Teams connector uses Incoming Webhooks. - properties: - connector_type_id: - description: The type of connector. - enum: - - .teams - example: .teams - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_teams' - required: - - connector_type_id - - name - - secrets - title: Create Microsoft Teams connector request - type: object - Connectors_create_connector_request_tines: - description: > - The Tines connector uses Tines Webhook actions to send events via POST - request. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - connector_type_id: - description: The type of connector. - enum: - - .tines - example: .tines - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_tines' - required: - - config - - connector_type_id - - name - - secrets - title: Create Tines connector request - type: object - Connectors_create_connector_request_torq: - description: > - The Torq connector uses a Torq webhook to trigger workflows with Kibana - actions. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - connector_type_id: - description: The type of connector. - enum: - - .torq - example: .torq - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_torq' - required: - - config - - connector_type_id - - name - - secrets - title: Create Torq connector request - type: object - Connectors_create_connector_request_webhook: - description: > - The Webhook connector uses axios to send a POST or PUT request to a web - service. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - connector_type_id: - description: The type of connector. - enum: - - .webhook - example: .webhook - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_webhook' - required: - - config - - connector_type_id - - name - - secrets - title: Create Webhook connector request - type: object - Connectors_create_connector_request_xmatters: - description: > - The xMatters connector uses the xMatters Workflow for Elastic to send - actionable alerts to on-call xMatters resources. - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - connector_type_id: - description: The type of connector. - enum: - - .xmatters - example: .xmatters - type: string - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' - required: - - config - - connector_type_id - - name - - secrets - title: Create xMatters connector request - type: object - Connectors_features: - description: | - The feature that uses the connector. - enum: - - alerting - - cases - - generativeAIForSecurity - - generativeAIForObservability - - generativeAIForSearchPlayground - - siem - - uptime - type: string - Connectors_is_deprecated: - description: Indicates whether the connector type is deprecated. - example: false - type: boolean - Connectors_is_missing_secrets: - description: >- - Indicates whether secrets are missing for the connector. Secrets - configuration properties vary depending on the connector type. - example: false - type: boolean - Connectors_is_preconfigured: - description: > - Indicates whether it is a preconfigured connector. If true, the `config` - and `is_missing_secrets` properties are omitted from the response. - example: false - type: boolean - Connectors_is_system_action: - description: Indicates whether the connector is used for system actions. - example: false - type: boolean - Connectors_referenced_by_count: - description: > - Indicates the number of saved objects that reference the connector. If - `is_preconfigured` is true, this value is not calculated. This property - is returned only by the get all connectors API. - example: 2 - type: integer - Connectors_run_connector_params_acknowledge_resolve_pagerduty: - description: Test an action that acknowledges or resolves a PagerDuty alert. - properties: - dedupKey: - description: The deduplication key for the PagerDuty alert. - maxLength: 255 - type: string - eventAction: - description: The type of event. - enum: - - acknowledge - - resolve - type: string - required: - - dedupKey - - eventAction - title: PagerDuty connector parameters - type: object - Connectors_run_connector_params_documents: - description: Test an action that indexes a document into Elasticsearch. - properties: - documents: - description: The documents in JSON format for index connectors. - items: - additionalProperties: true - type: object - type: array - required: - - documents - title: Index connector parameters - type: object - Connectors_run_connector_params_message_email: - anyOf: - - required: - - bcc - - message - - subject - - required: - - cc - - message - - subject - - required: - - to - - message - - subject - description: > - Test an action that sends an email message. There must be at least one - recipient in `to`, `cc`, or `bcc`. - properties: - bcc: - description: > - A list of "blind carbon copy" email addresses. Addresses can be - specified in `user@host-name` format or in name `` - format - items: - type: string - type: array - cc: - description: > - A list of "carbon copy" email addresses. Addresses can be specified - in `user@host-name` format or in name `` format - items: - type: string - type: array - message: - description: The email message text. Markdown format is supported. - type: string - subject: - description: The subject line of the email. - type: string - to: - description: > - A list of email addresses. Addresses can be specified in - `user@host-name` format or in name `` format. - items: - type: string - type: array - title: Email connector parameters - type: object - Connectors_run_connector_params_message_serverlog: - description: Test an action that writes an entry to the Kibana server log. - properties: - level: - default: info - description: The log level of the message for server log connectors. - enum: - - debug - - error - - fatal - - info - - trace - - warn - type: string - message: - description: The message for server log connectors. - type: string - required: - - message - title: Server log connector parameters - type: object - Connectors_run_connector_params_message_slack: - description: > - Test an action that sends a message to Slack. It is applicable only when - the connector type is `.slack`. - properties: - message: - description: >- - The Slack message text, which cannot contain Markdown, images, or - other advanced formatting. - type: string - required: - - message - title: Slack connector parameters - type: object - Connectors_run_connector_params_trigger_pagerduty: - description: Test an action that triggers a PagerDuty alert. - properties: - class: - description: The class or type of the event. - example: cpu load - type: string - component: - description: >- - The component of the source machine that is responsible for the - event. - example: eth0 - type: string - customDetails: - description: Additional details to add to the event. - type: object - dedupKey: - description: > - All actions sharing this key will be associated with the same - PagerDuty alert. This value is used to correlate trigger and - resolution. - maxLength: 255 - type: string - eventAction: - description: The type of event. - enum: - - trigger - type: string - group: - description: The logical grouping of components of a service. - example: app-stack - type: string - links: - description: A list of links to add to the event. - items: - type: object - properties: - href: - description: The URL for the link. - type: string - text: - description: A plain text description of the purpose of the link. - type: string - type: array - severity: - default: info - description: The severity of the event on the affected system. - enum: - - critical - - error - - info - - warning - type: string - source: - description: > - The affected system, such as a hostname or fully qualified domain - name. Defaults to the Kibana saved object id of the action. - type: string - summary: - description: A summery of the event. - maxLength: 1024 - type: string - timestamp: - description: >- - An ISO-8601 timestamp that indicates when the event was detected or - generated. - format: date-time - type: string - required: - - eventAction - title: PagerDuty connector parameters - type: object - Connectors_run_connector_request: - description: The properties vary depending on the connector type. - properties: - params: - oneOf: - - $ref: >- - #/components/schemas/Connectors_run_connector_params_acknowledge_resolve_pagerduty - - $ref: '#/components/schemas/Connectors_run_connector_params_documents' - - $ref: >- - #/components/schemas/Connectors_run_connector_params_message_email - - $ref: >- - #/components/schemas/Connectors_run_connector_params_message_serverlog - - $ref: >- - #/components/schemas/Connectors_run_connector_params_message_slack - - $ref: >- - #/components/schemas/Connectors_run_connector_params_trigger_pagerduty - - description: Test an action that involves a subaction. - discriminator: - mapping: - addEvent: >- - #/components/schemas/Connectors_run_connector_subaction_addevent - closeAlert: >- - #/components/schemas/Connectors_run_connector_subaction_closealert - closeIncident: >- - #/components/schemas/Connectors_run_connector_subaction_closeincident - createAlert: >- - #/components/schemas/Connectors_run_connector_subaction_createalert - fieldsByIssueType: >- - #/components/schemas/Connectors_run_connector_subaction_fieldsbyissuetype - getChoices: >- - #/components/schemas/Connectors_run_connector_subaction_getchoices - getFields: >- - #/components/schemas/Connectors_run_connector_subaction_getfields - getIncident: >- - #/components/schemas/Connectors_run_connector_subaction_getincident - issue: >- - #/components/schemas/Connectors_run_connector_subaction_issue - issues: >- - #/components/schemas/Connectors_run_connector_subaction_issues - issueTypes: >- - #/components/schemas/Connectors_run_connector_subaction_issuetypes - pushToService: >- - #/components/schemas/Connectors_run_connector_subaction_pushtoservice - propertyName: subAction - oneOf: - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_addevent - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_closealert - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_closeincident - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_createalert - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_fieldsbyissuetype - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_getchoices - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_getfields - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_getincident - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_issue - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_issues - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_issuetypes - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_postmessage - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_pushtoservice - - $ref: >- - #/components/schemas/Connectors_run_connector_subaction_validchannelid - title: Subaction parameters - required: - - params - title: Run connector request body properties - type: object - Connectors_run_connector_subaction_addevent: - description: The `addEvent` subaction for ServiceNow ITOM connectors. - title: The addEvent subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - addEvent - type: string - subActionParams: - description: The set of configuration properties for the action. - type: object - properties: - additional_info: - description: Additional information about the event. - type: string - description: - description: The details about the event. - type: string - event_class: - description: A specific instance of the source. - type: string - message_key: - description: >- - All actions sharing this key are associated with the same - ServiceNow alert. The default value is `:`. - type: string - metric_name: - description: The name of the metric. - type: string - node: - description: The host that the event was triggered for. - type: string - resource: - description: The name of the resource. - type: string - severity: - description: The severity of the event. - type: string - source: - description: The name of the event source type. - type: string - time_of_event: - description: The time of the event. - type: string - type: - description: The type of event. - type: string - required: - - subAction - Connectors_run_connector_subaction_closealert: - description: The `closeAlert` subaction for Opsgenie connectors. - title: The closeAlert subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - closeAlert - type: string - subActionParams: - type: object - properties: - alias: - description: >- - The unique identifier used for alert deduplication in Opsgenie. - The alias must match the value used when creating the alert. - type: string - note: - description: Additional information for the alert. - type: string - source: - description: The display name for the source of the alert. - type: string - user: - description: The display name for the owner. - type: string - required: - - alias - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_closeincident: - description: The `closeIncident` subaction for ServiceNow ITSM connectors. - title: The closeIncident subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - closeIncident - type: string - subActionParams: - type: object - properties: - incident: - anyOf: - - required: - - correlation_id - - required: - - externalId - type: object - properties: - correlation_id: - default: '{{rule.id}}:{{alert.id}}' - description: > - An identifier that is assigned to the incident when it is - created by the connector. NOTE: If you use the default value - and the rule generates multiple alerts that use the same - alert IDs, the latest open incident for this correlation ID - is closed unless you specify the external ID. - maxLength: 100 - nullable: true - type: string - externalId: - description: >- - The unique identifier (`incidentId`) for the incident in - ServiceNow. - nullable: true - type: string - required: - - incident - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_createalert: - description: The `createAlert` subaction for Opsgenie connectors. - title: The createAlert subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - createAlert - type: string - subActionParams: - type: object - properties: - actions: - description: The custom actions available to the alert. - items: - type: string - type: array - alias: - description: The unique identifier used for alert deduplication in Opsgenie. - type: string - description: - description: >- - A description that provides detailed information about the - alert. - type: string - details: - additionalProperties: true - description: The custom properties of the alert. - example: - key1: value1 - key2: value2 - type: object - entity: - description: >- - The domain of the alert. For example, the application or server - name. - type: string - message: - description: The alert message. - type: string - note: - description: Additional information for the alert. - type: string - priority: - description: The priority level for the alert. - enum: - - P1 - - P2 - - P3 - - P4 - - P5 - type: string - responders: - description: > - The entities to receive notifications about the alert. If `type` - is `user`, either `id` or `username` is required. If `type` is - `team`, either `id` or `name` is required. - items: - type: object - properties: - id: - description: The identifier for the entity. - type: string - name: - description: The name of the entity. - type: string - type: - description: 'The type of responders, in this case `escalation`.' - enum: - - escalation - - schedule - - team - - user - type: string - username: - description: A valid email address for the user. - type: string - type: array - source: - description: The display name for the source of the alert. - type: string - tags: - description: The tags for the alert. - items: - type: string - type: array - user: - description: The display name for the owner. - type: string - visibleTo: - description: >- - The teams and users that the alert will be visible to without - sending a notification. Only one of `id`, `name`, or `username` - is required. - items: - type: object - properties: - id: - description: The identifier for the entity. - type: string - name: - description: The name of the entity. - type: string - type: - description: Valid values are `team` and `user`. - enum: - - team - - user - type: string - username: - description: >- - The user name. This property is required only when the - `type` is `user`. - type: string - required: - - type - type: array - required: - - message - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_fieldsbyissuetype: - description: The `fieldsByIssueType` subaction for Jira connectors. - title: The fieldsByIssueType subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - fieldsByIssueType - type: string - subActionParams: - type: object - properties: - id: - description: The Jira issue type identifier. - example: 10024 - type: string - required: - - id - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_getchoices: - description: >- - The `getChoices` subaction for ServiceNow ITOM, ServiceNow ITSM, and - ServiceNow SecOps connectors. - title: The getChoices subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - getChoices - type: string - subActionParams: - description: The set of configuration properties for the action. - type: object - properties: - fields: - description: An array of fields. - items: - type: string - type: array - required: - - fields - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_getfields: - description: >- - The `getFields` subaction for Jira, ServiceNow ITSM, and ServiceNow - SecOps connectors. - title: The getFields subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - getFields - type: string - required: - - subAction - Connectors_run_connector_subaction_getincident: - description: >- - The `getIncident` subaction for Jira, ServiceNow ITSM, and ServiceNow - SecOps connectors. - properties: - subAction: - description: The action to test. - enum: - - getIncident - type: string - subActionParams: - type: object - properties: - externalId: - description: >- - The Jira, ServiceNow ITSM, or ServiceNow SecOps issue - identifier. - example: 71778 - type: string - required: - - externalId - required: - - subAction - - subActionParams - title: The getIncident subaction - type: object - Connectors_run_connector_subaction_issue: - description: The `issue` subaction for Jira connectors. - title: The issue subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - issue - type: string - subActionParams: - type: object - properties: - id: - description: The Jira issue identifier. - example: 71778 - type: string - required: - - id - required: - - subAction - Connectors_run_connector_subaction_issues: - description: The `issues` subaction for Jira connectors. - title: The issues subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - issues - type: string - subActionParams: - type: object - properties: - title: - description: The title of the Jira issue. - type: string - required: - - title - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_issuetypes: - description: The `issueTypes` subaction for Jira connectors. - title: The issueTypes subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - issueTypes - type: string - required: - - subAction - Connectors_run_connector_subaction_postmessage: - description: > - Test an action that sends a message to Slack. It is applicable only when - the connector type is `.slack_api`. - properties: - subAction: - description: The action to test. - enum: - - postMessage - type: string - subActionParams: - description: The set of configuration properties for the action. - type: object - properties: - channelIds: - description: > - The Slack channel identifier, which must be one of the - `allowedChannels` in the connector configuration. - items: - type: string - maxItems: 1 - type: array - channels: - deprecated: true - description: | - The name of a channel that your Slack app has access to. - items: - type: string - maxItems: 1 - type: array - text: - description: > - The Slack message text. If it is a Slack webhook connector, the - text cannot contain Markdown, images, or other advanced - formatting. If it is a Slack web API connector, it can contain - either plain text or block kit messages. - minLength: 1 - type: string - required: - - subAction - - subActionParams - title: The postMessage subaction - type: object - Connectors_run_connector_subaction_pushtoservice: - description: >- - The `pushToService` subaction for Jira, ServiceNow ITSM, ServiceNow - SecOps, Swimlane, and Webhook - Case Management connectors. - title: The pushToService subaction - type: object - properties: - subAction: - description: The action to test. - enum: - - pushToService - type: string - subActionParams: - description: The set of configuration properties for the action. - type: object - properties: - comments: - description: >- - Additional information that is sent to Jira, ServiceNow ITSM, - ServiceNow SecOps, or Swimlane. - items: - type: object - properties: - comment: - description: >- - A comment related to the incident. For example, describe - how to troubleshoot the issue. - type: string - commentId: - description: A unique identifier for the comment. - type: integer - type: array - incident: - description: >- - Information necessary to create or update a Jira, ServiceNow - ITSM, ServiveNow SecOps, or Swimlane incident. - type: object - properties: - alertId: - description: The alert identifier for Swimlane connectors. - type: string - caseId: - description: >- - The case identifier for the incident for Swimlane - connectors. - type: string - caseName: - description: The case name for the incident for Swimlane connectors. - type: string - category: - description: >- - The category of the incident for ServiceNow ITSM and - ServiceNow SecOps connectors. - type: string - correlation_display: - description: >- - A descriptive label of the alert for correlation purposes - for ServiceNow ITSM and ServiceNow SecOps connectors. - type: string - correlation_id: - description: > - The correlation identifier for the security incident for - ServiceNow ITSM and ServiveNow SecOps connectors. Connectors - using the same correlation ID are associated with the same - ServiceNow incident. This value determines whether a new - ServiceNow incident is created or an existing one is - updated. Modifying this value is optional; if not modified, - the rule ID and alert ID are combined as `{{ruleID}}:{{alert - ID}}` to form the correlation ID value in ServiceNow. The - maximum character length for this value is 100 characters. - NOTE: Using the default configuration of `{{ruleID}}:{{alert - ID}}` ensures that ServiceNow creates a separate incident - record for every generated alert that uses a unique alert - ID. If the rule generates multiple alerts that use the same - alert IDs, ServiceNow creates and continually updates a - single incident record for the alert. - type: string - description: - description: >- - The description of the incident for Jira, ServiceNow ITSM, - ServiceNow SecOps, Swimlane, and Webhook - Case Management - connectors. - type: string - dest_ip: - description: > - A list of destination IP addresses related to the security - incident for ServiceNow SecOps connectors. The IPs are added - as observables to the security incident. - oneOf: - - type: string - - items: - type: string - type: array - externalId: - description: > - The Jira, ServiceNow ITSM, or ServiceNow SecOps issue - identifier. If present, the incident is updated. Otherwise, - a new incident is created. - type: string - id: - description: >- - The external case identifier for Webhook - Case Management - connectors. - type: string - impact: - description: The impact of the incident for ServiceNow ITSM connectors. - type: string - issueType: - description: >- - The type of incident for Jira connectors. For example, - 10006. To obtain the list of valid values, set `subAction` - to `issueTypes`. - type: integer - labels: - description: > - The labels for the incident for Jira connectors. NOTE: - Labels cannot contain spaces. - items: - type: string - type: array - malware_hash: - description: >- - A list of malware hashes related to the security incident - for ServiceNow SecOps connectors. The hashes are added as - observables to the security incident. - oneOf: - - type: string - - items: - type: string - type: array - malware_url: - description: >- - A list of malware URLs related to the security incident for - ServiceNow SecOps connectors. The URLs are added as - observables to the security incident. - oneOf: - - type: string - - items: - type: string - type: array - type: string - otherFields: - additionalProperties: true - description: > - Custom field identifiers and their values for Jira - connectors. - maxProperties: 20 - type: object - parent: - description: >- - The ID or key of the parent issue for Jira connectors. - Applies only to `Sub-task` types of issues. - type: string - priority: - description: >- - The priority of the incident in Jira and ServiceNow SecOps - connectors. - type: string - ruleName: - description: The rule name for Swimlane connectors. - type: string - severity: - description: >- - The severity of the incident for ServiceNow ITSM and - Swimlane connectors. - type: string - short_description: - description: > - A short description of the incident for ServiceNow ITSM and - ServiceNow SecOps connectors. It is used for searching the - contents of the knowledge base. - type: string - source_ip: - description: >- - A list of source IP addresses related to the security - incident for ServiceNow SecOps connectors. The IPs are added - as observables to the security incident. - oneOf: - - type: string - - items: - type: string - type: array - status: - description: >- - The status of the incident for Webhook - Case Management - connectors. - type: string - subcategory: - description: >- - The subcategory of the incident for ServiceNow ITSM and - ServiceNow SecOps connectors. - type: string - summary: - description: A summary of the incident for Jira connectors. - type: string - tags: - description: A list of tags for Webhook - Case Management connectors. - items: - type: string - type: array - title: - description: > - A title for the incident for Jira and Webhook - Case - Management connectors. It is used for searching the contents - of the knowledge base. - type: string - urgency: - description: The urgency of the incident for ServiceNow ITSM connectors. - type: string - required: - - subAction - - subActionParams - Connectors_run_connector_subaction_validchannelid: - description: > - Retrieves information about a valid Slack channel identifier. It is - applicable only when the connector type is `.slack_api`. - properties: - subAction: - description: The action to test. - enum: - - validChannelId - type: string - subActionParams: - type: object - properties: - channelId: - description: The Slack channel identifier. - example: C123ABC456 - type: string - required: - - channelId - required: - - subAction - - subActionParams - title: The validChannelId subaction - type: object - Connectors_secrets_properties_bedrock: - description: Defines secrets for connectors when type is `.bedrock`. - properties: - accessKey: - description: The AWS access key for authentication. - type: string - secret: - description: The AWS secret for authentication. - type: string - required: - - accessKey - - secret - title: Connector secrets properties for an Amazon Bedrock connector - type: object - Connectors_secrets_properties_cases_webhook: - title: Connector secrets properties for Webhook - Case Management connector - type: object - properties: - password: - description: >- - The password for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - user: - description: >- - The username for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - Connectors_secrets_properties_d3security: - description: Defines secrets for connectors when type is `.d3security`. - type: object - properties: - token: - description: The D3 Security token. - type: string - required: - - token - title: Connector secrets properties for a D3 Security connector - Connectors_secrets_properties_email: - description: Defines secrets for connectors when type is `.email`. - properties: - clientSecret: - description: > - The Microsoft Exchange Client secret for OAuth 2.0 client - credentials authentication. It must be URL-encoded. If `service` is - `exchange_server`, this property is required. - type: string - password: - description: > - The password for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - user: - description: > - The username for HTTP basic authentication. If `hasAuth` is set to - `true`, this property is required. - type: string - title: Connector secrets properties for an email connector - type: object - Connectors_secrets_properties_gemini: - description: Defines secrets for connectors when type is `.gemini`. - properties: - credentialsJSON: - description: >- - The service account credentials JSON file. The service account - should have Vertex AI user IAM role assigned to it. - type: string - required: - - credentialsJSON - title: Connector secrets properties for a Google Gemini connector - type: object - Connectors_secrets_properties_genai: - description: Defines secrets for connectors when type is `.gen-ai`. - properties: - apiKey: - description: The OpenAI API key. - type: string - title: Connector secrets properties for an OpenAI connector - type: object - Connectors_secrets_properties_jira: - description: Defines secrets for connectors when type is `.jira`. - type: object - properties: - apiToken: - description: The Jira API authentication token for HTTP basic authentication. - type: string - email: - description: The account email for HTTP Basic authentication. - type: string - required: - - apiToken - - email - title: Connector secrets properties for a Jira connector - Connectors_secrets_properties_opsgenie: - description: Defines secrets for connectors when type is `.opsgenie`. - type: object - properties: - apiKey: - description: The Opsgenie API authentication key for HTTP Basic authentication. - type: string - required: - - apiKey - title: Connector secrets properties for an Opsgenie connector - Connectors_secrets_properties_pagerduty: - description: Defines secrets for connectors when type is `.pagerduty`. - properties: - routingKey: - description: > - A 32 character PagerDuty Integration Key for an integration on a - service. - type: string - required: - - routingKey - title: Connector secrets properties for a PagerDuty connector - type: object - Connectors_secrets_properties_resilient: - description: Defines secrets for connectors when type is `.resilient`. - type: object - properties: - apiKeyId: - description: The authentication key ID for HTTP Basic authentication. - type: string - apiKeySecret: - description: The authentication key secret for HTTP Basic authentication. - type: string - required: - - apiKeyId - - apiKeySecret - title: Connector secrets properties for IBM Resilient connector - Connectors_secrets_properties_sentinelone: - description: Defines secrets for connectors when type is `.sentinelone`. - properties: - token: - description: The A SentinelOne API token. - type: string - required: - - token - title: Connector secrets properties for a SentinelOne connector - type: object - Connectors_secrets_properties_servicenow: - description: >- - Defines secrets for connectors when type is `.servicenow`, - `.servicenow-sir`, or `.servicenow-itom`. - properties: - clientSecret: - description: >- - The client secret assigned to your OAuth application. This property - is required when `isOAuth` is `true`. - type: string - password: - description: >- - The password for HTTP basic authentication. This property is - required when `isOAuth` is `false`. - type: string - privateKey: - description: >- - The RSA private key that you created for use in ServiceNow. This - property is required when `isOAuth` is `true`. - type: string - privateKeyPassword: - description: >- - The password for the RSA private key. This property is required when - `isOAuth` is `true` and you set a password on your private key. - type: string - username: - description: >- - The username for HTTP basic authentication. This property is - required when `isOAuth` is `false`. - type: string - title: >- - Connector secrets properties for ServiceNow ITOM, ServiceNow ITSM, and - ServiceNow SecOps connectors - type: object - Connectors_secrets_properties_slack_api: - description: Defines secrets for connectors when type is `.slack`. - type: object - properties: - token: - description: Slack bot user OAuth token. - type: string - required: - - token - title: Connector secrets properties for a Web API Slack connector - Connectors_secrets_properties_slack_webhook: - description: Defines secrets for connectors when type is `.slack`. - type: object - properties: - webhookUrl: - description: Slack webhook url. - type: string - required: - - webhookUrl - title: Connector secrets properties for a Webhook Slack connector - Connectors_secrets_properties_swimlane: - description: Defines secrets for connectors when type is `.swimlane`. - properties: - apiToken: - description: Swimlane API authentication token. - type: string - title: Connector secrets properties for a Swimlane connector - type: object - Connectors_secrets_properties_teams: - description: Defines secrets for connectors when type is `.teams`. - properties: - webhookUrl: - description: > - The URL of the incoming webhook. If you are using the - `xpack.actions.allowedHosts` setting, add the hostname to the - allowed hosts. - type: string - required: - - webhookUrl - title: Connector secrets properties for a Microsoft Teams connector - type: object - Connectors_secrets_properties_tines: - description: Defines secrets for connectors when type is `.tines`. - properties: - email: - description: The email used to sign in to Tines. - type: string - token: - description: The Tines API token. - type: string - required: - - email - - token - title: Connector secrets properties for a Tines connector - type: object - Connectors_secrets_properties_torq: - description: Defines secrets for connectors when type is `.torq`. - properties: - token: - description: The secret of the webhook authentication header. - type: string - required: - - token - title: Connector secrets properties for a Torq connector - type: object - Connectors_secrets_properties_webhook: - description: Defines secrets for connectors when type is `.webhook`. - properties: - crt: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-crt-key`, it is a base64 encoded version of the CRT or CERT - file. - type: string - key: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-crt-key`, it is a base64 encoded version of the KEY file. - type: string - password: - description: > - The password for HTTP basic authentication or the passphrase for the - SSL certificate files. If `hasAuth` is set to `true` and `authType` - is `webhook-authentication-basic`, this property is required. - type: string - pfx: - description: >- - If `authType` is `webhook-authentication-ssl` and `certType` is - `ssl-pfx`, it is a base64 encoded version of the PFX or P12 file. - type: string - user: - description: > - The username for HTTP basic authentication. If `hasAuth` is set to - `true` and `authType` is `webhook-authentication-basic`, this - property is required. - type: string - title: Connector secrets properties for a Webhook connector - type: object - Connectors_secrets_properties_xmatters: - description: Defines secrets for connectors when type is `.xmatters`. - properties: - password: - description: > - A user name for HTTP basic authentication. It is applicable only - when `usesBasic` is `true`. - type: string - secretsUrl: - description: > - The request URL for the Elastic Alerts trigger in xMatters with the - API key included in the URL. It is applicable only when `usesBasic` - is `false`. - type: string - user: - description: > - A password for HTTP basic authentication. It is applicable only when - `usesBasic` is `true`. - type: string - title: Connector secrets properties for an xMatters connector - type: object - Connectors_update_connector_request: - description: The properties vary depending on the connector type. - oneOf: - - $ref: '#/components/schemas/Connectors_update_connector_request_bedrock' - - $ref: '#/components/schemas/Connectors_update_connector_request_gemini' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_cases_webhook - - $ref: '#/components/schemas/Connectors_update_connector_request_d3security' - - $ref: '#/components/schemas/Connectors_update_connector_request_email' - - $ref: '#/components/schemas/Connectors_create_connector_request_genai' - - $ref: '#/components/schemas/Connectors_update_connector_request_index' - - $ref: '#/components/schemas/Connectors_update_connector_request_jira' - - $ref: '#/components/schemas/Connectors_update_connector_request_opsgenie' - - $ref: '#/components/schemas/Connectors_update_connector_request_pagerduty' - - $ref: '#/components/schemas/Connectors_update_connector_request_resilient' - - $ref: '#/components/schemas/Connectors_update_connector_request_sentinelone' - - $ref: '#/components/schemas/Connectors_update_connector_request_serverlog' - - $ref: '#/components/schemas/Connectors_update_connector_request_servicenow' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_servicenow_itom - - $ref: '#/components/schemas/Connectors_update_connector_request_slack_api' - - $ref: >- - #/components/schemas/Connectors_update_connector_request_slack_webhook - - $ref: '#/components/schemas/Connectors_update_connector_request_swimlane' - - $ref: '#/components/schemas/Connectors_update_connector_request_teams' - - $ref: '#/components/schemas/Connectors_update_connector_request_tines' - - $ref: '#/components/schemas/Connectors_update_connector_request_torq' - - $ref: '#/components/schemas/Connectors_update_connector_request_webhook' - - $ref: '#/components/schemas/Connectors_update_connector_request_xmatters' - title: Update connector request body properties - Connectors_update_connector_request_bedrock: - title: Update Amazon Bedrock connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_bedrock' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' - required: - - config - - name - Connectors_update_connector_request_cases_webhook: - title: Update Webhook - Case Managment connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' - required: - - config - - name - Connectors_update_connector_request_d3security: - title: Update D3 Security connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_d3security' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_d3security' - required: - - config - - name - - secrets - Connectors_update_connector_request_email: - title: Update email connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_email' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_email' - required: - - config - - name - Connectors_update_connector_request_gemini: - title: Update Google Gemini connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_gemini' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_gemini' - required: - - config - - name - Connectors_update_connector_request_index: - title: Update index connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_index' - name: - description: The display name for the connector. - type: string - required: - - config - - name - Connectors_update_connector_request_jira: - title: Update Jira connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_jira' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_jira' - required: - - config - - name - - secrets - Connectors_update_connector_request_opsgenie: - title: Update Opsgenie connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_opsgenie' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' - required: - - config - - name - - secrets - Connectors_update_connector_request_pagerduty: - title: Update PagerDuty connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_pagerduty' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' - required: - - config - - name - - secrets - Connectors_update_connector_request_resilient: - title: Update IBM Resilient connector request - type: object - properties: - config: - $ref: '#/components/schemas/Connectors_config_properties_resilient' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_resilient' - required: - - config - - name - - secrets - Connectors_update_connector_request_sentinelone: - title: Update SentinelOne connector request - type: object - properties: + - slo +components: + examples: + Connectors_create_email_connector_request: + summary: Create an email connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_sentinelone' - name: - description: The display name for the connector. - type: string + from: tester@example.com + hasAuth: true + host: 'https://example.com' + port: 1025 + secure: false + service: other + connector_type_id: .email + name: email-connector-1 secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' - required: - - config - - name - - secrets - Connectors_update_connector_request_serverlog: - title: Update server log connector request - type: object - properties: - name: - description: The display name for the connector. - type: string - required: - - name - Connectors_update_connector_request_servicenow: - title: Update ServiceNow ITSM connector or ServiceNow SecOps request - type: object - properties: + password: password + user: username + Connectors_create_email_connector_response: + summary: A new email connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - name - - secrets - Connectors_update_connector_request_servicenow_itom: - title: Create ServiceNow ITOM connector request - type: object - properties: + clientId: null + from: tester@example.com + hasAuth: true + host: 'https://example.com' + oauthTokenUrl: null + port: 1025 + secure: false + service: other + tenantId: null + connector_type_id: .email + id: 90a82c60-478f-11ee-a343-f98a117c727f + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: email-connector-1 + Connectors_create_index_connector_request: + summary: Create an index connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' - required: - - config - - name - - secrets - Connectors_update_connector_request_slack_api: - title: Update Slack connector request - type: object - properties: + index: test-index + connector_type_id: .index + name: my-connector + Connectors_create_index_connector_response: + summary: A new index connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_slack_api' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' - required: - - name - - secrets - Connectors_update_connector_request_slack_webhook: - title: Update Slack connector request - type: object - properties: - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' - required: - - name - - secrets - Connectors_update_connector_request_swimlane: - title: Update Swimlane connector request - type: object - properties: + executionTimeField: null + index: test-index + refresh: false + connector_type_id: .index + id: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-connector + Connectors_create_webhook_connector_request: + summary: Create a webhook connector with SSL authentication. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_swimlane' - name: - description: The display name for the connector. - example: my-connector - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' - required: - - config - - name - - secrets - Connectors_update_connector_request_teams: - title: Update Microsoft Teams connector request - type: object - properties: - name: - description: The display name for the connector. - type: string + authType: webhook-authentication-ssl + certType: ssl-crt-key + method: post + url: 'https://example.com' + connector_type_id: .webhook + name: my-webhook-connector secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_teams' - required: - - name - - secrets - Connectors_update_connector_request_tines: - title: Update Tines connector request - type: object - properties: + crt: QmFnIEF0dH... + key: LS0tLS1CRUdJ... + password: my-passphrase + Connectors_create_webhook_connector_response: + summary: A new webhook connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_tines' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_tines' - required: - - config - - name - - secrets - Connectors_update_connector_request_torq: - title: Update Torq connector request - type: object - properties: + authType: webhook-authentication-ssl + certType: ssl-crt-key + hasAuth: true + headers: null + method: post + url: 'https://example.com' + verificationMode: full + connector_type_id: .webhook + id: 900eb010-3b9d-11ee-a642-8ffbb94e38bd + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-webhook-connector + Connectors_create_xmatters_connector_request: + summary: Create an xMatters connector with URL authentication. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_torq' - name: - description: The display name for the connector. - type: string + usesBasic: false + connector_type_id: .xmatters + name: my-xmatters-connector secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_torq' - required: - - config - - name - - secrets - Connectors_update_connector_request_webhook: - title: Update Webhook connector request - type: object - properties: + secretsUrl: 'https://example.com?apiKey=xxxxx' + Connectors_create_xmatters_connector_response: + summary: A new xMatters connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_webhook' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_webhook' - required: - - config - - name - - secrets - Connectors_update_connector_request_xmatters: - title: Update xMatters connector request - type: object - properties: + configUrl: null + usesBasic: false + connector_type_id: .xmatters + id: 4d2d8da0-4d1f-11ee-9367-577408be4681 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-xmatters-connector + Connectors_get_connector_response: + summary: Get connector details. + value: + config: {} + connector_type_id: .server-log + id: df770e30-8b8b-11ed-a780-3b746c987a81 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my_server_log_connector + Connectors_get_connector_types_generativeai_response: + summary: A list of connector types for the `generativeAI` feature. + value: + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .gen-ai + is_system_action_type: false + minimum_license_required: enterprise + name: OpenAI + supported_feature_ids: + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .bedrock + is_system_action_type: false + minimum_license_required: enterprise + name: AWS Bedrock + supported_feature_ids: + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - enabled: true + enabled_in_config: true + enabled_in_license: true + id: .gemini + is_system_action_type: false + minimum_license_required: enterprise + name: Google Gemini + supported_feature_ids: + - generativeAIForSecurity + Connectors_get_connectors_response: + summary: A list of connectors + value: + - connector_type_id: .email + id: preconfigured-email-connector + is_deprecated: false + is_preconfigured: true + is_system_action: false + name: my-preconfigured-email-notification + referenced_by_count: 0 + - config: + executionTimeField: null + index: test-index + refresh: false + connector_type_id: .index + id: e07d0c80-8b8b-11ed-a780-3b746c987a81 + is_deprecated: false + is_missing_secrets: false + is_preconfigured: false + is_system_action: false + name: my-index-connector + referenced_by_count: 2 + Connectors_run_cases_webhook_connector_request: + summary: Run a Webhook - Case Management connector to create a case. + value: + params: + subAction: pushToService + subActionParams: + comments: + - comment: A comment about the incident. + commentId: 1 + incident: + description: Description of the incident. + id: caseID + severity: low + status: open + tags: + - tag1 + - tag2 + title: Case title + Connectors_run_cases_webhook_connector_response: + summary: >- + Response from a pushToService action for a Webhook - Case Management + connector. + value: + connector_id: 1824b5b8-c005-4dcc-adac-57f92db46459 + data: + comments: + - commentId: 1 + pushedDate: '2023-12-05T19:43:36.360Z' + id: 100665 + pushedDate: '2023-12-05T19:43:36.360Z' + title: TEST-29034 + url: 'https://example.com/browse/TEST-29034' + status: ok + Connectors_run_email_connector_request: + summary: Send an email message from an email connector. + value: + params: + bcc: + - user1@example.com + cc: + - user2@example.com + - user3@example.com + message: Test email message. + subject: Test message subject + to: + - user4@example.com + Connectors_run_email_connector_response: + summary: Response for sending a message from an email connector. + value: + connector_id: 7fc7b9a0-ecc9-11ec-8736-e7d63118c907 + data: + accepted: + - user1@example.com + - user2@example.com + - user3@example.com + - user4@example.com + envelope: + from: tester@example.com + to: + - user1@example.com + - user2@example.com + - user3@example.com + - user4@example.com + envelopeTime: 8 + messageId: <08a92d29-642a-0706-750c-de5996bd5cf3@example.com> + messageSize: 729 + messageTime: 3 + rejected: [] + response: 250 Message queued as QzEXKcGJ + status: ok + Connectors_run_index_connector_request: + summary: Run an index connector. + value: + params: + documents: + - id: my_doc_id + message: 'hello, world' + name: my_doc_name + Connectors_run_index_connector_response: + summary: Response from running an index connector. + value: + connector_id: fd38c600-96a5-11ed-bb79-353b74189cba + data: + errors: false + items: + - create: + _id: 4JtvwYUBrcyxt2NnfW3y + _index: my-index + _primary_term: 1 + _seq_no: 0 + _shards: + failed: 0 + successful: 1 + total: 2 + _version: 1 + result: created + status: 201 + took: 135 + status: ok + Connectors_run_jira_connector_request: + summary: Run a Jira connector to retrieve the list of issue types. + value: + params: + subAction: issueTypes + Connectors_run_jira_connector_response: + summary: Response from retrieving the list of issue types for a Jira connector. + value: + connector_id: b3aad810-edbe-11ec-82d1-11348ecbf4a6 + data: + - id: 10024 + name: Improvement + - id: 10006 + name: Task + - id: 10007 + name: Sub-task + - id: 10025 + name: New Feature + - id: 10023 + name: Bug + - id: 10000 + name: Epic + status: ok + Connectors_run_pagerduty_connector_request: + summary: Run a PagerDuty connector to trigger an alert. + value: + params: + customDetails: + my_data_1: test data + eventAction: trigger + links: + - href: 'http://example.com/pagerduty' + text: An example link + summary: A brief event summary + Connectors_run_pagerduty_connector_response: + summary: Response from running a PagerDuty connector. + value: + connector_id: 45de9f70-954f-4608-b12a-db7cf808e49d + data: + dedup_key: 5115e138b26b484a81eaea779faa6016 + message: Event processed + status: success + status: ok + Connectors_run_server_log_connector_request: + summary: Run a server log connector. + value: + params: + level: warn + message: Test warning message. + Connectors_run_server_log_connector_response: + summary: Response from running a server log connector. + value: + connector_id: 7fc7b9a0-ecc9-11ec-8736-e7d63118c907 + status: ok + Connectors_run_servicenow_itom_connector_request: + summary: Run a ServiceNow ITOM connector to retrieve the list of choices. + value: + params: + subAction: getChoices + subActionParams: + fields: + - severity + - urgency + Connectors_run_servicenow_itom_connector_response: + summary: >- + Response from retrieving the list of choices for a ServiceNow ITOM + connector. + value: + connector_id: 9d9be270-2fd2-11ed-b0e0-87533c532698 + data: + - dependent_value: '' + element: severity + label: Critical + value: 1 + - dependent_value: '' + element: severity + label: Major + value: 2 + - dependent_value: '' + element: severity + label: Minor + value: 3 + - dependent_value: '' + element: severity + label: Warning + value: 4 + - dependent_value: '' + element: severity + label: OK + value: 5 + - dependent_value: '' + element: severity + label: Clear + value: 0 + - dependent_value: '' + element: urgency + label: 1 - High + value: 1 + - dependent_value: '' + element: urgency + label: 2 - Medium + value: 2 + - dependent_value: '' + element: urgency + label: 3 - Low + value: 3 + status: ok + Connectors_run_slack_api_connector_request: + summary: >- + Run a Slack connector that uses the web API method to post a message on + a channel. + value: + params: + subAction: postMessage + subActionParams: + channelIds: + - C123ABC456 + text: A test message. + Connectors_run_slack_api_connector_response: + summary: Response from posting a message with a Slack connector. + value: + connector_id: .slack_api + data: + channel: C123ABC456 + message: + app_id: A01BC2D34EF + blocks: + - block_id: /NXe + elements: + - elements: + - text: A test message. + type: text + type: rich_text_section + type: rich_text + bot_id: B12BCDEFGHI + bot_profile: + app_id: A01BC2D34EF + deleted: false + icons: + image_36: 'https://a.slack-edge.com/80588/img/plugins/app/bot_36.png' + id: B12BCDEFGHI + name: test + team_id: T01ABCDE2F + updated: 1672169705 + team: T01ABCDE2F + text: A test message + ts: '1234567890.123456' + type: message + user: U12A345BC6D + ok: true + ts: '1234567890.123456' + status: ok + Connectors_run_swimlane_connector_request: + summary: Run a Swimlane connector to create an incident. + value: + params: + subAction: pushToService + subActionParams: + comments: + - comment: A comment about the incident. + commentId: 1 + incident: + caseId: '1000' + caseName: Case name + description: Description of the incident. + Connectors_run_swimlane_connector_response: + summary: Response from creating a Swimlane incident. + value: + connector_id: a4746470-2f94-11ed-b0e0-87533c532698 + data: + comments: + - commentId: 1 + pushedDate: '2022-09-08T16:52:27.865Z' + id: aKPmBHWzmdRQtx6Mx + pushedDate: '2022-09-08T16:52:27.866Z' + title: TEST-457 + url: >- + https://elastic.swimlane.url.us/record/aNcL2xniGHGpa2AHb/aKPmBHWzmdRQtx6Mx + status: ok + Connectors_update_index_connector_request: + summary: Update an index connector. + value: config: - $ref: '#/components/schemas/Connectors_config_properties_xmatters' - name: - description: The display name for the connector. - type: string - secrets: - $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' - required: - - config - - name - - secrets - Data_views_400_response: - title: Bad request - type: object - properties: - error: - example: Bad Request - type: string - message: - type: string - statusCode: - example: 400 - type: number - required: - - statusCode - - error - - message - Data_views_404_response: - type: object - properties: - error: - enum: - - Not Found - example: Not Found - type: string - message: - example: >- - Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] - not found - type: string - statusCode: - enum: - - 404 - example: 404 - type: integer - Data_views_allownoindex: - description: Allows the data view saved object to exist before the data is available. - type: boolean - Data_views_create_data_view_request_object: - title: Create data view request - type: object - properties: + index: updated-index + name: updated-connector + Data_views_create_data_view_request: + summary: Create a data view with runtime fields. + value: + data_view: + name: My Logstash data view + runtimeFieldMap: + runtime_shape_name: + script: + source: 'emit(doc[''shape_name''].value)' + type: keyword + title: logstash-* + Data_views_create_runtime_field_request: + summary: Create a runtime field. + value: + name: runtimeFoo + runtimeField: + script: + source: 'emit(doc["foo"].value)' + type: long + Data_views_get_data_view_response: + summary: >- + The get data view API returns a JSON object that contains information + about the data view. + value: + data_view: + allowNoIndex: false + fieldAttrs: + products.manufacturer: + count: 1 + products.price: + count: 1 + products.product_name: + count: 1 + total_quantity: + count: 1 + fieldFormats: + products.base_price: + id: number + params: + pattern: '$0,0.00' + products.base_unit_price: + id: number + params: + pattern: '$0,0.00' + products.min_price: + id: number + params: + pattern: '$0,0.00' + products.price: + id: number + params: + pattern: '$0,0.00' + products.taxful_price: + id: number + params: + pattern: '$0,0.00' + products.taxless_price: + id: number + params: + pattern: '$0,0.00' + taxful_total_price: + id: number + params: + pattern: '$0,0.[00]' + taxless_total_price: + id: number + params: + pattern: '$0,0.00' + fields: + _id: + aggregatable: false + count: 0 + esTypes: + - _id + format: + id: string + isMapped: true + name: _id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _index: + aggregatable: true + count: 0 + esTypes: + - _index + format: + id: string + isMapped: true + name: _index + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _score: + aggregatable: false + count: 0 + format: + id: number + isMapped: true + name: _score + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: number + _source: + aggregatable: false + count: 0 + esTypes: + - _source + format: + id: _source + isMapped: true + name: _source + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: _source + category: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: category + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + category.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: category.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: category + type: string + currency: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: currency + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_birth_date: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: customer_birth_date + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + customer_first_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_first_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_first_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_first_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_first_name + type: string + customer_full_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_full_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_full_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_full_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_full_name + type: string + customer_gender: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_gender + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_id: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_last_name: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: customer_last_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + customer_last_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_last_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: customer_last_name + type: string + customer_phone: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: customer_phone + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + day_of_week: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: day_of_week + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + day_of_week_i: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: day_of_week_i + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + email: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: email + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + event.dataset: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: event.dataset + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.city_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.city_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.continent_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.continent_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.country_iso_code: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.country_iso_code + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + geoip.location: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: geoip.location + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + geoip.region_name: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: geoip.region_name + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + manufacturer: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: manufacturer + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + manufacturer.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: manufacturer.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: manufacturer + type: string + order_date: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: order_date + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + order_id: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: order_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + products._id: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: products._id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products._id.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products._id.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products._id + type: string + products.base_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.base_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.base_unit_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.base_unit_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.category: + aggregatable: false + count: 0 + esTypes: + - text + format: + id: string + isMapped: true + name: products.category + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.category.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.category.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.category + type: string + products.created_on: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: products.created_on + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + products.discount_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.discount_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.discount_percentage: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.discount_percentage + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.manufacturer: + aggregatable: false + count: 1 + esTypes: + - text + format: + id: string + isMapped: true + name: products.manufacturer + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.manufacturer.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.manufacturer.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.manufacturer + type: string + products.min_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.min_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.price: + aggregatable: true + count: 1 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.product_id: + aggregatable: true + count: 0 + esTypes: + - long + format: + id: number + isMapped: true + name: products.product_id + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.product_name: + aggregatable: false + count: 1 + esTypes: + - text + format: + id: string + isMapped: true + name: products.product_name + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.product_name.keyword: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.product_name.keyword + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + subType: + multi: + parent: products.product_name + type: string + products.quantity: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: products.quantity + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.sku: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: products.sku + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + products.tax_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.tax_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.taxful_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.taxful_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.taxless_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: products.taxless_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + products.unit_discount_amount: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + isMapped: true + name: products.unit_discount_amount + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + sku: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: sku + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + taxful_total_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.[00]' + isMapped: true + name: taxful_total_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + taxless_total_price: + aggregatable: true + count: 0 + esTypes: + - half_float + format: + id: number + params: + pattern: '$0,0.00' + isMapped: true + name: taxless_total_price + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + total_quantity: + aggregatable: true + count: 1 + esTypes: + - integer + format: + id: number + isMapped: true + name: total_quantity + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + total_unique_products: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: total_unique_products + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + type: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: type + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + user: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: user + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: Kibana Sample Data eCommerce + namespaces: + - default + runtimeFieldMap: {} + sourceFilters: [] + timeFieldName: order_date + title: kibana_sample_data_ecommerce + typeMeta: {} + version: WzUsMV0= + Data_views_get_data_views_response: + summary: The get all data views API returns a list of data views. + value: data_view: - description: The data view object. - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldAttrs: - additionalProperties: - $ref: '#/components/schemas/Data_views_fieldattrs' - type: object - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - id: + - id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + name: Kibana Sample Data eCommerce + namespaces: + - default + title: kibana_sample_data_ecommerce + typeMeta: {} + - id: d3d7af60-4c81-11e8-b3d7-01146121b73d + name: Kibana Sample Data Flights + namespaces: + - default + title: kibana_sample_data_flights + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: Kibana Sample Data Logs + namespaces: + - default + title: kibana_sample_data_logs + Data_views_get_default_data_view_response: + summary: The get default data view API returns the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + Data_views_get_runtime_field_response: + summary: >- + The get runtime field API returns a JSON object that contains + information about the runtime field (`hour_of_day`) and the data view + (`d3d7af60-4c81-11e8-b3d7-01146121b73d`). + value: + data_view: + allowNoIndex: false + fieldAttrs: {} + fieldFormats: + AvgTicketPrice: + id: number + params: + pattern: '$0,0.[00]' + hour_of_day: + id: number + params: + pattern: '00' + fields: + _id: + aggregatable: false + count: 0 + esTypes: + - _id + format: + id: string + isMapped: true + name: _id + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false + type: string + _index: + aggregatable: true + count: 0 + esTypes: + - _index + format: + id: string + isMapped: true + name: _index + readFromDocValues: false + scripted: false + searchable: true + shortDotsEnable: false type: string - name: - description: The data view name. + _score: + aggregatable: false + count: 0 + format: + id: number + isMapped: true + name: _score + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: number + _source: + aggregatable: false + count: 0 + esTypes: + - _source + format: + id: _source + isMapped: true + name: _source + readFromDocValues: false + scripted: false + searchable: false + shortDotsEnable: false + type: _source + AvgTicketPrice: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + params: + pattern: '$0,0.[00]' + isMapped: true + name: AvgTicketPrice + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + Cancelled: + aggregatable: true + count: 0 + esTypes: + - boolean + format: + id: boolean + isMapped: true + name: Cancelled + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: boolean + Carrier: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Carrier + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - namespaces: - $ref: '#/components/schemas/Data_views_namespaces' - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - type: - $ref: '#/components/schemas/Data_views_type' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta' - version: + dayOfWeek: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: dayOfWeek + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + Dest: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Dest + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - title - override: - default: false - description: >- - Override an existing data view if a data view with the provided - title already exists. - type: boolean - required: - - data_view - Data_views_data_view_response_object: - title: Data view response properties - type: object - properties: - data_view: - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldAttrs: - additionalProperties: - $ref: '#/components/schemas/Data_views_fieldattrs' - type: object - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - id: - example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + DestAirportID: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestAirportID + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - name: - description: The data view name. + DestCityName: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestCityName + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - namespaces: - $ref: '#/components/schemas/Data_views_namespaces' - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta_response' - version: - example: WzQ2LDJd + DestCountry: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestCountry + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - Data_views_fieldattrs: - description: A map of field attributes by field name. - type: object - properties: - count: - description: Popularity count for the field. - type: integer - customDescription: - description: Custom description for the field. - maxLength: 300 - type: string - customLabel: - description: Custom label for the field. - type: string - Data_views_fieldformats: - description: A map of field formats by field name. - type: object - Data_views_namespaces: - description: >- - An array of space identifiers for sharing the data view between multiple - spaces. - items: - default: default - type: string - type: array - Data_views_runtimefieldmap: - description: A map of runtime field definitions by field name. - type: object - properties: - script: - type: object - properties: - source: - description: Script for the runtime field. + DestLocation: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: DestLocation + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + DestRegion: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestRegion + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - type: - description: Mapping type of the runtime field. - type: string - required: - - script - - type - Data_views_sourcefilters: - description: The array of field names you want to filter out in Discover. - items: - type: object - properties: - value: - type: string - required: - - value - type: array - Data_views_swap_data_view_request_object: - title: Data view reference swap request - type: object - properties: - delete: - description: Deletes referenced saved object if all references are removed. - type: boolean - forId: - description: Limit the affected saved objects to one or more by identifier. - oneOf: - - type: string - - items: - type: string - type: array - forType: - description: Limit the affected saved objects by type. - type: string - fromId: - description: The saved object reference to change. - type: string - fromType: - description: > - Specify the type of the saved object reference to alter. The default - value is `index-pattern` for data views. - type: string - toId: - description: New saved object reference value to replace the old value. - type: string - required: - - fromId - - toId - Data_views_timefieldname: - description: 'The timestamp field name, which you use for time-based data views.' - type: string - Data_views_title: - description: >- - Comma-separated list of data streams, indices, and aliases that you want - to search. Supports wildcards (`*`). - type: string - Data_views_type: - description: 'When set to `rollup`, identifies the rollup data views.' - type: string - Data_views_typemeta: - description: >- - When you use rollup indices, contains the field list for the rollup data - view API endpoints. - type: object - properties: - aggs: - description: A map of rollup restrictions by aggregation type and field name. - type: object - params: - description: Properties for retrieving rollup fields. - type: object - required: - - aggs - - params - Data_views_typemeta_response: - description: >- - When you use rollup indices, contains the field list for the rollup data - view API endpoints. - nullable: true - type: object - properties: - aggs: - description: A map of rollup restrictions by aggregation type and field name. - type: object - params: - description: Properties for retrieving rollup fields. - type: object - Data_views_update_data_view_request_object: - title: Update data view request - type: object - properties: - data_view: - description: > - The data view properties you want to update. Only the specified - properties are updated in the data view. Unspecified fields stay as - they are persisted. - type: object - properties: - allowNoIndex: - $ref: '#/components/schemas/Data_views_allownoindex' - fieldFormats: - $ref: '#/components/schemas/Data_views_fieldformats' - fields: - type: object - name: + DestWeather: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: DestWeather + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - runtimeFieldMap: - additionalProperties: - $ref: '#/components/schemas/Data_views_runtimefieldmap' - type: object - sourceFilters: - $ref: '#/components/schemas/Data_views_sourcefilters' - timeFieldName: - $ref: '#/components/schemas/Data_views_timefieldname' - title: - $ref: '#/components/schemas/Data_views_title' - type: - $ref: '#/components/schemas/Data_views_type' - typeMeta: - $ref: '#/components/schemas/Data_views_typemeta' - refresh_fields: - default: false - description: Reloads the data view fields after the data view is updated. - type: boolean - required: - - data_view - Kibana_HTTP_APIs_core_status_redactedResponse: - additionalProperties: false - description: A minimal representation of Kibana's operational status. - type: object - properties: - status: - additionalProperties: false - type: object - properties: - overall: - additionalProperties: false - type: object - properties: - level: - description: Service status levels as human and machine readable values. - enum: - - available - - degraded - - unavailable - - critical - type: string - required: - - level - required: - - overall - required: - - status - Kibana_HTTP_APIs_core_status_response: - additionalProperties: false - description: >- - Kibana's operational status as well as a detailed breakdown of plugin - statuses indication of various loads (like event loop utilization and - network traffic) at time of request. - type: object - properties: - metrics: - additionalProperties: false - description: Metric groups collected by Kibana. - type: object - properties: - collection_interval_in_millis: - description: The interval at which metrics should be collected. + DistanceKilometers: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: DistanceKilometers + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: number - elasticsearch_client: - additionalProperties: false - description: Current network metrics of Kibana's Elasticsearch client. - type: object - properties: - totalActiveSockets: - description: Count of network sockets currently in use. - type: number - totalIdleSockets: - description: Count of network sockets currently idle. - type: number - totalQueuedRequests: - description: Count of requests not yet assigned to sockets. - type: number - required: - - totalActiveSockets - - totalIdleSockets - - totalQueuedRequests - last_updated: - description: The time metrics were collected. + DistanceMiles: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: DistanceMiles + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + FlightDelay: + aggregatable: true + count: 0 + esTypes: + - boolean + format: + id: boolean + isMapped: true + name: FlightDelay + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: boolean + FlightDelayMin: + aggregatable: true + count: 0 + esTypes: + - integer + format: + id: number + isMapped: true + name: FlightDelayMin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + FlightDelayType: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightDelayType + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - elasticsearch_client - - last_updated - - collection_interval_in_millis - name: - description: Kibana instance name. - type: string - status: - additionalProperties: false - type: object - properties: - core: - additionalProperties: false - description: Statuses of core Kibana services. - type: object - properties: - elasticsearch: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: >- - An unstructured set of extra metadata about this - service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - savedObjects: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: >- - An unstructured set of extra metadata about this - service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - required: - - elasticsearch - - savedObjects - overall: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: Service status levels as human and machine readable values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: An unstructured set of extra metadata about this service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - plugins: - additionalProperties: - additionalProperties: false - type: object - properties: - detail: - description: Human readable detail of the service status. - type: string - documentationUrl: - description: A URL to further documentation regarding this service. - type: string - level: - description: >- - Service status levels as human and machine readable - values. - enum: - - available - - degraded - - unavailable - - critical - type: string - meta: - additionalProperties: {} - description: An unstructured set of extra metadata about this service. - type: object - summary: - description: A human readable summary of the service status. - type: string - required: - - level - - summary - - meta - description: A dynamic mapping of plugin ID to plugin status. - type: object - required: - - overall - - core - - plugins - uuid: - description: >- - Unique, generated Kibana instance UUID. This UUID should persist - even if the Kibana process restarts. - type: string - version: - additionalProperties: false - type: object - properties: - build_date: - description: The date and time of this build. + FlightNum: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightNum + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + FlightTimeHour: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: FlightTimeHour + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + FlightTimeMin: + aggregatable: true + count: 0 + esTypes: + - float + format: + id: number + isMapped: true + name: FlightTimeMin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: number + hour_of_day: + aggregatable: true + count: 0 + esTypes: + - long + format: + id: number + params: + pattern: '00' + name: hour_of_day + readFromDocValues: false + runtimeField: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + scripted: false + searchable: true + shortDotsEnable: false + type: number + Origin: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: Origin + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_flavor: - description: >- - The build flavour determines configuration and behavior of - Kibana. On premise users will almost always run the - "traditional" flavour, while other flavours are reserved for - Elastic-specific use cases. - enum: - - serverless - - traditional + OriginAirportID: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginAirportID + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_hash: - description: >- - A unique hash value representing the git commit of this Kibana - build. + OriginCityName: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginCityName + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - build_number: - description: >- - A monotonically increasing number, each subsequent build will - have a higher number. - type: number - build_snapshot: - description: Whether this build is a snapshot build. - type: boolean - number: - description: A semantic version number. + OriginCountry: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginCountry + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false type: string - required: - - number - - build_hash - - build_number - - build_snapshot - - build_flavor - - build_date - required: - - name - - uuid - - version - - status - - metrics - Machine_learning_APIs_mlSync200Response: - properties: - datafeedsAdded: - additionalProperties: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' - description: >- - If a saved object for an anomaly detection job is missing a datafeed - identifier, it is added when you run the sync machine learning saved - objects API. - type: object - datafeedsRemoved: - additionalProperties: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' - description: >- - If a saved object for an anomaly detection job references a datafeed - that no longer exists, it is deleted when you run the sync machine - learning saved objects API. - type: object - savedObjectsCreated: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsCreated - savedObjectsDeleted: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted - title: Successful sync API response - type: object - Machine_learning_APIs_mlSync4xxResponse: - properties: - error: - example: Unauthorized - type: string - message: - type: string - statusCode: - example: 401 - type: integer - title: Unsuccessful sync API response - type: object - Machine_learning_APIs_mlSyncResponseAnomalyDetectors: - description: >- - The sync machine learning saved objects API response contains this - object when there are anomaly detection jobs affected by the - synchronization. There is an object for each relevant job, which - contains the synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for anomaly detection jobs - type: object - Machine_learning_APIs_mlSyncResponseDatafeeds: - description: >- - The sync machine learning saved objects API response contains this - object when there are datafeeds affected by the synchronization. There - is an object for each relevant datafeed, which contains the - synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for datafeeds - type: object - Machine_learning_APIs_mlSyncResponseDataFrameAnalytics: - description: >- - The sync machine learning saved objects API response contains this - object when there are data frame analytics jobs affected by the - synchronization. There is an object for each relevant job, which - contains the synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for data frame analytics jobs - type: object - Machine_learning_APIs_mlSyncResponseSavedObjectsCreated: - description: >- - If saved objects are missing for machine learning jobs or trained - models, they are created when you run the sync machine learning saved - objects API. - properties: - anomaly-detector: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors - description: >- - If saved objects are missing for anomaly detection jobs, they are - created. - type: object - data-frame-analytics: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics - description: >- - If saved objects are missing for data frame analytics jobs, they are - created. - type: object - trained-model: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels - description: 'If saved objects are missing for trained models, they are created.' - type: object - title: Sync API response for created saved objects - type: object - Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted: - description: >- - If saved objects exist for machine learning jobs or trained models that - no longer exist, they are deleted when you run the sync machine learning - saved objects API. - properties: - anomaly-detector: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors - description: >- - If there are saved objects exist for nonexistent anomaly detection - jobs, they are deleted. - type: object - data-frame-analytics: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics - description: >- - If there are saved objects exist for nonexistent data frame - analytics jobs, they are deleted. - type: object - trained-model: - additionalProperties: - $ref: >- - #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels - description: >- - If there are saved objects exist for nonexistent trained models, - they are deleted. - type: object - title: Sync API response for deleted saved objects - type: object - Machine_learning_APIs_mlSyncResponseSuccess: - description: The success or failure of the synchronization. - type: boolean - Machine_learning_APIs_mlSyncResponseTrainedModels: + OriginLocation: + aggregatable: true + count: 0 + esTypes: + - geo_point + format: + id: geo_point + params: + transform: wkt + isMapped: true + name: OriginLocation + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: geo_point + OriginRegion: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginRegion + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + OriginWeather: + aggregatable: true + count: 0 + esTypes: + - keyword + format: + id: string + isMapped: true + name: OriginWeather + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: string + timestamp: + aggregatable: true + count: 0 + esTypes: + - date + format: + id: date + isMapped: true + name: timestamp + readFromDocValues: true + scripted: false + searchable: true + shortDotsEnable: false + type: date + id: d3d7af60-4c81-11e8-b3d7-01146121b73d + name: Kibana Sample Data Flights + runtimeFieldMap: + hour_of_day: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + sourceFilters: [] + timeFieldName: timestamp + title: kibana_sample_data_flights + version: WzM2LDJd + fields: + - aggregatable: true + count: 0 + esTypes: + - long + name: hour_of_day + readFromDocValues: false + runtimeField: + script: + source: 'emit(doc[''timestamp''].value.getHour());' + type: long + scripted: false + searchable: true + shortDotsEnable: false + type: number + Data_views_preview_swap_data_view_request: + summary: Preview swapping references from data view ID "abcd-efg" to "xyz-123". + value: + fromId: abcd-efg + toId: xyz-123 + Data_views_set_default_data_view_request: + summary: Set the default data view identifier. + value: + data_view_id: ff959d40-b880-11e8-a6d9-e546fe2bba5f + force: true + Data_views_swap_data_view_request: + summary: >- + Swap references from data view ID "abcd-efg" to "xyz-123" and remove the + data view that is no longer referenced. + value: + delete: true + fromId: abcd-efg + toId: xyz-123 + Data_views_update_data_view_request: + summary: Update some properties for a data view. + value: + data_view: + allowNoIndex: false + name: Kibana Sample Data eCommerce + timeFieldName: order_date + title: kibana_sample_data_ecommerce + refresh_fields: true + Data_views_update_field_metadata_request: + summary: Update metadata for multiple fields. + value: + fields: + field1: + count: 123 + customLabel: Field 1 label + field2: + customDescription: Field 2 description + customLabel: Field 2 label + Data_views_update_runtime_field_request: + summary: Update an existing runtime field on a data view. + value: + runtimeField: + script: + source: 'emit(doc["bar"].value)' + Machine_learning_APIs_mlSyncExample: + summary: Two anomaly detection jobs required synchronization in this example. + value: + datafeedsAdded: {} + datafeedsRemoved: {} + savedObjectsCreated: + anomaly-detector: + myjob1: + success: true + myjob2: + success: true + savedObjectsDeleted: {} + Saved_objects_export_objects_request: + summary: Export a specific saved object. + value: + excludeExportDetails: true + includeReferencesDeep: false + objects: + - id: de71f4f0-1902-11e9-919b-ffe5949a18d2 + type: map + Saved_objects_export_objects_response: + summary: >- + The export objects API response contains a JSON record for each exported + object. + value: + attributes: + description: '' + layerListJSON: >- + [{"id":"0hmz5","alpha":1,"sourceDescriptor":{"type":"EMS_TMS","isAutoSelect":true,"lightModeDefault":"road_map_desaturated"},"visible":true,"style":{},"type":"EMS_VECTOR_TILE","minZoom":0,"maxZoom":24},{"id":"edh66","label":"Total + Requests by + Destination","minZoom":0,"maxZoom":24,"alpha":0.5,"sourceDescriptor":{"type":"EMS_FILE","id":"world_countries","tooltipProperties":["name","iso2"]},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"__kbnjoin__count__673ff994-fc75-4c67-909b-69fcb0e1060e","origin":"join"},"color":"Greys","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"STATIC","options":{"size":10}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR","joins":[{"leftField":"iso2","right":{"type":"ES_TERM_SOURCE","id":"673ff994-fc75-4c67-909b-69fcb0e1060e","indexPatternTitle":"kibana_sample_data_logs","term":"geo.dest","indexPatternRefName":"layer_1_join_0_index_pattern","metrics":[{"type":"count","label":"web + logs + count"}],"applyGlobalQuery":true}}]},{"id":"gaxya","label":"Actual + Requests","minZoom":9,"maxZoom":24,"alpha":1,"sourceDescriptor":{"id":"b7486535-171b-4d3b-bb2e-33c1a0a2854c","type":"ES_SEARCH","geoField":"geo.coordinates","limit":2048,"filterByMapBounds":true,"tooltipProperties":["clientip","timestamp","host","request","response","machine.os","agent","bytes"],"indexPatternRefName":"layer_2_source_index_pattern","applyGlobalQuery":true,"scalingType":"LIMIT"},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"STATIC","options":{"color":"#2200ff"}},"lineColor":{"type":"STATIC","options":{"color":"#FFFFFF"}},"lineWidth":{"type":"STATIC","options":{"size":2}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"bytes","origin":"source"},"minSize":1,"maxSize":23,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"},{"id":"tfi3f","label":"Total + Requests and + Bytes","minZoom":0,"maxZoom":9,"alpha":1,"sourceDescriptor":{"type":"ES_GEO_GRID","resolution":"COARSE","id":"8aaa65b5-a4e9-448b-9560-c98cb1c5ac5b","geoField":"geo.coordinates","requestType":"point","metrics":[{"type":"count","label":"web + logs + count"},{"type":"sum","field":"bytes"}],"indexPatternRefName":"layer_3_source_index_pattern","applyGlobalQuery":true},"visible":true,"style":{"type":"VECTOR","properties":{"fillColor":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"color":"Blues","fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"lineColor":{"type":"STATIC","options":{"color":"#cccccc"}},"lineWidth":{"type":"STATIC","options":{"size":1}},"iconSize":{"type":"DYNAMIC","options":{"field":{"name":"sum_of_bytes","origin":"source"},"minSize":7,"maxSize":25,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelText":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"labelSize":{"type":"DYNAMIC","options":{"field":{"name":"doc_count","origin":"source"},"minSize":12,"maxSize":24,"fieldMetaOptions":{"isEnabled":false,"sigma":3}}},"symbolizeAs":{"options":{"value":"circle"}},"icon":{"type":"STATIC","options":{"value":"marker"}}}},"type":"GEOJSON_VECTOR"}] + mapStateJSON: >- + {"zoom":3.64,"center":{"lon":-88.92107,"lat":42.16337},"timeFilters":{"from":"now-7d","to":"now"},"refreshConfig":{"isPaused":true,"interval":0},"query":{"language":"kuery","query":""},"settings":{"autoFitToDataBounds":false}} + title: '[Logs] Total Requests and Bytes' + uiStateJSON: '{"isDarkMode":false}' + coreMigrationVersion: 8.8.0 + created_at: '2023-08-23T20:03:32.204Z' + id: de71f4f0-1902-11e9-919b-ffe5949a18d2 + managed: false + references: + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_1_join_0_index_pattern + type: index-pattern + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_2_source_index_pattern + type: index-pattern + - id: 90943e30-9a47-11e8-b64d-95841ca0b247 + name: layer_3_source_index_pattern + type: index-pattern + type: map + typeMigrationVersion: 8.4.0 + updated_at: '2023-08-23T20:03:32.204Z' + version: WzEzLDFd + Saved_objects_import_objects_request: + value: + file: file.ndjson + Saved_objects_import_objects_response: + summary: >- + The import objects API response indicates a successful import and the + objects are created. Since these objects are created as new copies, each + entry in the successResults array includes a destinationId attribute. + value: + success: true + successCount: 1 + successResults: + - destinationId: 82d2760c-468f-49cf-83aa-b9a35b6a8943 + id: 90943e30-9a47-11e8-b64d-95841ca0b247 + managed: false + meta: + icon: indexPatternApp + title: Kibana Sample Data Logs + type: index-pattern + Saved_objects_key_rotation_response: + summary: Encryption key rotation using default parameters. + value: + failed: 0 + successful: 300 + total: 1000 + Saved_objects_resolve_missing_reference_request: + value: + file: file.ndjson + retries: + - id: my-pattern + overwrite: true + type: index-pattern + - destinationId: another-vis + id: my-vis + overwrite: true + type: visualization + - destinationId: yet-another-canvas + id: my-canvas + overwrite: true + type: canvas + - id: my-dashboard + type: dashboard + Saved_objects_resolve_missing_reference_response: + summary: Resolve missing reference errors. + value: + success: true + successCount: 3 + successResults: + - id: my-vis + meta: + icon: visualizeApp + title: Look at my visualization + type: visualization + - id: my-search + meta: + icon: searchApp + title: Look at my search + type: search + - id: my-dashboard + meta: + icon: dashboardApp + title: Look at my dashboard + type: dashboard + parameters: + Connectors_action_id: + description: An identifier for the action. + in: path + name: actionId + required: true + schema: + example: c55b6eb0-6bad-11eb-9f3b-611eebc6c3ad + type: string + Connectors_connector_id: + description: An identifier for the connector. + in: path + name: connectorId + required: true + schema: + example: df770e30-8b8b-11ed-a780-3b746c987a81 + type: string + Connectors_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + Data_views_field_name: + description: The name of the runtime field. + in: path + name: fieldName + required: true + schema: + example: hour_of_day + type: string + Data_views_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + Data_views_view_id: + description: An identifier for the data view. + in: path + name: viewId + required: true + schema: + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + type: string + Machine_learning_APIs_simulateParam: description: >- - The sync machine learning saved objects API response contains this - object when there are trained models affected by the synchronization. - There is an object for each relevant trained model, which contains the - synchronization status. - properties: - success: - $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' - title: Sync API response for trained models - type: object - Saved_objects_400_response: - title: Bad request - type: object - properties: - error: - enum: - - Bad Request - type: string - message: - type: string - statusCode: - enum: - - 400 - type: integer - required: - - error - - message - - statusCode - Saved_objects_attributes: - description: > - The data that you want to create. WARNING: When you create saved - objects, attributes are not validated, which allows you to pass - arbitrary and ill-formed data into the API that can break Kibana. Make - sure any data that you send to the API is properly formed. - type: object - Saved_objects_initial_namespaces: - description: > - Identifiers for the spaces in which this object is created. If this is - provided, the object is created only in the explicitly defined spaces. - If this is not provided, the object is created in the current space - (default behavior). For shareable object types (registered with - `namespaceType: 'multiple'`), this option can be used to specify one or - more spaces, including the "All spaces" identifier ('*'). For isolated - object types (registered with `namespaceType: 'single'` or - `namespaceType: 'multiple-isolated'`), this option can only be used to - specify a single space, and the "All spaces" identifier ('*') is not - allowed. For global object types (`registered with `namespaceType: - agnostic`), this option cannot be used. - type: array - Saved_objects_references: - description: > - Objects with `name`, `id`, and `type` properties that describe the other - saved objects that this object references. Use `name` in attributes to - refer to the other saved object, but never the `id`, which can update - automatically during migrations or import and export. - type: array - Security_AI_Assistant_API_AnonymizationFieldCreateProps: - type: object - properties: - allowed: - type: boolean - anonymized: - type: boolean - field: - type: string - required: - - field - Security_AI_Assistant_API_AnonymizationFieldDetailsInError: - type: object - properties: - id: - type: string - name: - type: string - required: - - id - Security_AI_Assistant_API_AnonymizationFieldResponse: - type: object - properties: - allowed: - type: boolean - anonymized: - type: boolean - createdAt: - type: string - createdBy: - type: string - field: - type: string - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - namespace: - description: Kibana space - type: string - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - updatedAt: - type: string - updatedBy: - type: string - required: - - id - - field - Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipReason: - enum: - - ANONYMIZATION_FIELD_NOT_MODIFIED - type: string - Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipResult: - type: object + When true, simulates the synchronization by returning only the list of + actions that would be performed. + example: 'true' + in: query + name: simulate + required: false + schema: + type: boolean + Saved_objects_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + Saved_objects_saved_object_id: + description: An identifier for the saved object. + in: path + name: id + required: true + schema: + type: string + Saved_objects_saved_object_type: + description: >- + Valid options include `visualization`, `dashboard`, `search`, + `index-pattern`, `config`. + in: path + name: type + required: true + schema: + type: string + SLOs_kbn_xsrf: + description: Cross-site request forgery protection + in: header + name: kbn-xsrf + required: true + schema: + type: string + SLOs_slo_id: + description: An identifier for the slo. + in: path + name: sloId + required: true + schema: + example: 9c235211-6834-11ea-a78c-6feb38a34414 + type: string + SLOs_space_id: + description: >- + An identifier for the space. If `/s/` and the identifier are omitted + from the path, the default space is used. + in: path + name: spaceId + required: true + schema: + example: default + type: string + responses: + Connectors_200_actions: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + $ref: '#/components/schemas/Connectors_action_response_properties' + description: Indicates a successful call. + Connectors_401: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + properties: + error: + enum: + - Unauthorized + example: Unauthorized + type: string + message: + type: string + statusCode: + enum: + - 401 + example: 401 + type: integer + title: Unauthorized response + type: object + description: Authorization information is missing or invalid. + Connectors_404: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + properties: + error: + enum: + - Not Found + example: Not Found + type: string + message: + example: >- + Saved object [action/baf33fc0-920c-11ed-b36a-874bd1548a00] not + found + type: string + statusCode: + enum: + - 404 + example: 404 + type: integer + title: Not found response + type: object + description: Object is not found. + schemas: + Connectors_action_response_properties: + description: The properties vary depending on the action type. properties: - id: - type: string - name: + actionTypeId: type: string - skip_reason: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipReason - required: - - id - - skip_reason - Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResponse: - type: object - properties: - anonymization_fields_count: - type: integer - attributes: + config: type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_NormalizedAnonymizationFieldError - type: array - results: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResults - summary: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_BulkCrudActionSummary - required: - - results - - summary - message: + id: type: string - status_code: - type: integer - success: + isDeprecated: + description: Indicates whether the action type is deprecated. type: boolean - required: - - attributes - Security_AI_Assistant_API_AnonymizationFieldsBulkCrudActionResults: - type: object - properties: - created: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - deleted: - items: - type: string - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldsBulkActionSkipResult - type: array - updated: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldResponse - type: array - required: - - updated - - created - - deleted - - skipped - Security_AI_Assistant_API_AnonymizationFieldUpdateProps: - type: object - properties: - allowed: + isMissingSecrets: + description: Indicates whether secrets are missing for the action. type: boolean - anonymized: + isPreconfigured: + description: Indicates whether it is a preconfigured action. type: boolean - id: + name: type: string - required: - - id - Security_AI_Assistant_API_ApiConfig: + title: Action response properties type: object + Connectors_config_properties_bedrock: + description: Defines properties for connectors when type is `.bedrock`. properties: - actionTypeId: - description: action type id - type: string - connectorId: - description: connector id - type: string - defaultSystemPromptId: - description: defaultSystemPromptId + apiUrl: + description: The Amazon Bedrock request URL. type: string - model: - description: model + defaultModel: + default: 'anthropic.claude-3-5-sonnet-20240620-v1:0' + description: > + The generative artificial intelligence model for Amazon Bedrock to + use. Current support is for the Anthropic Claude models. type: string - provider: - $ref: '#/components/schemas/Security_AI_Assistant_API_Provider' - description: Provider required: - - connectorId - - actionTypeId - Security_AI_Assistant_API_BulkCrudActionSummary: + - apiUrl + title: Connector request properties for an Amazon Bedrock connector type: object - properties: - failed: - type: integer - skipped: - type: integer - succeeded: - type: integer - total: - type: integer - required: - - failed - - skipped - - succeeded - - total - Security_AI_Assistant_API_ChatCompleteProps: + Connectors_config_properties_cases_webhook: + description: Defines properties for connectors when type is `.cases-webhook`. type: object properties: - connectorId: + createCommentJson: + description: > + A JSON payload sent to the create comment URL to create a case + comment. You can use variables to add Kibana Cases data to the + payload. The required variable is `case.comment`. Due to Mustache + template variables (the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated once the Mustache variables have + been placed when the REST method runs. Manually ensure that the JSON + is valid, disregarding the Mustache variables, so the later + validation will pass. + example: '{"body": {{{case.comment}}}}' type: string - conversationId: + createCommentMethod: + default: put + description: > + The REST API HTTP request method to create a case comment in the + third-party system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put type: string - isStream: - type: boolean - langSmithApiKey: + createCommentUrl: + description: > + The REST API URL to create a case comment by ID in the third-party + system. You can use a variable to add the external system ID to the + URL. If you are using the `xpack.actions.allowedHosts setting`, add + the hostname to the allowed hosts. + example: 'https://example.com/issue/{{{external.system.id}}}/comment' + type: string + createIncidentJson: + description: > + A JSON payload sent to the create case URL to create a case. You can + use variables to add case data to the payload. Required variables + are `case.title` and `case.description`. Due to Mustache template + variables (which is the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated after the Mustache variables have + been placed when REST method runs. Manually ensure that the JSON is + valid to avoid future validation errors; disregard Mustache + variables during your review. + example: >- + {"fields": {"summary": {{{case.title}}},"description": + {{{case.description}}},"labels": {{{case.tags}}}}} type: string - langSmithProject: + createIncidentMethod: + default: post + description: > + The REST API HTTP request method to create a case in the third-party + system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put type: string - messages: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatMessage' - type: array - model: + createIncidentResponseKey: + description: >- + The JSON key in the create external case response that contains the + case ID. + type: string + createIncidentUrl: + description: > + The REST API URL to create a case in the third-party system. If you + are using the `xpack.actions.allowedHosts` setting, add the hostname + to the allowed hosts. + type: string + getIncidentResponseExternalTitleKey: + description: >- + The JSON key in get external case response that contains the case + title. + type: string + getIncidentUrl: + description: > + The REST API URL to get the case by ID from the third-party system. + If you are using the `xpack.actions.allowedHosts` setting, add the + hostname to the allowed hosts. You can use a variable to add the + external system ID to the URL. Due to Mustache template variables + (the text enclosed in triple braces, for example, + `{{{case.title}}}`), the JSON is not validated when you create the + connector. The JSON is validated after the Mustache variables have + been placed when REST method runs. Manually ensure that the JSON is + valid, disregarding the Mustache variables, so the later validation + will pass. + example: 'https://example.com/issue/{{{external.system.id}}}' type: string - persist: + hasAuth: + default: true + description: >- + If true, a username and password for login type authentication must + be provided. type: boolean - promptId: + headers: + description: > + A set of key-value pairs sent as headers with the request URLs for + the create case, update case, get case, and create comment methods. + type: string + updateIncidentJson: + description: > + The JSON payload sent to the update case URL to update the case. You + can use variables to add Kibana Cases data to the payload. Required + variables are `case.title` and `case.description`. Due to Mustache + template variables (which is the text enclosed in triple braces, for + example, `{{{case.title}}}`), the JSON is not validated when you + create the connector. The JSON is validated after the Mustache + variables have been placed when REST method runs. Manually ensure + that the JSON is valid to avoid future validation errors; disregard + Mustache variables during your review. + example: >- + {"fields": {"summary": {{{case.title}}},"description": + {{{case.description}}},"labels": {{{case.tags}}}}} + type: string + updateIncidentMethod: + default: put + description: > + The REST API HTTP request method to update the case in the + third-party system. Valid values are `patch`, `post`, and `put`. + enum: + - patch + - post + - put + type: string + updateIncidentUrl: + description: > + The REST API URL to update the case by ID in the third-party system. + You can use a variable to add the external system ID to the URL. If + you are using the `xpack.actions.allowedHosts` setting, add the + hostname to the allowed hosts. + example: 'https://example.com/issue/{{{external.system.ID}}}' type: string - responseLanguage: + viewIncidentUrl: + description: > + The URL to view the case in the external system. You can use + variables to add the external system ID or external system title to + the URL. + example: >- + https://testing-jira.atlassian.net/browse/{{{external.system.title}}} type: string required: - - messages - - persist - - connectorId - Security_AI_Assistant_API_ChatMessage: - description: AI assistant message. - type: object + - createIncidentJson + - createIncidentResponseKey + - createIncidentUrl + - getIncidentResponseExternalTitleKey + - getIncidentUrl + - updateIncidentJson + - updateIncidentUrl + - viewIncidentUrl + title: Connector request properties for Webhook - Case Management connector + Connectors_config_properties_d3security: + description: Defines properties for connectors when type is `.d3security`. properties: - content: - description: Message content. + url: + description: > + The D3 Security API request URL. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. type: string - data: - $ref: '#/components/schemas/Security_AI_Assistant_API_MessageData' - description: ECS object to attach to the context of the message. - fields_to_anonymize: - items: - type: string - type: array - role: - $ref: '#/components/schemas/Security_AI_Assistant_API_ChatMessageRole' - description: Message role. required: - - role - Security_AI_Assistant_API_ChatMessageRole: - description: Message role. - enum: - - system - - user - - assistant - type: string - Security_AI_Assistant_API_ConversationCategory: - description: The conversation category. - enum: - - assistant - - insights - type: string - Security_AI_Assistant_API_ConversationConfidence: - description: The conversation confidence. - enum: - - low - - medium - - high - type: string - Security_AI_Assistant_API_ConversationCreateProps: + - url + title: Connector request properties for a D3 Security connector + type: object + Connectors_config_properties_email: + description: Defines properties for connectors when type is `.email`. type: object properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. + clientId: + description: > + The client identifier, which is a part of OAuth 2.0 client + credentials authentication, in GUID format. If `service` is + `exchange_server`, this property is required. + nullable: true + type: string + from: + description: > + The from address for all emails sent by the connector. It must be + specified in `user@host-name` format. + type: string + hasAuth: + default: true + description: > + Specifies whether a user and password are required inside the + secrets configuration. type: boolean - id: - description: The conversation id. + host: + description: > + The host name of the service provider. If the `service` is + `elastic_cloud` (for Elastic Cloud notifications) or one of + Nodemailer's well-known email service providers, this property is + ignored. If `service` is `other`, this property must be defined. + type: string + oauthTokenUrl: + nullable: true type: string - isDefault: - description: Is default conversation. + port: + description: > + The port to connect to on the service provider. If the `service` is + `elastic_cloud` (for Elastic Cloud notifications) or one of + Nodemailer's well-known email service providers, this property is + ignored. If `service` is `other`, this property must be defined. + type: integer + secure: + description: > + Specifies whether the connection to the service provider will use + TLS. If the `service` is `elastic_cloud` (for Elastic Cloud + notifications) or one of Nodemailer's well-known email service + providers, this property is ignored. type: boolean - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - title: - description: The conversation title. + service: + description: | + The name of the email service. + enum: + - elastic_cloud + - exchange_server + - gmail + - other + - outlook365 + - ses + type: string + tenantId: + description: > + The tenant identifier, which is part of OAuth 2.0 client credentials + authentication, in GUID format. If `service` is `exchange_server`, + this property is required. + nullable: true type: string required: - - title - Security_AI_Assistant_API_ConversationResponse: - type: object + - from + title: Connector request properties for an email connector + Connectors_config_properties_gemini: + description: Defines properties for connectors when type is `.gemini`. properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - createdAt: - description: The last time conversation was updated. + apiUrl: + description: The Google Gemini request URL. type: string - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. - type: boolean - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - isDefault: - description: Is default conversation. - type: boolean - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - namespace: - description: Kibana space + defaultModel: + default: gemini-1.5-pro-001 + description: >- + The generative artificial intelligence model for Google Gemini to + use. type: string - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - summary: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationSummary' - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - title: - description: The conversation title. + gcpProjectID: + description: The Google ProjectID that has Vertex AI endpoint enabled. type: string - updatedAt: - description: The last time conversation was updated. + gcpRegion: + description: The GCP region where the Vertex AI endpoint enabled. type: string - users: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_User' - type: array required: - - id - - title - - createdAt - - users - - namespace - - category - Security_AI_Assistant_API_ConversationSummary: + - apiUrl + - gcpRegion + - gcpProjectID + title: Connector request properties for an Google Gemini connector type: object + Connectors_config_properties_genai: + description: Defines properties for connectors when type is `.gen-ai`. + discriminator: + mapping: + Azure OpenAI: '#/components/schemas/Connectors_config_properties_genai_azure' + OpenAI: '#/components/schemas/Connectors_config_properties_genai_openai' + propertyName: apiProvider + oneOf: + - $ref: '#/components/schemas/Connectors_config_properties_genai_azure' + - $ref: '#/components/schemas/Connectors_config_properties_genai_openai' + title: Connector request properties for an OpenAI connector + Connectors_config_properties_genai_azure: + description: > + Defines properties for connectors when type is `.gen-ai` and the API + provider is `Azure OpenAI'. properties: - confidence: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_ConversationConfidence - description: >- - How confident you are about this being a correct and useful - learning. - content: - description: Summary text of the conversation over time. + apiProvider: + description: The OpenAI API provider. + enum: + - Azure OpenAI type: string - public: - description: Define if summary is marked as publicly available. - type: boolean - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - description: The timestamp summary was updated. - Security_AI_Assistant_API_ConversationUpdateProps: - type: object - properties: - apiConfig: - $ref: '#/components/schemas/Security_AI_Assistant_API_ApiConfig' - description: LLM API configuration. - category: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationCategory' - description: The conversation category. - excludeFromLastConversationStorage: - description: excludeFromLastConversationStorage. - type: boolean - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - messages: - description: The conversation messages. - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_Message' - type: array - replacements: - $ref: '#/components/schemas/Security_AI_Assistant_API_Replacements' - summary: - $ref: '#/components/schemas/Security_AI_Assistant_API_ConversationSummary' - title: - description: The conversation title. + apiUrl: + description: The OpenAI API endpoint. type: string required: - - id - Security_AI_Assistant_API_FindAnonymizationFieldsSortField: - enum: - - created_at - - anonymized - - allowed - - field - - updated_at - type: string - Security_AI_Assistant_API_FindConversationsSortField: - enum: - - created_at - - is_default - - title - - updated_at - type: string - Security_AI_Assistant_API_FindPromptsSortField: - enum: - - created_at - - is_default - - name - - updated_at - type: string - Security_AI_Assistant_API_Message: - description: AI assistant conversation message. + - apiProvider + - apiUrl + title: >- + Connector request properties for an OpenAI connector that uses Azure + OpenAI type: object + Connectors_config_properties_genai_openai: + description: > + Defines properties for connectors when type is `.gen-ai` and the API + provider is `OpenAI'. properties: - content: - description: Message content. + apiProvider: + description: The OpenAI API provider. + enum: + - OpenAI + type: string + apiUrl: + description: The OpenAI API endpoint. + type: string + defaultModel: + description: The default model to use for requests. type: string - isError: - description: Is error message. - type: boolean - reader: - $ref: '#/components/schemas/Security_AI_Assistant_API_Reader' - description: Message content. - role: - $ref: '#/components/schemas/Security_AI_Assistant_API_MessageRole' - description: Message role. - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - description: The timestamp message was sent or received. - traceData: - $ref: '#/components/schemas/Security_AI_Assistant_API_TraceData' - description: trace Data required: - - timestamp - - content - - role - Security_AI_Assistant_API_MessageData: - additionalProperties: true + - apiProvider + - apiUrl + title: Connector request properties for an OpenAI connector type: object - Security_AI_Assistant_API_MessageRole: - description: Message role. - enum: - - system - - user - - assistant - type: string - Security_AI_Assistant_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_AI_Assistant_API_NormalizedAnonymizationFieldError: + Connectors_config_properties_index: + description: Defines properties for connectors when type is `.index`. type: object properties: - anonymization_fields: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_AnonymizationFieldDetailsInError - type: array - err_code: + executionTimeField: + default: null + description: A field that indicates when the document was indexed. + nullable: true type: string - message: + index: + description: The Elasticsearch index to be written to. type: string - status_code: - type: integer + refresh: + default: false + description: > + The refresh policy for the write request, which affects when changes + are made visible to search. Refer to the refresh setting for + Elasticsearch document APIs. + type: boolean required: - - message - - status_code - - anonymization_fields - Security_AI_Assistant_API_NormalizedPromptError: + - index + title: Connector request properties for an index connector + Connectors_config_properties_jira: + description: Defines properties for connectors when type is `.jira`. type: object properties: - err_code: + apiUrl: + description: The Jira instance URL. type: string - message: + projectKey: + description: The Jira project key. type: string - prompts: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptDetailsInError - type: array - status_code: - type: integer required: - - message - - status_code - - prompts - Security_AI_Assistant_API_PromptCreateProps: + - apiUrl + - projectKey + title: Connector request properties for a Jira connector + Connectors_config_properties_opsgenie: + description: Defines properties for connectors when type is `.opsgenie`. type: object properties: - categories: - items: - type: string - type: array - color: + apiUrl: + description: > + The Opsgenie URL. For example, `https://api.opsgenie.com` or + `https://api.eu.opsgenie.com`. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. type: string - consumer: + required: + - apiUrl + title: Connector request properties for an Opsgenie connector + Connectors_config_properties_pagerduty: + description: Defines properties for connectors when type is `.pagerduty`. + properties: + apiUrl: + description: The PagerDuty event URL. + example: 'https://events.pagerduty.com/v2/enqueue' + nullable: true type: string - content: + title: Connector request properties for a PagerDuty connector + type: object + Connectors_config_properties_resilient: + description: Defines properties for connectors when type is `.resilient`. + type: object + properties: + apiUrl: + description: The IBM Resilient instance URL. type: string - isDefault: - type: boolean - isNewConversationDefault: - type: boolean - name: + orgId: + description: The IBM Resilient organization ID. type: string - promptType: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptType' required: - - name - - content - - promptType - Security_AI_Assistant_API_PromptDetailsInError: + - apiUrl + - orgId + title: Connector request properties for a IBM Resilient connector + Connectors_config_properties_sentinelone: + description: Defines properties for connectors when type is `.sentinelone`. type: object properties: - id: - type: string - name: + url: + description: > + The SentinelOne tenant URL. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. type: string required: - - id - Security_AI_Assistant_API_PromptResponse: + - url + title: Connector request properties for a SentinelOne connector + Connectors_config_properties_servicenow: + description: Defines properties for connectors when type is `.servicenow`. type: object properties: - categories: - items: - type: string - type: array - color: - type: string - consumer: - type: string - content: - type: string - createdAt: + apiUrl: + description: The ServiceNow instance URL. type: string - createdBy: + clientId: + description: > + The client ID assigned to your OAuth application. This property is + required when `isOAuth` is `true`. type: string - id: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - isDefault: - type: boolean - isNewConversationDefault: + isOAuth: + default: false + description: > + The type of authentication to use. The default value is false, which + means basic authentication is used instead of open authorization + (OAuth). type: boolean - name: - type: string - namespace: - description: Kibana space - type: string - promptType: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptType' - timestamp: - $ref: '#/components/schemas/Security_AI_Assistant_API_NonEmptyString' - updatedAt: - type: string - updatedBy: - type: string - users: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_User' - type: array - required: - - id - - name - - promptType - - content - Security_AI_Assistant_API_PromptsBulkActionSkipReason: - enum: - - PROMPT_FIELD_NOT_MODIFIED - type: string - Security_AI_Assistant_API_PromptsBulkActionSkipResult: - type: object - properties: - id: + jwtKeyId: + description: > + The key identifier assigned to the JWT verifier map of your OAuth + application. This property is required when `isOAuth` is `true`. type: string - name: + userIdentifierValue: + description: > + The identifier to use for OAuth authentication. This identifier + should be the user field you selected when you created an OAuth JWT + API endpoint for external clients in your ServiceNow instance. For + example, if the selected user field is `Email`, the user identifier + should be the user's email address. This property is required when + `isOAuth` is `true`. type: string - skip_reason: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkActionSkipReason + usesTableApi: + default: true + description: > + Determines whether the connector uses the Table API or the Import + Set API. This property is supported only for ServiceNow ITSM and + ServiceNow SecOps connectors. NOTE: If this property is set to + `false`, the Elastic application should be installed in ServiceNow. + type: boolean required: - - id - - skip_reason - Security_AI_Assistant_API_PromptsBulkCrudActionResponse: + - apiUrl + title: Connector request properties for a ServiceNow ITSM connector + Connectors_config_properties_servicenow_itom: + description: Defines properties for connectors when type is `.servicenow`. type: object properties: - attributes: - type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_NormalizedPromptError - type: array - results: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkCrudActionResults - summary: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_BulkCrudActionSummary - required: - - results - - summary - message: + apiUrl: + description: The ServiceNow instance URL. type: string - prompts_count: - type: integer - status_code: - type: integer - success: + clientId: + description: > + The client ID assigned to your OAuth application. This property is + required when `isOAuth` is `true`. + type: string + isOAuth: + default: false + description: > + The type of authentication to use. The default value is false, which + means basic authentication is used instead of open authorization + (OAuth). type: boolean + jwtKeyId: + description: > + The key identifier assigned to the JWT verifier map of your OAuth + application. This property is required when `isOAuth` is `true`. + type: string + userIdentifierValue: + description: > + The identifier to use for OAuth authentication. This identifier + should be the user field you selected when you created an OAuth JWT + API endpoint for external clients in your ServiceNow instance. For + example, if the selected user field is `Email`, the user identifier + should be the user's email address. This property is required when + `isOAuth` is `true`. + type: string required: - - attributes - Security_AI_Assistant_API_PromptsBulkCrudActionResults: - type: object + - apiUrl + title: Connector request properties for a ServiceNow ITSM connector + Connectors_config_properties_slack_api: + description: Defines properties for connectors when type is `.slack_api`. properties: - created: - items: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptResponse' - type: array - deleted: - items: - type: string - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_AI_Assistant_API_PromptsBulkActionSkipResult - type: array - updated: + allowedChannels: + description: A list of valid Slack channels. items: - $ref: '#/components/schemas/Security_AI_Assistant_API_PromptResponse' + maxItems: 25 + type: object + properties: + id: + description: The Slack channel ID. + example: C123ABC456 + minLength: 1 + type: string + name: + description: The Slack channel name. + minLength: 1 + type: string + required: + - id + - name type: array - required: - - updated - - created - - deleted - - skipped - Security_AI_Assistant_API_PromptType: - description: Prompt type - enum: - - system - - quick - type: string - Security_AI_Assistant_API_PromptUpdateProps: + title: Connector request properties for a Slack connector + type: object + Connectors_config_properties_swimlane: + description: Defines properties for connectors when type is `.swimlane`. type: object properties: - categories: - items: - type: string - type: array - color: + apiUrl: + description: The Swimlane instance URL. type: string - consumer: + appId: + description: The Swimlane application ID. type: string - content: + connectorType: + description: >- + The type of connector. Valid values are `all`, `alerts`, and + `cases`. + enum: + - all + - alerts + - cases type: string - id: + mappings: + description: The field mapping. + properties: + alertIdConfig: + description: Mapping for the alert ID. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Alert identifier mapping + type: object + caseIdConfig: + description: Mapping for the case ID. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case identifier mapping + type: object + caseNameConfig: + description: Mapping for the case name. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case name mapping + type: object + commentsConfig: + description: Mapping for the case comments. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case comment mapping + type: object + descriptionConfig: + description: Mapping for the case description. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Case description mapping + type: object + ruleNameConfig: + description: Mapping for the name of the alert's rule. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Rule name mapping + type: object + severityConfig: + description: Mapping for the severity. + properties: + fieldType: + description: The type of field in Swimlane. + type: string + id: + description: The identifier for the field in Swimlane. + type: string + key: + description: The key for the field in Swimlane. + type: string + name: + description: The name of the field in Swimlane. + type: string + required: + - fieldType + - id + - key + - name + title: Severity mapping + type: object + title: Connector mappings properties for a Swimlane connector + type: object + required: + - apiUrl + - appId + - connectorType + title: Connector request properties for a Swimlane connector + Connectors_config_properties_tines: + description: Defines properties for connectors when type is `.tines`. + properties: + url: + description: > + The Tines tenant URL. If you are using the + `xpack.actions.allowedHosts` setting, make sure this hostname is + added to the allowed hosts. type: string - isDefault: - type: boolean - isNewConversationDefault: - type: boolean required: - - id - Security_AI_Assistant_API_Provider: - description: Provider - enum: - - OpenAI - - Azure OpenAI - type: string - Security_AI_Assistant_API_Reader: - additionalProperties: true - type: object - Security_AI_Assistant_API_Replacements: - additionalProperties: - type: string - description: Replacements object used to anonymize/deanomymize messsages - type: object - Security_AI_Assistant_API_SortOrder: - enum: - - asc - - desc - type: string - Security_AI_Assistant_API_TraceData: - description: trace Data + - url + title: Connector request properties for a Tines connector type: object + Connectors_config_properties_torq: + description: Defines properties for connectors when type is `.torq`. properties: - traceId: - description: 'Could be any string, not necessarily a UUID' - type: string - transactionId: - description: 'Could be any string, not necessarily a UUID' + webhookIntegrationUrl: + description: The endpoint URL of the Elastic Security integration in Torq. type: string - Security_AI_Assistant_API_User: - description: 'Could be any string, not necessarily a UUID' + required: + - webhookIntegrationUrl + title: Connector request properties for a Torq connector type: object + Connectors_config_properties_webhook: + description: Defines properties for connectors when type is `.webhook`. properties: - id: - description: User id + authType: + description: | + The type of authentication to use: basic, SSL, or none. + enum: + - webhook-authentication-basic + - webhook-authentication-ssl + nullable: true type: string - name: - description: User name + ca: + description: > + A base64 encoded version of the certificate authority file that the + connector can trust to sign and validate certificates. This option + is available for all authentication types. type: string - Security_Solution_Detections_API_AlertAssignees: - type: object - properties: - add: - description: A list of users ids to assign. - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array - remove: - description: A list of users ids to unassign. - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: array - required: - - add - - remove - Security_Solution_Detections_API_AlertIds: - description: A list of alerts ids. - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - minItems: 1 - type: array - Security_Solution_Detections_API_AlertsIndex: - deprecated: true - description: (deprecated) Has no effect. - type: string - Security_Solution_Detections_API_AlertsIndexMigrationError: - type: object - properties: - error: - type: object - properties: - message: - type: string - status_code: - type: string - required: - - message - - status_code - index: + certType: + description: > + If the `authType` is `webhook-authentication-ssl`, specifies whether + the certificate authentication data is in a CRT and key file format + or a PFX file format. + enum: + - ssl-crt-key + - ssl-pfx type: string - required: - - index - - error - Security_Solution_Detections_API_AlertsIndexMigrationSuccess: - type: object - properties: - index: + hasAuth: + description: > + If `true`, a user name and password must be provided for login type + authentication. + type: boolean + headers: + description: A set of key-value pairs sent as headers with the request. + nullable: true + type: object + method: + default: post + description: | + The HTTP request method, either `post` or `put`. + enum: + - post + - put type: string - migration_id: + url: + description: > + The request URL. If you are using the `xpack.actions.allowedHosts` + setting, add the hostname to the allowed hosts. type: string - migration_index: + verificationMode: + default: full + description: > + Controls the verification of certificates. Use `full` to validate + that the certificate has an issue date within the `not_before` and + `not_after` dates, chains to a trusted certificate authority (CA), + and has a hostname or IP address that matches the names within the + certificate. Use `certificate` to validate the certificate and + verify that it is signed by a trusted authority; this option does + not check the certificate hostname. Use `none` to skip certificate + validation. + enum: + - certificate + - full + - none type: string - required: - - index - - migration_id - - migration_index - Security_Solution_Detections_API_AlertsIndexNamespace: - description: Has no effect. - type: string - Security_Solution_Detections_API_AlertsReindexOptions: + title: Connector request properties for a Webhook connector type: object + Connectors_config_properties_xmatters: + description: Defines properties for connectors when type is `.xmatters`. properties: - requests_per_second: - minimum: 1 - type: integer - size: - minimum: 1 - type: integer - slices: - minimum: 1 - type: integer - Security_Solution_Detections_API_AlertsSort: + configUrl: + description: > + The request URL for the Elastic Alerts trigger in xMatters. It is + applicable only when `usesBasic` is `true`. + nullable: true + type: string + usesBasic: + default: true + description: >- + Specifies whether the connector uses HTTP basic authentication + (`true`) or URL authentication (`false`). + type: boolean + title: Connector request properties for an xMatters connector + type: object + Connectors_connector_response_properties: + description: The properties vary depending on the connector type. + discriminator: + mapping: + .bedrock: >- + #/components/schemas/Connectors_connector_response_properties_bedrock + .cases-webhook: >- + #/components/schemas/Connectors_connector_response_properties_cases_webhook + .d3security: >- + #/components/schemas/Connectors_connector_response_properties_d3security + .email: '#/components/schemas/Connectors_connector_response_properties_email' + .gemini: '#/components/schemas/Connectors_connector_response_properties_gemini' + .gen-ai: '#/components/schemas/Connectors_connector_response_properties_genai' + .index: '#/components/schemas/Connectors_connector_response_properties_index' + .jira: '#/components/schemas/Connectors_connector_response_properties_jira' + .opsgenie: >- + #/components/schemas/Connectors_connector_response_properties_opsgenie + .pagerduty: >- + #/components/schemas/Connectors_connector_response_properties_pagerduty + .resilient: >- + #/components/schemas/Connectors_connector_response_properties_resilient + .sentinelone: >- + #/components/schemas/Connectors_connector_response_properties_sentinelone + .server-log: >- + #/components/schemas/Connectors_connector_response_properties_serverlog + .servicenow: >- + #/components/schemas/Connectors_connector_response_properties_servicenow + .servicenow-itom: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_itom + .servicenow-sir: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_sir + .slack: >- + #/components/schemas/Connectors_connector_response_properties_slack_webhook + .slack_api: >- + #/components/schemas/Connectors_connector_response_properties_slack_api + .swimlane: >- + #/components/schemas/Connectors_connector_response_properties_swimlane + .teams: '#/components/schemas/Connectors_connector_response_properties_teams' + .tines: '#/components/schemas/Connectors_connector_response_properties_tines' + .torq: '#/components/schemas/Connectors_connector_response_properties_torq' + .webhook: >- + #/components/schemas/Connectors_connector_response_properties_webhook + .xmatters: >- + #/components/schemas/Connectors_connector_response_properties_xmatters + propertyName: connector_type_id oneOf: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations - - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsSortCombinations - type: array - Security_Solution_Detections_API_AlertsSortCombinations: - anyOf: - - type: string - - additionalProperties: true - type: object - Security_Solution_Detections_API_AlertStatus: - enum: - - open - - closed - - acknowledged - - in-progress - type: string - Security_Solution_Detections_API_AlertSuppression: + #/components/schemas/Connectors_connector_response_properties_bedrock + - $ref: '#/components/schemas/Connectors_connector_response_properties_gemini' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_cases_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_d3security + - $ref: '#/components/schemas/Connectors_connector_response_properties_email' + - $ref: '#/components/schemas/Connectors_connector_response_properties_genai' + - $ref: '#/components/schemas/Connectors_connector_response_properties_index' + - $ref: '#/components/schemas/Connectors_connector_response_properties_jira' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_opsgenie + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_pagerduty + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_resilient + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_sentinelone + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_serverlog + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_itom + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_servicenow_sir + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_slack_api + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_slack_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_swimlane + - $ref: '#/components/schemas/Connectors_connector_response_properties_teams' + - $ref: '#/components/schemas/Connectors_connector_response_properties_tines' + - $ref: '#/components/schemas/Connectors_connector_response_properties_torq' + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_webhook + - $ref: >- + #/components/schemas/Connectors_connector_response_properties_xmatters + title: Connector response properties + Connectors_connector_response_properties_bedrock: + title: Connector response properties for an Amazon Bedrock connector type: object properties: - duration: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration - group_by: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionGroupBy - missing_fields_strategy: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' + connector_type_id: + description: The type of connector. + enum: + - .bedrock + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string required: - - group_by - Security_Solution_Detections_API_AlertSuppressionDuration: + - config + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_cases_webhook: + title: Connector request properties for a Webhook - Case Management connector type: object properties: - unit: + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + connector_type_id: + description: The type of connector. enum: - - s - - m - - h + - .cases-webhook type: string - value: - minimum: 1 - type: integer + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - value - - unit - Security_Solution_Detections_API_AlertSuppressionGroupBy: - items: - type: string - maxItems: 3 - minItems: 1 - type: array - Security_Solution_Detections_API_AlertSuppressionMissingFieldsStrategy: - description: >- - Describes how alerts will be generated for documents with missing - suppress by fields: - - doNotSuppress - per each document a separate alert will be created - - suppress - only alert will be created per suppress by bucket - enum: - - doNotSuppress - - suppress - type: string - Security_Solution_Detections_API_AlertTag: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_AlertTags: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTag' - type: array - Security_Solution_Detections_API_AlertVersion: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_d3security: + title: Connector response properties for a D3 Security connector type: object properties: - count: - type: integer - version: - type: integer + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + connector_type_id: + description: The type of connector. + enum: + - .d3security + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - version - - count - Security_Solution_Detections_API_AnomalyThreshold: - description: Anomaly threshold - minimum: 0 - type: integer - Security_Solution_Detections_API_BuildingBlockType: - description: >- - Determines if the rule acts as a building block. By default, - building-block alerts are not displayed in the UI. These rules are used - as a foundation for other rules that do generate alerts. Its value must - be default. - type: string - Security_Solution_Detections_API_BulkActionEditPayload: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTags - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadTimeline - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadRuleActions - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayloadSchedule - Security_Solution_Detections_API_BulkActionEditPayloadIndexPatterns: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_email: + title: Connector response properties for an email connector type: object properties: - overwrite_data_views: - type: boolean - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_email' + connector_type_id: + description: The type of connector. enum: - - add_index_patterns - - delete_index_patterns - - set_index_patterns + - .email type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadInvestigationFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_gemini: + title: Connector response properties for a Google Gemini connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' + connector_type_id: + description: The type of connector. enum: - - add_investigation_fields - - delete_investigation_fields - - set_investigation_fields + - .gemini type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadRuleActions: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_genai: + title: Connector response properties for an OpenAI connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_genai' + connector_type_id: + description: The type of connector. enum: - - add_rule_actions - - set_rule_actions + - .gen-ai type: string - value: - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleAction - type: array - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThrottleForBulkActions - required: - - actions + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadSchedule: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_index: + title: Connector response properties for an index connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + connector_type_id: + description: The type of connector. enum: - - set_schedule + - .index type: string - value: - type: object - properties: - interval: - description: >- - Interval in which the rule runs. For example, `"1h"` means the - rule runs every hour. - example: 1h - pattern: '^[1-9]\d*[smh]$' - type: string - lookback: - description: Lookback time for the rule - example: 1h - pattern: '^[1-9]\d*[smh]$' - type: string - required: - - interval - - lookback + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadTags: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_jira: + title: Connector response properties for a Jira connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' + connector_type_id: + description: The type of connector. enum: - - add_tags - - delete_tags - - set_tags + - .jira + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleTagArray' + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - value - Security_Solution_Detections_API_BulkActionEditPayloadTimeline: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_opsgenie: + title: Connector response properties for an Opsgenie connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + connector_type_id: + description: The type of connector. enum: - - set_timeline + - .opsgenie type: string - value: - type: object - properties: - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - required: - - timeline_id - - timeline_title - required: - - type - - value - Security_Solution_Detections_API_BulkActionsDryRunErrCode: - enum: - - IMMUTABLE - - MACHINE_LEARNING_AUTH - - MACHINE_LEARNING_INDEX_PATTERN - - ESQL_INDEX_PATTERN - - MANUAL_RULE_RUN_FEATURE - - MANUAL_RULE_RUN_DISABLED_RULE - type: string - Security_Solution_Detections_API_BulkActionSkipResult: - type: object - properties: id: + description: The identifier for the connector. type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' name: + description: The display name for the connector. type: string - skip_reason: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditSkipReason + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: + - connector_type_id - id - - skip_reason - Security_Solution_Detections_API_BulkCrudRulesResponse: - items: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ErrorSchema' - type: array - Security_Solution_Detections_API_BulkDeleteRules: + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_pagerduty: + title: Connector response properties for a PagerDuty connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + connector_type_id: + description: The type of connector. enum: - - delete + - .pagerduty type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - Security_Solution_Detections_API_BulkDisableRules: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_resilient: + title: Connector response properties for a IBM Resilient connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + connector_type_id: + description: The type of connector. enum: - - disable + - .resilient type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - Security_Solution_Detections_API_BulkDuplicateRules: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_sentinelone: + title: Connector response properties for a SentinelOne connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + connector_type_id: + description: The type of connector. enum: - - duplicate + - .sentinelone type: string - duplicate: - type: object - properties: - include_exceptions: - description: Whether to copy exceptions from the original rule - type: boolean - include_expired_exceptions: - description: Whether to copy expired exceptions from the original rule - type: boolean - required: - - include_exceptions - - include_expired_exceptions - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - Security_Solution_Detections_API_BulkEditActionResponse: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_serverlog: + title: Connector response properties for a server log connector type: object properties: - attributes: + config: + nullable: true type: object - properties: - errors: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NormalizedRuleError - type: array - results: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionResults - summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkEditActionSummary - required: - - results - - summary - message: + connector_type_id: + description: The type of connector. + enum: + - .server-log type: string - rules_count: - type: integer - status_code: - type: integer - success: - type: boolean - required: - - attributes - Security_Solution_Detections_API_BulkEditActionResults: - type: object - properties: - created: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - deleted: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - skipped: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionSkipResult - type: array - updated: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleResponse' - type: array - required: - - updated - - created - - deleted - - skipped - Security_Solution_Detections_API_BulkEditActionSummary: - type: object - properties: - failed: - type: integer - skipped: - type: integer - succeeded: - type: integer - total: - type: integer + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - failed - - skipped - - succeeded - - total - Security_Solution_Detections_API_BulkEditRules: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow: + title: Connector response properties for a ServiceNow ITSM connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - edit + - .servicenow type: string - edit: - description: Array of objects containing the edit operations - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionEditPayload - minItems: 1 - type: array - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - - edit - Security_Solution_Detections_API_BulkEditSkipReason: - enum: - - RULE_NOT_MODIFIED - type: string - Security_Solution_Detections_API_BulkEnableRules: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow_itom: + title: Connector response properties for a ServiceNow ITOM connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + connector_type_id: + description: The type of connector. enum: - - enable + - .servicenow-itom type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - Security_Solution_Detections_API_BulkExportActionResponse: - type: string - Security_Solution_Detections_API_BulkExportRules: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_servicenow_sir: + title: Connector response properties for a ServiceNow SecOps connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - export + - .servicenow-sir type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - Security_Solution_Detections_API_BulkManualRuleRun: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_slack_api: + title: Connector response properties for a Slack connector type: object properties: - action: + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + connector_type_id: + description: The type of connector. enum: - - run + - .slack_api type: string - ids: - description: Array of rule IDs - items: - type: string - minItems: 1 - type: array - query: - description: Query to filter rules + id: + description: The identifier for the connector. type: string - run: - type: object - properties: - end_date: - description: End date of the manual rule run - type: string - start_date: - description: Start date of the manual rule run - type: string - required: - - start_date + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action - - run - Security_Solution_Detections_API_ConcurrentSearches: - minimum: 1 - type: integer - Security_Solution_Detections_API_DataViewId: - type: string - Security_Solution_Detections_API_DefaultParams: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_slack_webhook: + title: Connector response properties for a Slack connector type: object properties: - command: + connector_type_id: + description: The type of connector. enum: - - isolate + - .slack type: string - comment: + id: + description: The identifier for the connector. type: string - required: - - command - Security_Solution_Detections_API_EcsMapping: - additionalProperties: - type: object - properties: - field: - type: string - value: - oneOf: - - type: string - - items: - type: string - type: array - type: object - Security_Solution_Detections_API_EndpointResponseAction: - type: object - properties: - action_type_id: - enum: - - .endpoint + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string - params: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_DefaultParams - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ProcessesParams + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - action_type_id - - params - Security_Solution_Detections_API_EqlOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - event_category_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EventCategoryOverride - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - tiebreaker_field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TiebreakerField - timestamp_field: - $ref: '#/components/schemas/Security_Solution_Detections_API_TimestampField' - Security_Solution_Detections_API_EqlQueryLanguage: - enum: - - eql - type: string - Security_Solution_Detections_API_EqlRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_swimlane: + title: Connector response properties for a Swimlane connector type: object properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage - description: Query language to use - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: EQL query to execute - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + connector_type_id: + description: The type of connector. enum: - - eql + - .swimlane type: string - required: - - type - - query - - language - Security_Solution_Detections_API_EqlRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleResponseFields - Security_Solution_Detections_API_EqlRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_EqlRulePatchFields: - allOf: - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlQueryLanguage - description: Query language to use - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: EQL query to execute - type: - description: Rule type - enum: - - eql - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchFields - Security_Solution_Detections_API_EqlRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlOptionalFields - Security_Solution_Detections_API_EqlRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateFields - Security_Solution_Detections_API_ErrorSchema: - additionalProperties: false + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' + required: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_teams: + title: Connector response properties for a Microsoft Teams connector type: object properties: - error: + config: type: object - properties: - message: - type: string - status_code: - minimum: 400 - type: integer - required: - - status_code - - message - id: + connector_type_id: + description: The type of connector. + enum: + - .teams type: string - item_id: - minLength: 1 + id: + description: The identifier for the connector. type: string - list_id: - minLength: 1 + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - error - Security_Solution_Detections_API_EsqlQueryLanguage: - enum: - - esql - type: string - Security_Solution_Detections_API_EsqlRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleResponseFields - Security_Solution_Detections_API_EsqlRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EsqlRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_EsqlRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: ESQL query to execute - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - type: - description: Rule type - enum: - - esql - type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - Security_Solution_Detections_API_EsqlRuleRequiredFields: + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_tines: + title: Connector response properties for a Tines connector type: object properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - description: ESQL query to execute - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' + connector_type_id: + description: The type of connector. enum: - - esql + - .tines + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - language - - query - Security_Solution_Detections_API_EsqlRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleRequiredFields - Security_Solution_Detections_API_EsqlRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateFields - Security_Solution_Detections_API_EventCategoryOverride: - type: string - Security_Solution_Detections_API_ExceptionListType: - description: The exception type - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Detections_API_ExternalRuleSource: - description: >- - Type of rule source for externally sourced rules, i.e. rules that have - an external source, such as the Elastic Prebuilt rules repo. + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_torq: + title: Connector response properties for a Torq connector type: object properties: - is_customized: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsExternalRuleCustomized - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + connector_type_id: + description: The type of connector. enum: - - external + - .torq + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - - is_customized - Security_Solution_Detections_API_FindRulesSortField: - enum: - - created_at - - createdAt - - enabled - - execution_summary.last_execution.date - - execution_summary.last_execution.metrics.execution_gap_duration_s - - execution_summary.last_execution.metrics.total_indexing_duration_ms - - execution_summary.last_execution.metrics.total_search_duration_ms - - execution_summary.last_execution.status + - connector_type_id + - id + - is_deprecated + - is_preconfigured - name - - risk_score - - riskScore - - severity - - updated_at - - updatedAt - type: string - Security_Solution_Detections_API_HistoryWindowStart: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - Security_Solution_Detections_API_IndexMigrationStatus: + Connectors_connector_response_properties_webhook: + title: Connector response properties for a Webhook connector type: object properties: - index: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - is_outdated: - type: boolean - migrations: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MigrationStatus - type: array - signal_versions: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertVersion' - type: array - version: - type: integer + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + connector_type_id: + description: The type of connector. + enum: + - .webhook + type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - index - - version - - signal_versions - - migrations - - is_outdated - Security_Solution_Detections_API_IndexPatternArray: - items: - type: string - type: array - Security_Solution_Detections_API_InternalRuleSource: - description: >- - Type of rule source for internally sourced rules, i.e. created within - the Kibana apps. + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_response_properties_xmatters: + title: Connector response properties for an xMatters connector type: object properties: - type: + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + connector_type_id: + description: The type of connector. enum: - - internal + - .xmatters type: string + id: + description: The identifier for the connector. + type: string + is_deprecated: + $ref: '#/components/schemas/Connectors_is_deprecated' + is_missing_secrets: + $ref: '#/components/schemas/Connectors_is_missing_secrets' + is_preconfigured: + $ref: '#/components/schemas/Connectors_is_preconfigured' + is_system_action: + $ref: '#/components/schemas/Connectors_is_system_action' + name: + description: The display name for the connector. + type: string + referenced_by_count: + $ref: '#/components/schemas/Connectors_referenced_by_count' required: - - type - Security_Solution_Detections_API_InvestigationFields: - description: > - Schema for fields relating to investigation fields. These are user - defined fields we use to highlight - - in various features in the UI such as alert details flyout and - exceptions auto-population from alert. - - Added in PR #163235 - - Right now we only have a single field but anticipate adding more related - fields to store various - - configuration states such as `override` - where a user might say if they - want only these fields to - - display, or if they want these fields + the fields we select. When - expanding this field, it may look - - something like: - - ```typescript - - const investigationFields = z.object({ - field_names: NonEmptyArray(NonEmptyString), - override: z.boolean().optional(), - }); - - ``` - type: object - properties: - field_names: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - minItems: 1 - type: array - required: - - field_names - Security_Solution_Detections_API_InvestigationGuide: - description: Notes to help investigate alerts produced by the rule. - type: string - Security_Solution_Detections_API_IsExternalRuleCustomized: - description: >- - Determines whether an external/prebuilt rule has been customized by the - user (i.e. any of its fields have been modified and diverged from the - base value). - type: boolean - Security_Solution_Detections_API_IsRuleEnabled: - description: Determines whether the rule is enabled. - type: boolean - Security_Solution_Detections_API_IsRuleImmutable: - deprecated: true + - connector_type_id + - id + - is_deprecated + - is_preconfigured + - name + Connectors_connector_types: description: >- - This field determines whether the rule is a prebuilt Elastic rule. It - will be replaced with the `rule_source` field. - type: boolean - Security_Solution_Detections_API_ItemsPerSearch: - minimum: 1 - type: integer - Security_Solution_Detections_API_KqlQueryLanguage: + The type of connector. For example, `.email`, `.index`, `.jira`, + `.opsgenie`, or `.server-log`. enum: - - kuery - - lucene + - .bedrock + - .gemini + - .cases-webhook + - .d3security + - .email + - .gen-ai + - .index + - .jira + - .opsgenie + - .pagerduty + - .resilient + - .sentinelone + - .servicenow + - .servicenow-itom + - .servicenow-sir + - .server-log + - .slack + - .slack_api + - .swimlane + - .teams + - .tines + - .torq + - .webhook + - .xmatters + example: .server-log + title: Connector types type: string - Security_Solution_Detections_API_MachineLearningJobId: - description: Machine learning job ID + Connectors_create_connector_request: + description: The properties vary depending on the connector type. + discriminator: + mapping: + .bedrock: '#/components/schemas/Connectors_create_connector_request_bedrock' + .cases-webhook: >- + #/components/schemas/Connectors_create_connector_request_cases_webhook + .d3security: '#/components/schemas/Connectors_create_connector_request_d3security' + .email: '#/components/schemas/Connectors_create_connector_request_email' + .gemini: '#/components/schemas/Connectors_create_connector_request_gemini' + .gen-ai: '#/components/schemas/Connectors_create_connector_request_genai' + .index: '#/components/schemas/Connectors_create_connector_request_index' + .jira: '#/components/schemas/Connectors_create_connector_request_jira' + .opsgenie: '#/components/schemas/Connectors_create_connector_request_opsgenie' + .pagerduty: '#/components/schemas/Connectors_create_connector_request_pagerduty' + .resilient: '#/components/schemas/Connectors_create_connector_request_resilient' + .sentinelone: '#/components/schemas/Connectors_create_connector_request_sentinelone' + .server-log: '#/components/schemas/Connectors_create_connector_request_serverlog' + .servicenow: '#/components/schemas/Connectors_create_connector_request_servicenow' + .servicenow-itom: >- + #/components/schemas/Connectors_create_connector_request_servicenow_itom + .servicenow-sir: >- + #/components/schemas/Connectors_create_connector_request_servicenow_sir + .slack: >- + #/components/schemas/Connectors_create_connector_request_slack_webhook + .slack_api: '#/components/schemas/Connectors_create_connector_request_slack_api' + .swimlane: '#/components/schemas/Connectors_create_connector_request_swimlane' + .teams: '#/components/schemas/Connectors_create_connector_request_teams' + .tines: '#/components/schemas/Connectors_create_connector_request_tines' + .torq: '#/components/schemas/Connectors_create_connector_request_torq' + .webhook: '#/components/schemas/Connectors_create_connector_request_webhook' + .xmatters: '#/components/schemas/Connectors_create_connector_request_xmatters' + propertyName: connector_type_id oneOf: - - type: string - - items: - type: string - minItems: 1 - type: array - Security_Solution_Detections_API_MachineLearningRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' + - $ref: '#/components/schemas/Connectors_create_connector_request_bedrock' + - $ref: '#/components/schemas/Connectors_create_connector_request_gemini' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleResponseFields - Security_Solution_Detections_API_MachineLearningRuleCreateFields: - allOf: + #/components/schemas/Connectors_create_connector_request_cases_webhook + - $ref: '#/components/schemas/Connectors_create_connector_request_d3security' + - $ref: '#/components/schemas/Connectors_create_connector_request_email' + - $ref: '#/components/schemas/Connectors_create_connector_request_genai' + - $ref: '#/components/schemas/Connectors_create_connector_request_index' + - $ref: '#/components/schemas/Connectors_create_connector_request_jira' + - $ref: '#/components/schemas/Connectors_create_connector_request_opsgenie' + - $ref: '#/components/schemas/Connectors_create_connector_request_pagerduty' + - $ref: '#/components/schemas/Connectors_create_connector_request_resilient' + - $ref: '#/components/schemas/Connectors_create_connector_request_sentinelone' + - $ref: '#/components/schemas/Connectors_create_connector_request_serverlog' + - $ref: '#/components/schemas/Connectors_create_connector_request_servicenow' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields + #/components/schemas/Connectors_create_connector_request_servicenow_itom - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity + #/components/schemas/Connectors_create_connector_request_servicenow_sir + - $ref: '#/components/schemas/Connectors_create_connector_request_slack_api' - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MachineLearningRuleOptionalFields: - type: object + #/components/schemas/Connectors_create_connector_request_slack_webhook + - $ref: '#/components/schemas/Connectors_create_connector_request_swimlane' + - $ref: '#/components/schemas/Connectors_create_connector_request_teams' + - $ref: '#/components/schemas/Connectors_create_connector_request_tines' + - $ref: '#/components/schemas/Connectors_create_connector_request_torq' + - $ref: '#/components/schemas/Connectors_create_connector_request_webhook' + - $ref: '#/components/schemas/Connectors_create_connector_request_xmatters' + title: Create connector request body properties + Connectors_create_connector_request_bedrock: + description: >- + The Amazon Bedrock connector uses axios to send a POST request to Amazon + Bedrock. properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - Security_Solution_Detections_API_MachineLearningRulePatchFields: - allOf: - - type: object - properties: - anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold - machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId - type: - description: Rule type - enum: - - machine_learning - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchFields - Security_Solution_Detections_API_MachineLearningRuleRequiredFields: + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' + connector_type_id: + description: The type of connector. + enum: + - .bedrock + example: .bedrock + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' + required: + - config + - connector_type_id + - name + - secrets + title: Create Amazon Bedrock connector request type: object + Connectors_create_connector_request_cases_webhook: + description: > + The Webhook - Case Management connector uses axios to send POST, PUT, + and GET requests to a case management RESTful API web service. properties: - anomaly_threshold: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AnomalyThreshold - machine_learning_job_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningJobId - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + connector_type_id: + description: The type of connector. enum: - - machine_learning + - .cases-webhook + example: .cases-webhook + type: string + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' required: - - type - - machine_learning_job_id - - anomaly_threshold - Security_Solution_Detections_API_MachineLearningRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleOptionalFields - Security_Solution_Detections_API_MachineLearningRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateFields - Security_Solution_Detections_API_MaxSignals: - minimum: 1 - type: integer - Security_Solution_Detections_API_MigrationCleanupResult: + - config + - connector_type_id + - name + title: Create Webhook - Case Managment connector request type: object + Connectors_create_connector_request_d3security: + description: > + The connector uses axios to send a POST request to a D3 Security + endpoint. properties: - destinationIndex: - type: string - error: - type: object - properties: - message: - type: string - status_code: - type: integer - required: - - message - - status_code - id: - type: string - sourceIndex: - type: string - status: + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + connector_type_id: + description: The type of connector. enum: - - success - - failure - - pending - type: string - updated: - format: date-time + - .d3security + example: .d3security type: string - version: + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_d3security' required: - - id - - destinationIndex - - status - - sourceIndex - - version - - updated - Security_Solution_Detections_API_MigrationFinalizationResult: + - config + - connector_type_id + - name + - secrets + title: Create D3 Security connector request type: object + Connectors_create_connector_request_email: + description: > + The email connector uses the SMTP protocol to send mail messages, using + an integration of Nodemailer. An exception is Microsoft Exchange, which + uses HTTP protocol for sending emails, Send mail. Email message text is + sent as both plain text and html text. properties: - completed: - type: boolean - destinationIndex: - type: string - error: - type: object - properties: - message: - type: string - status_code: - type: integer - required: - - message - - status_code - id: - type: string - sourceIndex: - type: string - status: + config: + $ref: '#/components/schemas/Connectors_config_properties_email' + connector_type_id: + description: The type of connector. enum: - - success - - failure - - pending - type: string - updated: - format: date-time + - .email + example: .email type: string - version: + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_email' required: - - id - - completed - - destinationIndex - - status - - sourceIndex - - version - - updated - Security_Solution_Detections_API_MigrationStatus: + - config + - connector_type_id + - name + - secrets + title: Create email connector request type: object + Connectors_create_connector_request_gemini: + description: >- + The Google Gemini connector uses axios to send a POST request to Google + Gemini. properties: - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - status: + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' + connector_type_id: + description: The type of connector. enum: - - success - - failure - - pending + - .gemini + example: .gemini type: string - updated: - format: date-time + name: + description: The display name for the connector. + example: my-connector type: string - version: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_gemini' required: - - id - - status - - version - - updated - Security_Solution_Detections_API_NewTermsFields: - items: - type: string - maxItems: 3 - minItems: 1 - type: array - Security_Solution_Detections_API_NewTermsRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleResponseFields - Security_Solution_Detections_API_NewTermsRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NewTermsRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_NewTermsRuleOptionalFields: + - config + - connector_type_id + - name + - secrets + title: Create Google Gemini connector request type: object + Connectors_create_connector_request_genai: + description: > + The OpenAI connector uses axios to send a POST request to either OpenAI + or Azure OpenAPI. properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - Security_Solution_Detections_API_NewTermsRulePatchFields: - allOf: - - type: object - properties: - history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart - new_terms_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsFields - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - type: - description: Rule type - enum: - - new_terms - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleDefaultableFields - Security_Solution_Detections_API_NewTermsRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchFields - Security_Solution_Detections_API_NewTermsRuleRequiredFields: + config: + $ref: '#/components/schemas/Connectors_config_properties_genai' + connector_type_id: + description: The type of connector. + enum: + - .gen-ai + example: .gen-ai + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_genai' + required: + - config + - connector_type_id + - name + - secrets + title: Create OpenAI connector request type: object + Connectors_create_connector_request_index: + description: The index connector indexes a document into Elasticsearch. properties: - history_window_start: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_HistoryWindowStart - new_terms_fields: - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsFields' - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + connector_type_id: + description: The type of connector. enum: - - new_terms + - .index + example: .index + type: string + name: + description: The display name for the connector. + example: my-connector type: string required: - - type - - query - - new_terms_fields - - history_window_start - Security_Solution_Detections_API_NewTermsRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_NewTermsRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateFields - Security_Solution_Detections_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Detections_API_NormalizedRuleAction: - additionalProperties: false + - config + - connector_type_id + - name + title: Create index connector request type: object + Connectors_create_connector_request_jira: + description: The Jira connector uses the REST API v2 to create Jira issues. properties: - alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter - frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency - group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' - params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' + connector_type_id: + description: The type of connector. + enum: + - .jira + example: .jira + type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_jira' required: - - id - - params - Security_Solution_Detections_API_NormalizedRuleError: + - config + - connector_type_id + - name + - secrets + title: Create Jira connector request type: object + Connectors_create_connector_request_opsgenie: + description: The Opsgenie connector uses the Opsgenie alert API. properties: - err_code: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BulkActionsDryRunErrCode - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + connector_type_id: + description: The type of connector. + enum: + - .opsgenie + example: .opsgenie type: string - rules: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDetailsInError - type: array - status_code: - type: integer + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' required: - - message - - status_code - - rules - Security_Solution_Detections_API_OsqueryParams: + - config + - connector_type_id + - name + - secrets + title: Create Opsgenie connector request type: object + Connectors_create_connector_request_pagerduty: + description: > + The PagerDuty connector uses the v2 Events API to trigger, acknowledge, + and resolve PagerDuty alerts. properties: - ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' - pack_id: + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + connector_type_id: + description: The type of connector. + enum: + - .pagerduty + example: .pagerduty type: string - queries: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryQuery' - type: array - query: + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' + required: + - config + - connector_type_id + - name + - secrets + title: Create PagerDuty connector request + type: object + Connectors_create_connector_request_resilient: + description: >- + The IBM Resilient connector uses the RESILIENT REST v2 to create IBM + Resilient incidents. + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + connector_type_id: + description: The type of connector. + enum: + - .resilient + example: .resilient type: string - saved_query_id: + name: + description: The display name for the connector. + example: my-connector type: string - timeout: - type: number - Security_Solution_Detections_API_OsqueryQuery: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_resilient' + required: + - config + - connector_type_id + - name + - secrets + title: Create IBM Resilient connector request + type: object + Connectors_create_connector_request_sentinelone: + description: > + The SentinelOne connector communicates with SentinelOne Management + Console via REST API. This functionality is in technical preview and may + be changed or removed in a future release. Elastic will work to fix any + issues, but features in technical preview are not subject to the support + SLA of official GA features. + title: Create SentinelOne connector request type: object properties: - ecs_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_EcsMapping' - id: - description: Query ID + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + connector_type_id: + description: The type of connector. + enum: + - .sentinelone + example: .sentinelone type: string - platform: + name: + description: The display name for the connector. + example: my-connector type: string - query: - description: Query to run + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' + required: + - config + - connector_type_id + - name + - secrets + x-technical-preview: true + Connectors_create_connector_request_serverlog: + description: This connector writes an entry to the Kibana server log. + properties: + connector_type_id: + description: The type of connector. + enum: + - .server-log + example: .server-log type: string - removed: - type: boolean - snapshot: - type: boolean - version: - description: Query version + name: + description: The display name for the connector. + example: my-connector type: string required: - - id - - query - Security_Solution_Detections_API_OsqueryResponseAction: + - connector_type_id + - name + title: Create server log connector request type: object + Connectors_create_connector_request_servicenow: + description: > + The ServiceNow ITSM connector uses the import set API to create + ServiceNow incidents. You can use the connector for rule actions and + cases. properties: - action_type_id: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - .osquery + - .servicenow + example: .servicenow type: string - params: - $ref: '#/components/schemas/Security_Solution_Detections_API_OsqueryParams' + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - action_type_id - - params - Security_Solution_Detections_API_PlatformErrorResponse: + - config + - connector_type_id + - name + - secrets + title: Create ServiceNow ITSM connector request type: object + Connectors_create_connector_request_servicenow_itom: + description: > + The ServiceNow ITOM connector uses the event API to create ServiceNow + events. You can use the connector for rule actions. properties: - error: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + connector_type_id: + description: The type of connector. + enum: + - .servicenow-itom + example: .servicenow-itom type: string - message: + name: + description: The display name for the connector. + example: my-connector type: string - statusCode: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - statusCode - - error - - message - Security_Solution_Detections_API_ProcessesParams: + - config + - connector_type_id + - name + - secrets + title: Create ServiceNow ITOM connector request type: object + Connectors_create_connector_request_servicenow_sir: + description: > + The ServiceNow SecOps connector uses the import set API to create + ServiceNow security incidents. You can use the connector for rule + actions and cases. properties: - command: + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + connector_type_id: + description: The type of connector. enum: - - kill-process - - suspend-process + - .servicenow-sir + example: .servicenow-sir type: string - comment: + name: + description: The display name for the connector. + example: my-connector type: string - config: - type: object - properties: - field: - description: Field to use instead of process.pid - type: string - overwrite: - default: true - description: Whether to overwrite field with process.pid - type: boolean - required: - - field + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - command - config - Security_Solution_Detections_API_QueryRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleResponseFields - Security_Solution_Detections_API_QueryRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_QueryRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - Security_Solution_Detections_API_QueryRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - response_actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction - type: array - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_QueryRulePatchFields: - allOf: - - type: object - properties: - type: - description: Rule type - enum: - - query - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleDefaultableFields - Security_Solution_Detections_API_QueryRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchFields - Security_Solution_Detections_API_QueryRuleRequiredFields: + - connector_type_id + - name + - secrets + title: Create ServiceNow SecOps connector request type: object + Connectors_create_connector_request_slack_api: + description: The Slack connector uses an API method to send Slack messages. properties: - type: - description: Rule type + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + connector_type_id: + description: The type of connector. enum: - - query + - .slack_api + example: .slack_api type: string + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' required: - - type - Security_Solution_Detections_API_QueryRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - required: - - query - - language - Security_Solution_Detections_API_QueryRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateFields - Security_Solution_Detections_API_RelatedIntegration: - description: > - Related integration is a potential dependency of a rule. It's assumed - that if the user installs - - one of the related integrations of a rule, the rule might start to work - properly because it will - - have source events (generated by this integration) potentially matching - the rule's query. - - - NOTE: Proper work is not guaranteed, because a related integration, if - installed, can be - - configured differently or generate data that is not necessarily relevant - for this rule. - - - Related integration is a combination of a Fleet package and (optionally) - one of the - - package's "integrations" that this package contains. It is represented - by 3 properties: - - - - `package`: name of the package (required, unique id) - - - `version`: version of the package (required, semver-compatible) - - - `integration`: name of the integration of this package (optional, id - within the package) - - - There are Fleet packages like `windows` that contain only one - integration; in this case, - - `integration` should be unspecified. There are also packages like `aws` - and `azure` that contain - - several integrations; in this case, `integration` should be specified. - - - @example - - const x: RelatedIntegration = { - package: 'windows', - version: '1.5.x', - }; - - - @example - - const x: RelatedIntegration = { - package: 'azure', - version: '~1.1.6', - integration: 'activitylogs', - }; - type: object - properties: - integration: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - package: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - version: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - required: - - package - - version - Security_Solution_Detections_API_RelatedIntegrationArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegration - type: array - Security_Solution_Detections_API_RequiredField: - description: > - Describes an Elasticsearch field that is needed for the rule to - function. - - - Almost all types of Security rules check source event documents for a - match to some kind of - - query or filter. If a document has certain field with certain values, - then it's a match and - - the rule will generate an alert. - - - Required field is an event field that must be present in the source - indices of a given rule. - - - @example - - const standardEcsField: RequiredField = { - name: 'event.action', - type: 'keyword', - ecs: true, - }; - - - @example - - const nonEcsField: RequiredField = { - name: 'winlog.event_data.AttributeLDAPDisplayName', - type: 'keyword', - ecs: false, - }; + - connector_type_id + - name + - secrets + title: Create Slack connector request type: object + Connectors_create_connector_request_slack_webhook: + description: The Slack connector uses Slack Incoming Webhooks. properties: - ecs: - description: Whether the field is an ECS field - type: boolean + connector_type_id: + description: The type of connector. + enum: + - .slack + example: .slack + type: string name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Name of an Elasticsearch field - type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Type of the Elasticsearch field + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' required: + - connector_type_id - name - - type - - ecs - Security_Solution_Detections_API_RequiredFieldArray: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_RequiredField' - type: array - Security_Solution_Detections_API_RequiredFieldInput: - description: >- - Input parameters to create a RequiredField. Does not include the `ecs` - field, because `ecs` is calculated on the backend based on the field - name and type. + - secrets + title: Create Slack connector request type: object + Connectors_create_connector_request_swimlane: + description: >- + The Swimlane connector uses the Swimlane REST API to create Swimlane + records. properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + connector_type_id: + description: The type of connector. + enum: + - .swimlane + example: .swimlane + type: string name: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Name of an Elasticsearch field - type: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: Type of an Elasticsearch field + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' required: + - config + - connector_type_id - name - - type - Security_Solution_Detections_API_ResponseAction: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_OsqueryResponseAction - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EndpointResponseAction - Security_Solution_Detections_API_ResponseFields: + - secrets + title: Create Swimlane connector request type: object + Connectors_create_connector_request_teams: + description: The Microsoft Teams connector uses Incoming Webhooks. properties: - created_at: - format: date-time - type: string - created_by: - type: string - execution_summary: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionSummary - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleObjectId' - immutable: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleImmutable - required_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldArray - revision: - minimum: 0 - type: integer - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_source: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleSource' - updated_at: - format: date-time + connector_type_id: + description: The type of connector. + enum: + - .teams + example: .teams type: string - updated_by: + name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_teams' required: - - id - - rule_id - - immutable - - updated_at - - updated_by - - created_at - - created_by - - revision - - related_integrations - - required_fields - Security_Solution_Detections_API_RiskScore: - description: Risk score (0 to 100) - maximum: 100 - minimum: 0 - type: integer - Security_Solution_Detections_API_RiskScoreMapping: - description: >- - Overrides generated alerts' risk_score with a value from the source - event - items: - type: object - properties: - field: - type: string - operator: - enum: - - equals - type: string - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - value: - type: string - required: - - field - - operator - - value - type: array - Security_Solution_Detections_API_RuleAction: + - connector_type_id + - name + - secrets + title: Create Microsoft Teams connector request type: object + Connectors_create_connector_request_tines: + description: > + The Tines connector uses Tines Webhook actions to send events via POST + request. properties: - action_type_id: - description: The action type used for sending notifications. + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' + connector_type_id: + description: The type of connector. + enum: + - .tines + example: .tines type: string - alerts_filter: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionAlertsFilter - frequency: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionFrequency - group: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionGroup - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleActionId' - params: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionParams - uuid: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_tines' required: - - action_type_id - - id - - params - Security_Solution_Detections_API_RuleActionAlertsFilter: - additionalProperties: true - type: object - Security_Solution_Detections_API_RuleActionFrequency: - description: >- - The action frequency defines when the action runs (for example, only on - rule execution or at specific time intervals). + - config + - connector_type_id + - name + - secrets + title: Create Tines connector request type: object + Connectors_create_connector_request_torq: + description: > + The Torq connector uses a Torq webhook to trigger workflows with Kibana + actions. properties: - notifyWhen: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionNotifyWhen - summary: - description: >- - Action summary indicates whether we will send a summary notification - about all the generate alerts or notification per individual alert - type: boolean - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - nullable: true - required: - - summary - - notifyWhen - - throttle - Security_Solution_Detections_API_RuleActionGroup: - description: >- - Optionally groups actions by use cases. Use `default` for alert - notifications. - type: string - Security_Solution_Detections_API_RuleActionId: - description: The connector ID. - type: string - Security_Solution_Detections_API_RuleActionNotifyWhen: - description: >- - The condition for throttling the notification: `onActionGroupChange`, - `onActiveAlert`, or `onThrottleInterval` - enum: - - onActiveAlert - - onThrottleInterval - - onActionGroupChange - type: string - Security_Solution_Detections_API_RuleActionParams: - additionalProperties: true - description: >- - Object containing the allowed connector fields, which varies according - to the connector type. - type: object - Security_Solution_Detections_API_RuleActionThrottle: - description: Defines how often rule actions are taken. - oneOf: - - enum: - - no_actions - - rule + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + connector_type_id: + description: The type of connector. + enum: + - .torq + example: .torq type: string - - description: 'Time interval in seconds, minutes, hours, or days.' - example: 1h - pattern: '^[1-9]\d*[smhd]$' + name: + description: The display name for the connector. + example: my-connector type: string - Security_Solution_Detections_API_RuleAuthorArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleCreateProps: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleCreateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleCreateProps - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleDescription: - minLength: 1 - type: string - Security_Solution_Detections_API_RuleDetailsInError: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_torq' + required: + - config + - connector_type_id + - name + - secrets + title: Create Torq connector request type: object + Connectors_create_connector_request_webhook: + description: > + The Webhook connector uses axios to send a POST or PUT request to a web + service. properties: - id: + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + connector_type_id: + description: The type of connector. + enum: + - .webhook + example: .webhook type: string name: + description: The display name for the connector. + example: my-connector type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_webhook' required: - - id - Security_Solution_Detections_API_RuleExceptionList: + - config + - connector_type_id + - name + - secrets + title: Create Webhook connector request type: object + Connectors_create_connector_request_xmatters: + description: > + The xMatters connector uses the xMatters Workflow for Elastic to send + actionable alerts to on-call xMatters resources. properties: - id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: ID of the exception container - list_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - description: List ID of the exception container - namespace_type: - description: Determines the exceptions validity in rule's Kibana space + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + connector_type_id: + description: The type of connector. enum: - - agnostic - - single + - .xmatters + example: .xmatters type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExceptionListType + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' required: - - id - - list_id - - type - - namespace_type - Security_Solution_Detections_API_RuleExecutionMetrics: + - config + - connector_type_id + - name + - secrets + title: Create xMatters connector request type: object - properties: - execution_gap_duration_s: - description: Duration in seconds of execution gap - minimum: 0 - type: integer - total_enrichment_duration_ms: - description: >- - Total time spent enriching documents during current rule execution - cycle - minimum: 0 - type: integer - total_indexing_duration_ms: - description: >- - Total time spent indexing documents during current rule execution - cycle - minimum: 0 - type: integer - total_search_duration_ms: - description: >- - Total time spent performing ES searches as measured by Kibana; - includes network latency and time spent serializing/deserializing - request/response - minimum: 0 - type: integer - Security_Solution_Detections_API_RuleExecutionStatus: - description: >- - Custom execution status of Security rules that is different from the - status used in the Alerting Framework. We merge our custom status with - the Framework's status to determine the resulting status of a rule. - - - going to run - @deprecated Replaced by the 'running' status but left - for backwards compatibility with rule execution events already written - to Event Log in the prior versions of Kibana. Don't use when writing - rule status changes. - - - running - Rule execution started but not reached any intermediate or - final status. - - - partial failure - Rule can partially fail for various reasons either - in the middle of an execution (in this case we update its status right - away) or in the end of it. So currently this status can be both - intermediate and final at the same time. A typical reason for a partial - failure: not all the indices that the rule searches over actually exist. - - - failed - Rule failed to execute due to unhandled exception or a reason - defined in the business logic of its executor function. - - - succeeded - Rule executed successfully without any issues. Note: this - status is just an indication of a rule's "health". The rule might or - might not generate any alerts despite of it. + Connectors_features: + description: | + The feature that uses the connector. enum: - - going to run - - running - - partial failure - - failed - - succeeded + - alerting + - cases + - generativeAIForSecurity + - generativeAIForObservability + - generativeAIForSearchPlayground + - siem + - uptime type: string - Security_Solution_Detections_API_RuleExecutionStatusOrder: + Connectors_is_deprecated: + description: Indicates whether the connector type is deprecated. + example: false + type: boolean + Connectors_is_missing_secrets: + description: >- + Indicates whether secrets are missing for the connector. Secrets + configuration properties vary depending on the connector type. + example: false + type: boolean + Connectors_is_preconfigured: + description: > + Indicates whether it is a preconfigured connector. If true, the `config` + and `is_missing_secrets` properties are omitted from the response. + example: false + type: boolean + Connectors_is_system_action: + description: Indicates whether the connector is used for system actions. + example: false + type: boolean + Connectors_referenced_by_count: + description: > + Indicates the number of saved objects that reference the connector. If + `is_preconfigured` is true, this value is not calculated. This property + is returned only by the get all connectors API. + example: 2 type: integer - Security_Solution_Detections_API_RuleExecutionSummary: + Connectors_run_connector_params_acknowledge_resolve_pagerduty: + description: Test an action that acknowledges or resolves a PagerDuty alert. + properties: + dedupKey: + description: The deduplication key for the PagerDuty alert. + maxLength: 255 + type: string + eventAction: + description: The type of event. + enum: + - acknowledge + - resolve + type: string + required: + - dedupKey + - eventAction + title: PagerDuty connector parameters type: object + Connectors_run_connector_params_documents: + description: Test an action that indexes a document into Elasticsearch. properties: - last_execution: - type: object - properties: - date: - description: Date of the last execution - format: date-time - type: string - message: - type: string - metrics: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionMetrics - status: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatus - description: Status of the last execution - status_order: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExecutionStatusOrder - required: - - date - - status - - status_order - - message - - metrics + documents: + description: The documents in JSON format for index connectors. + items: + additionalProperties: true + type: object + type: array required: - - last_execution - Security_Solution_Detections_API_RuleFalsePositiveArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleFilterArray: - items: {} - type: array - Security_Solution_Detections_API_RuleInterval: - description: >- - Frequency of rule execution, using a date math range. For example, "1h" - means the rule runs every hour. Defaults to 5m (5 minutes). - type: string - Security_Solution_Detections_API_RuleIntervalFrom: - description: >- - Time from which data is analyzed each time the rule runs, using a date - math range. For example, now-4200s means the rule analyzes data from 70 - minutes before its start time. Defaults to now-6m (analyzes data from 6 - minutes before the start time). - format: date-math - type: string - Security_Solution_Detections_API_RuleIntervalTo: - type: string - Security_Solution_Detections_API_RuleLicense: - description: The rule's license. - type: string - Security_Solution_Detections_API_RuleMetadata: - additionalProperties: true + - documents + title: Index connector parameters type: object - Security_Solution_Detections_API_RuleName: - minLength: 1 - type: string - Security_Solution_Detections_API_RuleNameOverride: - description: Sets the source field for the alert's signal.rule.name value - type: string - Security_Solution_Detections_API_RuleObjectId: - $ref: '#/components/schemas/Security_Solution_Detections_API_UUID' - Security_Solution_Detections_API_RulePatchProps: + Connectors_run_connector_params_message_email: anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRulePatchProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRulePatchProps - Security_Solution_Detections_API_RulePreviewLogs: - type: object + - required: + - bcc + - message + - subject + - required: + - cc + - message + - subject + - required: + - to + - message + - subject + description: > + Test an action that sends an email message. There must be at least one + recipient in `to`, `cc`, or `bcc`. properties: - duration: - description: Execution duration in milliseconds - type: integer - errors: + bcc: + description: > + A list of "blind carbon copy" email addresses. Addresses can be + specified in `user@host-name` format or in name `` + format items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + type: string type: array - startedAt: - $ref: '#/components/schemas/Security_Solution_Detections_API_NonEmptyString' - warnings: + cc: + description: > + A list of "carbon copy" email addresses. Addresses can be specified + in `user@host-name` format or in name `` format items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString + type: string type: array - required: - - errors - - warnings - - duration - Security_Solution_Detections_API_RulePreviewParams: - type: object - properties: - invocationCount: - type: integer - timeframeEnd: - format: date-time + message: + description: The email message text. Markdown format is supported. type: string - required: - - invocationCount - - timeframeEnd - Security_Solution_Detections_API_RuleQuery: - type: string - Security_Solution_Detections_API_RuleReferenceArray: - items: - type: string - type: array - Security_Solution_Detections_API_RuleResponse: - anyOf: - - $ref: '#/components/schemas/Security_Solution_Detections_API_EqlRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_QueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdRule' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRule - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRule - - $ref: '#/components/schemas/Security_Solution_Detections_API_NewTermsRule' - - $ref: '#/components/schemas/Security_Solution_Detections_API_EsqlRule' - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleSignatureId: - description: 'Could be any string, not necessarily a UUID' - type: string - Security_Solution_Detections_API_RuleSource: - description: >- - Discriminated union that determines whether the rule is internally - sourced (created within the Kibana app) or has an external source, such - as the Elastic Prebuilt rules repo. - discriminator: - propertyName: type - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ExternalRuleSource - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InternalRuleSource - Security_Solution_Detections_API_RuleTagArray: - description: >- - String array containing words and phrases to help categorize, filter, - and search rules. Defaults to an empty array. - items: - type: string - type: array - Security_Solution_Detections_API_RuleUpdateProps: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EqlRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_QueryRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_MachineLearningRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NewTermsRuleUpdateProps - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_EsqlRuleUpdateProps - discriminator: - propertyName: type - Security_Solution_Detections_API_RuleVersion: - description: The rule's version number. - minimum: 1 - type: integer - Security_Solution_Detections_API_SavedObjectResolveAliasPurpose: - enum: - - savedObjectConversion - - savedObjectImport - type: string - Security_Solution_Detections_API_SavedObjectResolveAliasTargetId: - type: string - Security_Solution_Detections_API_SavedObjectResolveOutcome: - enum: - - exactMatch - - aliasMatch - - conflict - type: string - Security_Solution_Detections_API_SavedQueryId: - type: string - Security_Solution_Detections_API_SavedQueryRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleResponseFields - Security_Solution_Detections_API_SavedQueryRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRuleCreateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SavedQueryRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_SavedQueryRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - response_actions: + subject: + description: The subject line of the email. + type: string + to: + description: > + A list of email addresses. Addresses can be specified in + `user@host-name` format or in name `` format. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ResponseAction + type: string type: array - Security_Solution_Detections_API_SavedQueryRulePatchFields: - allOf: - - type: object - properties: - saved_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryId - type: - description: Rule type - enum: - - saved_query - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleDefaultableFields - Security_Solution_Detections_API_SavedQueryRulePatchProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRulePatchFields - Security_Solution_Detections_API_SavedQueryRuleRequiredFields: + title: Email connector parameters type: object + Connectors_run_connector_params_message_serverlog: + description: Test an action that writes an entry to the Kibana server log. properties: - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - type: - description: Rule type + level: + default: info + description: The log level of the message for server log connectors. enum: - - saved_query + - debug + - error + - fatal + - info + - trace + - warn type: string - required: - - type - - saved_id - Security_Solution_Detections_API_SavedQueryRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_SavedQueryRuleUpdateProps: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedQueryRuleCreateFields - Security_Solution_Detections_API_SetAlertsStatusByIds: + message: + description: The message for server log connectors. + type: string + required: + - message + title: Server log connector parameters type: object + Connectors_run_connector_params_message_slack: + description: > + Test an action that sends a message to Slack. It is applicable only when + the connector type is `.slack`. properties: - signal_ids: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - minItems: 1 - type: array - status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + message: + description: >- + The Slack message text, which cannot contain Markdown, images, or + other advanced formatting. + type: string required: - - signal_ids - - status - Security_Solution_Detections_API_SetAlertsStatusByQuery: + - message + title: Slack connector parameters type: object + Connectors_run_connector_params_trigger_pagerduty: + description: Test an action that triggers a PagerDuty alert. properties: - conflicts: - default: abort - enum: - - abort - - proceed + class: + description: The class or type of the event. + example: cpu load type: string - query: - additionalProperties: true + component: + description: >- + The component of the source machine that is responsible for the + event. + example: eth0 + type: string + customDetails: + description: Additional details to add to the event. type: object - status: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertStatus' + dedupKey: + description: > + All actions sharing this key will be associated with the same + PagerDuty alert. This value is used to correlate trigger and + resolution. + maxLength: 255 + type: string + eventAction: + description: The type of event. + enum: + - trigger + type: string + group: + description: The logical grouping of components of a service. + example: app-stack + type: string + links: + description: A list of links to add to the event. + items: + type: object + properties: + href: + description: The URL for the link. + type: string + text: + description: A plain text description of the purpose of the link. + type: string + type: array + severity: + default: info + description: The severity of the event on the affected system. + enum: + - critical + - error + - info + - warning + type: string + source: + description: > + The affected system, such as a hostname or fully qualified domain + name. Defaults to the Kibana saved object id of the action. + type: string + summary: + description: A summery of the event. + maxLength: 1024 + type: string + timestamp: + description: >- + An ISO-8601 timestamp that indicates when the event was detected or + generated. + format: date-time + type: string required: - - query - - status - Security_Solution_Detections_API_SetAlertTags: + - eventAction + title: PagerDuty connector parameters type: object + Connectors_run_connector_request: + description: The properties vary depending on the connector type. properties: - tags_to_add: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' - tags_to_remove: - $ref: '#/components/schemas/Security_Solution_Detections_API_AlertTags' + params: + oneOf: + - $ref: >- + #/components/schemas/Connectors_run_connector_params_acknowledge_resolve_pagerduty + - $ref: '#/components/schemas/Connectors_run_connector_params_documents' + - $ref: >- + #/components/schemas/Connectors_run_connector_params_message_email + - $ref: >- + #/components/schemas/Connectors_run_connector_params_message_serverlog + - $ref: >- + #/components/schemas/Connectors_run_connector_params_message_slack + - $ref: >- + #/components/schemas/Connectors_run_connector_params_trigger_pagerduty + - description: Test an action that involves a subaction. + discriminator: + mapping: + addEvent: >- + #/components/schemas/Connectors_run_connector_subaction_addevent + closeAlert: >- + #/components/schemas/Connectors_run_connector_subaction_closealert + closeIncident: >- + #/components/schemas/Connectors_run_connector_subaction_closeincident + createAlert: >- + #/components/schemas/Connectors_run_connector_subaction_createalert + fieldsByIssueType: >- + #/components/schemas/Connectors_run_connector_subaction_fieldsbyissuetype + getChoices: >- + #/components/schemas/Connectors_run_connector_subaction_getchoices + getFields: >- + #/components/schemas/Connectors_run_connector_subaction_getfields + getIncident: >- + #/components/schemas/Connectors_run_connector_subaction_getincident + issue: >- + #/components/schemas/Connectors_run_connector_subaction_issue + issues: >- + #/components/schemas/Connectors_run_connector_subaction_issues + issueTypes: >- + #/components/schemas/Connectors_run_connector_subaction_issuetypes + pushToService: >- + #/components/schemas/Connectors_run_connector_subaction_pushtoservice + propertyName: subAction + oneOf: + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_addevent + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_closealert + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_closeincident + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_createalert + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_fieldsbyissuetype + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_getchoices + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_getfields + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_getincident + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_issue + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_issues + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_issuetypes + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_postmessage + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_pushtoservice + - $ref: >- + #/components/schemas/Connectors_run_connector_subaction_validchannelid + title: Subaction parameters required: - - tags_to_add - - tags_to_remove - Security_Solution_Detections_API_SetupGuide: - type: string - Security_Solution_Detections_API_Severity: - description: Severity of the rule - enum: - - low - - medium - - high - - critical - type: string - Security_Solution_Detections_API_SeverityMapping: - description: Overrides generated alerts' severity with values from the source event - items: - type: object - properties: - field: - type: string - operator: - enum: - - equals - type: string - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - value: - type: string - required: - - field - - operator - - severity - - value - type: array - Security_Solution_Detections_API_SiemErrorResponse: + - params + title: Run connector request body properties + type: object + Connectors_run_connector_subaction_addevent: + description: The `addEvent` subaction for ServiceNow ITOM connectors. + title: The addEvent subaction type: object properties: - message: + subAction: + description: The action to test. + enum: + - addEvent type: string - status_code: - type: integer + subActionParams: + description: The set of configuration properties for the action. + type: object + properties: + additional_info: + description: Additional information about the event. + type: string + description: + description: The details about the event. + type: string + event_class: + description: A specific instance of the source. + type: string + message_key: + description: >- + All actions sharing this key are associated with the same + ServiceNow alert. The default value is `:`. + type: string + metric_name: + description: The name of the metric. + type: string + node: + description: The host that the event was triggered for. + type: string + resource: + description: The name of the resource. + type: string + severity: + description: The severity of the event. + type: string + source: + description: The name of the event source type. + type: string + time_of_event: + description: The time of the event. + type: string + type: + description: The type of event. + type: string required: - - status_code - - message - Security_Solution_Detections_API_SkippedAlertsIndexMigration: + - subAction + Connectors_run_connector_subaction_closealert: + description: The `closeAlert` subaction for Opsgenie connectors. + title: The closeAlert subaction type: object properties: - index: + subAction: + description: The action to test. + enum: + - closeAlert type: string + subActionParams: + type: object + properties: + alias: + description: >- + The unique identifier used for alert deduplication in Opsgenie. + The alias must match the value used when creating the alert. + type: string + note: + description: Additional information for the alert. + type: string + source: + description: The display name for the source of the alert. + type: string + user: + description: The display name for the owner. + type: string + required: + - alias required: - - index - Security_Solution_Detections_API_SortOrder: - enum: - - asc - - desc - type: string - Security_Solution_Detections_API_Threat: + - subAction + - subActionParams + Connectors_run_connector_subaction_closeincident: + description: The `closeIncident` subaction for ServiceNow ITSM connectors. + title: The closeIncident subaction type: object properties: - framework: - description: Relevant attack framework + subAction: + description: The action to test. + enum: + - closeIncident type: string - tactic: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatTactic' - technique: - description: Array containing information on the attack techniques (optional) - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatTechnique - type: array - required: - - framework - - tactic - Security_Solution_Detections_API_ThreatArray: - items: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threat' - type: array - Security_Solution_Detections_API_ThreatFilters: - items: - description: >- - Query and filter context array used to filter documents from the - Elasticsearch index containing the threat values - type: array - Security_Solution_Detections_API_ThreatIndex: - items: - type: string - type: array - Security_Solution_Detections_API_ThreatIndicatorPath: - description: >- - Defines the path to the threat indicator in the indicator documents - (optional) - type: string - Security_Solution_Detections_API_ThreatMapping: - items: - type: object - properties: - entries: - items: + subActionParams: + type: object + properties: + incident: + anyOf: + - required: + - correlation_id + - required: + - externalId type: object properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - type: - enum: - - mapping + correlation_id: + default: '{{rule.id}}:{{alert.id}}' + description: > + An identifier that is assigned to the incident when it is + created by the connector. NOTE: If you use the default value + and the rule generates multiple alerts that use the same + alert IDs, the latest open incident for this correlation ID + is closed unless you specify the external ID. + maxLength: 100 + nullable: true + type: string + externalId: + description: >- + The unique identifier (`incidentId`) for the incident in + ServiceNow. + nullable: true type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_NonEmptyString - required: - - field - - type - - value - type: array - required: - - entries - minItems: 1 - type: array - Security_Solution_Detections_API_ThreatMatchRule: - allOf: - - type: object - properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleResponseFields - Security_Solution_Detections_API_ThreatMatchRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRuleCreateProps: - allOf: - - type: object + - incident + required: + - subAction + - subActionParams + Connectors_run_connector_subaction_createalert: + description: The `createAlert` subaction for Opsgenie connectors. + title: The createAlert subaction + type: object + properties: + subAction: + description: The action to test. + enum: + - createAlert + type: string + subActionParams: + type: object properties: actions: + description: The custom actions available to the alert. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + type: string type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType + alias: + description: The unique identifier used for alert deduplication in Opsgenie. + type: string description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace + description: >- + A description that provides detailed information about the + alert. + type: string + details: + additionalProperties: true + description: The custom properties of the alert. + example: + key1: value1 + key2: value2 + type: object + entity: + description: >- + The domain of the alert. For example, the application or server + name. + type: string + message: + description: The alert message. + type: string note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields: - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRuleOptionalFields: - type: object - properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppression - concurrent_searches: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ConcurrentSearches - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - items_per_search: - $ref: '#/components/schemas/Security_Solution_Detections_API_ItemsPerSearch' - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - threat_filters: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatFilters' - threat_indicator_path: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndicatorPath - threat_language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThreatMatchRulePatchFields: - allOf: - - type: object - properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threat_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatIndex - threat_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMapping - threat_query: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatQuery - type: - description: Rule type + description: Additional information for the alert. + type: string + priority: + description: The priority level for the alert. enum: - - threat_match + - P1 + - P2 + - P3 + - P4 + - P5 type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleDefaultableFields - Security_Solution_Detections_API_ThreatMatchRulePatchProps: - allOf: - - type: object - properties: - actions: + responders: + description: > + The entities to receive notifications about the alert. If `type` + is `user`, either `id` or `username` is required. If `type` is + `team`, either `id` or `name` is required. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + type: object + properties: + id: + description: The identifier for the entity. + type: string + name: + description: The name of the entity. + type: string + type: + description: 'The type of responders, in this case `escalation`.' + enum: + - escalation + - schedule + - team + - user + type: string + username: + description: A valid email address for the user. + type: string type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: + source: + description: The display name for the source of the alert. + type: string + tags: + description: The tags for the alert. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + type: string type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: + user: + description: The display name for the owner. + type: string + visibleTo: + description: >- + The teams and users that the alert will be visible to without + sending a notification. Only one of `id`, `name`, or `username` + is required. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + type: object + properties: + id: + description: The identifier for the entity. + type: string + name: + description: The name of the entity. + type: string + type: + description: Valid values are `team` and `user`. + enum: + - team + - user + type: string + username: + description: >- + The user name. This property is required only when the + `type` is `user`. + type: string + required: + - type type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRulePatchFields - Security_Solution_Detections_API_ThreatMatchRuleRequiredFields: + required: + - message + required: + - subAction + - subActionParams + Connectors_run_connector_subaction_fieldsbyissuetype: + description: The `fieldsByIssueType` subaction for Jira connectors. + title: The fieldsByIssueType subaction type: object properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threat_index: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatIndex' - threat_mapping: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatMapping' - threat_query: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThreatQuery' - type: - description: Rule type + subAction: + description: The action to test. enum: - - threat_match + - fieldsByIssueType type: string - required: - - type - - query - - threat_query - - threat_mapping - - threat_index - Security_Solution_Detections_API_ThreatMatchRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_ThreatMatchRuleUpdateProps: - allOf: - - type: object + subActionParams: + type: object properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + description: The Jira issue type identifier. + example: 10024 + type: string required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatMatchRuleCreateFields - Security_Solution_Detections_API_ThreatQuery: - description: Query to run - type: string - Security_Solution_Detections_API_ThreatSubtechnique: + - id + required: + - subAction + - subActionParams + Connectors_run_connector_subaction_getchoices: + description: >- + The `getChoices` subaction for ServiceNow ITOM, ServiceNow ITSM, and + ServiceNow SecOps connectors. + title: The getChoices subaction type: object properties: - id: - description: Subtechnique ID - type: string - name: - description: Subtechnique name - type: string - reference: - description: Subtechnique reference + subAction: + description: The action to test. + enum: + - getChoices type: string + subActionParams: + description: The set of configuration properties for the action. + type: object + properties: + fields: + description: An array of fields. + items: + type: string + type: array + required: + - fields required: - - id - - name - - reference - Security_Solution_Detections_API_ThreatTactic: + - subAction + - subActionParams + Connectors_run_connector_subaction_getfields: + description: >- + The `getFields` subaction for Jira, ServiceNow ITSM, and ServiceNow + SecOps connectors. + title: The getFields subaction type: object properties: - id: - description: Tactic ID - type: string - name: - description: Tactic name - type: string - reference: - description: Tactic reference + subAction: + description: The action to test. + enum: + - getFields type: string required: - - id - - name - - reference - Security_Solution_Detections_API_ThreatTechnique: - type: object + - subAction + Connectors_run_connector_subaction_getincident: + description: >- + The `getIncident` subaction for Jira, ServiceNow ITSM, and ServiceNow + SecOps connectors. properties: - id: - description: Technique ID - type: string - name: - description: Technique name - type: string - reference: - description: Technique reference + subAction: + description: The action to test. + enum: + - getIncident type: string - subtechnique: - description: Array containing more specific information on the attack technique - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatSubtechnique - type: array + subActionParams: + type: object + properties: + externalId: + description: >- + The Jira, ServiceNow ITSM, or ServiceNow SecOps issue + identifier. + example: 71778 + type: string + required: + - externalId required: - - id - - name - - reference - Security_Solution_Detections_API_Threshold: + - subAction + - subActionParams + title: The getIncident subaction type: object - properties: - cardinality: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdCardinality - field: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdField' - value: - $ref: '#/components/schemas/Security_Solution_Detections_API_ThresholdValue' - required: - - field - - value - Security_Solution_Detections_API_ThresholdAlertSuppression: + Connectors_run_connector_subaction_issue: + description: The `issue` subaction for Jira connectors. + title: The issue subaction type: object properties: - duration: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertSuppressionDuration - required: - - duration - Security_Solution_Detections_API_ThresholdCardinality: - items: - type: object - properties: - field: - type: string - value: - minimum: 0 - type: integer - required: - - field - - value - type: array - Security_Solution_Detections_API_ThresholdField: - description: Field to aggregate on - oneOf: - - type: string - - items: - type: string - type: array - Security_Solution_Detections_API_ThresholdRule: - allOf: - - type: object + subAction: + description: The action to test. + enum: + - issue + type: string + subActionParams: + type: object properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + id: + description: The Jira issue identifier. + example: 71778 + type: string required: - - name - - description - - risk_score - - severity - - version - - tags - - enabled - - risk_score_mapping - - severity_mapping - - interval - - from - - to - - actions - - exceptions_list - - author - - false_positives - - references - - max_signals - - threat - - setup - - related_integrations - - required_fields - - $ref: '#/components/schemas/Security_Solution_Detections_API_ResponseFields' - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleResponseFields - Security_Solution_Detections_API_ThresholdRuleCreateFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRuleCreateProps: - allOf: - - type: object + - id + required: + - subAction + Connectors_run_connector_subaction_issues: + description: The `issues` subaction for Jira connectors. + title: The issues subaction + type: object + properties: + subAction: + description: The action to test. + enum: + - issues + type: string + subActionParams: + type: object properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + title: + description: The title of the Jira issue. + type: string required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdRuleDefaultableFields: + - title + required: + - subAction + - subActionParams + Connectors_run_connector_subaction_issuetypes: + description: The `issueTypes` subaction for Jira connectors. + title: The issueTypes subaction type: object properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - Security_Solution_Detections_API_ThresholdRuleOptionalFields: - type: object + subAction: + description: The action to test. + enum: + - issueTypes + type: string + required: + - subAction + Connectors_run_connector_subaction_postmessage: + description: > + Test an action that sends a message to Slack. It is applicable only when + the connector type is `.slack_api`. properties: - alert_suppression: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdAlertSuppression - data_view_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_DataViewId' - filters: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFilterArray - index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IndexPatternArray - saved_id: - $ref: '#/components/schemas/Security_Solution_Detections_API_SavedQueryId' - Security_Solution_Detections_API_ThresholdRulePatchFields: - allOf: - - type: object - properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' - type: - description: Rule type - enum: - - threshold - type: string - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleDefaultableFields - Security_Solution_Detections_API_ThresholdRulePatchProps: - allOf: - - type: object + subAction: + description: The action to test. + enum: + - postMessage + type: string + subActionParams: + description: The set of configuration properties for the action. + type: object properties: - actions: + channelIds: + description: > + The Slack channel identifier, which must be one of the + `allowedChannels` in the connector configuration. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction + type: string + maxItems: 1 type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: + channels: + deprecated: true + description: | + The name of a channel that your Slack app has access to. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList + type: string + maxItems: 1 type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: + text: + description: > + The Slack message text. If it is a Slack webhook connector, the + text cannot contain Markdown, images, or other advanced + formatting. If it is a Slack web API connector, it can contain + either plain text or block kit messages. + minLength: 1 + type: string + required: + - subAction + - subActionParams + title: The postMessage subaction + type: object + Connectors_run_connector_subaction_pushtoservice: + description: >- + The `pushToService` subaction for Jira, ServiceNow ITSM, ServiceNow + SecOps, Swimlane, and Webhook - Case Management connectors. + title: The pushToService subaction + type: object + properties: + subAction: + description: The action to test. + enum: + - pushToService + type: string + subActionParams: + description: The set of configuration properties for the action. + type: object + properties: + comments: + description: >- + Additional information that is sent to Jira, ServiceNow ITSM, + ServiceNow SecOps, or Swimlane. items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput + type: object + properties: + comment: + description: >- + A comment related to the incident. For example, describe + how to troubleshoot the issue. + type: string + commentId: + description: A unique identifier for the comment. + type: integer type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRulePatchFields - Security_Solution_Detections_API_ThresholdRuleRequiredFields: - type: object + incident: + description: >- + Information necessary to create or update a Jira, ServiceNow + ITSM, ServiveNow SecOps, or Swimlane incident. + type: object + properties: + alertId: + description: The alert identifier for Swimlane connectors. + type: string + caseId: + description: >- + The case identifier for the incident for Swimlane + connectors. + type: string + caseName: + description: The case name for the incident for Swimlane connectors. + type: string + category: + description: >- + The category of the incident for ServiceNow ITSM and + ServiceNow SecOps connectors. + type: string + correlation_display: + description: >- + A descriptive label of the alert for correlation purposes + for ServiceNow ITSM and ServiceNow SecOps connectors. + type: string + correlation_id: + description: > + The correlation identifier for the security incident for + ServiceNow ITSM and ServiveNow SecOps connectors. Connectors + using the same correlation ID are associated with the same + ServiceNow incident. This value determines whether a new + ServiceNow incident is created or an existing one is + updated. Modifying this value is optional; if not modified, + the rule ID and alert ID are combined as `{{ruleID}}:{{alert + ID}}` to form the correlation ID value in ServiceNow. The + maximum character length for this value is 100 characters. + NOTE: Using the default configuration of `{{ruleID}}:{{alert + ID}}` ensures that ServiceNow creates a separate incident + record for every generated alert that uses a unique alert + ID. If the rule generates multiple alerts that use the same + alert IDs, ServiceNow creates and continually updates a + single incident record for the alert. + type: string + description: + description: >- + The description of the incident for Jira, ServiceNow ITSM, + ServiceNow SecOps, Swimlane, and Webhook - Case Management + connectors. + type: string + dest_ip: + description: > + A list of destination IP addresses related to the security + incident for ServiceNow SecOps connectors. The IPs are added + as observables to the security incident. + oneOf: + - type: string + - items: + type: string + type: array + externalId: + description: > + The Jira, ServiceNow ITSM, or ServiceNow SecOps issue + identifier. If present, the incident is updated. Otherwise, + a new incident is created. + type: string + id: + description: >- + The external case identifier for Webhook - Case Management + connectors. + type: string + impact: + description: The impact of the incident for ServiceNow ITSM connectors. + type: string + issueType: + description: >- + The type of incident for Jira connectors. For example, + 10006. To obtain the list of valid values, set `subAction` + to `issueTypes`. + type: integer + labels: + description: > + The labels for the incident for Jira connectors. NOTE: + Labels cannot contain spaces. + items: + type: string + type: array + malware_hash: + description: >- + A list of malware hashes related to the security incident + for ServiceNow SecOps connectors. The hashes are added as + observables to the security incident. + oneOf: + - type: string + - items: + type: string + type: array + malware_url: + description: >- + A list of malware URLs related to the security incident for + ServiceNow SecOps connectors. The URLs are added as + observables to the security incident. + oneOf: + - type: string + - items: + type: string + type: array + type: string + otherFields: + additionalProperties: true + description: > + Custom field identifiers and their values for Jira + connectors. + maxProperties: 20 + type: object + parent: + description: >- + The ID or key of the parent issue for Jira connectors. + Applies only to `Sub-task` types of issues. + type: string + priority: + description: >- + The priority of the incident in Jira and ServiceNow SecOps + connectors. + type: string + ruleName: + description: The rule name for Swimlane connectors. + type: string + severity: + description: >- + The severity of the incident for ServiceNow ITSM and + Swimlane connectors. + type: string + short_description: + description: > + A short description of the incident for ServiceNow ITSM and + ServiceNow SecOps connectors. It is used for searching the + contents of the knowledge base. + type: string + source_ip: + description: >- + A list of source IP addresses related to the security + incident for ServiceNow SecOps connectors. The IPs are added + as observables to the security incident. + oneOf: + - type: string + - items: + type: string + type: array + status: + description: >- + The status of the incident for Webhook - Case Management + connectors. + type: string + subcategory: + description: >- + The subcategory of the incident for ServiceNow ITSM and + ServiceNow SecOps connectors. + type: string + summary: + description: A summary of the incident for Jira connectors. + type: string + tags: + description: A list of tags for Webhook - Case Management connectors. + items: + type: string + type: array + title: + description: > + A title for the incident for Jira and Webhook - Case + Management connectors. It is used for searching the contents + of the knowledge base. + type: string + urgency: + description: The urgency of the incident for ServiceNow ITSM connectors. + type: string + required: + - subAction + - subActionParams + Connectors_run_connector_subaction_validchannelid: + description: > + Retrieves information about a valid Slack channel identifier. It is + applicable only when the connector type is `.slack_api`. properties: - query: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleQuery' - threshold: - $ref: '#/components/schemas/Security_Solution_Detections_API_Threshold' - type: - description: Rule type + subAction: + description: The action to test. enum: - - threshold + - validChannelId type: string - required: - - type - - query - - threshold - Security_Solution_Detections_API_ThresholdRuleResponseFields: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleRequiredFields - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleOptionalFields - - type: object - properties: - language: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_KqlQueryLanguage - required: - - language - Security_Solution_Detections_API_ThresholdRuleUpdateProps: - allOf: - - type: object + subActionParams: + type: object properties: - actions: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAction - type: array - alias_purpose: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasPurpose - alias_target_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveAliasTargetId - author: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleAuthorArray - building_block_type: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_BuildingBlockType - description: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleDescription - enabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_IsRuleEnabled - exceptions_list: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleExceptionList - type: array - false_positives: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleFalsePositiveArray - from: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalFrom - id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleObjectId - interval: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleInterval - investigation_fields: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationFields - license: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleLicense - max_signals: - $ref: '#/components/schemas/Security_Solution_Detections_API_MaxSignals' - meta: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleMetadata - name: - $ref: '#/components/schemas/Security_Solution_Detections_API_RuleName' - namespace: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndexNamespace - note: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_InvestigationGuide - outcome: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SavedObjectResolveOutcome - output_index: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_AlertsIndex - references: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleReferenceArray - related_integrations: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RelatedIntegrationArray - required_fields: - items: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RequiredFieldInput - type: array - risk_score: - $ref: '#/components/schemas/Security_Solution_Detections_API_RiskScore' - risk_score_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RiskScoreMapping - rule_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleSignatureId - rule_name_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleNameOverride - setup: - $ref: '#/components/schemas/Security_Solution_Detections_API_SetupGuide' - severity: - $ref: '#/components/schemas/Security_Solution_Detections_API_Severity' - severity_mapping: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_SeverityMapping - tags: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleTagArray - threat: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThreatArray - throttle: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleActionThrottle - timeline_id: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateId - timeline_title: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimelineTemplateTitle - timestamp_override: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverride - timestamp_override_fallback_disabled: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_TimestampOverrideFallbackDisabled - to: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleIntervalTo - version: - $ref: >- - #/components/schemas/Security_Solution_Detections_API_RuleVersion + channelId: + description: The Slack channel identifier. + example: C123ABC456 + type: string required: - - name - - description - - risk_score - - severity - - $ref: >- - #/components/schemas/Security_Solution_Detections_API_ThresholdRuleCreateFields - Security_Solution_Detections_API_ThresholdValue: - description: Threshold value - minimum: 1 - type: integer - Security_Solution_Detections_API_ThrottleForBulkActions: - description: >- - The condition for throttling the notification: 'rule', 'no_actions', or - time duration - enum: - - rule - - 1h - - 1d - - 7d - type: string - Security_Solution_Detections_API_TiebreakerField: - description: Sets a secondary field for sorting events - type: string - Security_Solution_Detections_API_TimelineTemplateId: - description: Timeline template ID - type: string - Security_Solution_Detections_API_TimelineTemplateTitle: - description: Timeline template title - type: string - Security_Solution_Detections_API_TimestampField: - description: Contains the event timestamp used for sorting a sequence of events - type: string - Security_Solution_Detections_API_TimestampOverride: - description: Sets the time field used to query indices - type: string - Security_Solution_Detections_API_TimestampOverrideFallbackDisabled: - description: Disables the fallback to the event's @timestamp field - type: boolean - Security_Solution_Detections_API_UUID: - description: A universally unique identifier - format: uuid - type: string - Security_Solution_Detections_API_WarningSchema: + - channelId + required: + - subAction + - subActionParams + title: The validChannelId subaction type: object + Connectors_secrets_properties_bedrock: + description: Defines secrets for connectors when type is `.bedrock`. properties: - actionPath: - type: string - buttonLabel: - type: string - message: + accessKey: + description: The AWS access key for authentication. type: string - type: + secret: + description: The AWS secret for authentication. type: string required: - - type - - message - - actionPath - Security_Solution_Endpoint_Exceptions_API_EndpointList: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionList - - additionalProperties: false - type: object - Security_Solution_Endpoint_Exceptions_API_EndpointListItem: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItem - Security_Solution_Endpoint_Exceptions_API_ExceptionList: + - accessKey + - secret + title: Connector secrets properties for an Amazon Bedrock connector + type: object + Connectors_secrets_properties_cases_webhook: + title: Connector secrets properties for Webhook - Case Management connector type: object properties: - _version: - type: string - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListId - immutable: - type: boolean - list_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListType - updated_at: - format: date-time + password: + description: >- + The password for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - updated_by: + user: + description: >- + The username for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion - required: - - id - - list_id - - type - - name - - description - - immutable - - namespace_type - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListDescription: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - description: 'Human readable string identifier, e.g. `trusted-linux-processes`' - Security_Solution_Endpoint_Exceptions_API_ExceptionListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItem: + Connectors_secrets_properties_d3security: + description: Defines secrets for connectors when type is `.d3security`. type: object properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta - name: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType - updated_at: - format: date-time - type: string - updated_by: + token: + description: The D3 Security token. type: string required: - - id - - item_id - - list_id - - type - - name - - description - - entries - - namespace_type - - comments - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment: - type: object + - token + title: Connector secrets properties for a D3 Security connector + Connectors_secrets_properties_email: + description: Defines secrets for connectors when type is `.email`. properties: - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - created_at: - format: date-time + clientSecret: + description: > + The Microsoft Exchange Client secret for OAuth 2.0 client + credentials authentication. It must be URL-encoded. If `service` is + `exchange_server`, this property is required. type: string - created_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - updated_at: - format: date-time + password: + description: > + The password for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - updated_by: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - required: - - id - - comment - - created_at - - created_by - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemComment - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemDescription: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard - discriminator: - propertyName: type - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntry - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists: - type: object - properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - exists + user: + description: > + The username for HTTP basic authentication. If `hasAuth` is set to + `true`, this property is required. type: string - required: - - type - - field - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryList: + title: Connector secrets properties for an email connector type: object + Connectors_secrets_properties_gemini: + description: Defines secrets for connectors when type is `.gemini`. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - list: - type: object - properties: - id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListId - type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ListType - required: - - id - - type - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - list + credentialsJSON: + description: >- + The service account credentials JSON file. The service account + should have Vertex AI user IAM role assigned to it. type: string required: - - type - - field - - list - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch: + - credentialsJSON + title: Connector secrets properties for a Google Gemini connector type: object + Connectors_secrets_properties_genai: + description: Defines secrets for connectors when type is `.gen-ai`. properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match + apiKey: + description: The OpenAI API key. type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny: + title: Connector secrets properties for an OpenAI connector + type: object + Connectors_secrets_properties_jira: + description: Defines secrets for connectors when type is `.jira`. type: object properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match_any + apiToken: + description: The Jira API authentication token for HTTP basic authentication. + type: string + email: + description: The account email for HTTP Basic authentication. type: string - value: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - minItems: 1 - type: array required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchWildcard: + - apiToken + - email + title: Connector secrets properties for a Jira connector + Connectors_secrets_properties_opsgenie: + description: Defines secrets for connectors when type is `.opsgenie`. type: object properties: - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - operator: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - wildcard + apiKey: + description: The Opsgenie API authentication key for HTTP Basic authentication. type: string - value: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString required: - - type - - field - - value - - operator - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNested: - type: object + - apiKey + title: Connector secrets properties for an Opsgenie connector + Connectors_secrets_properties_pagerduty: + description: Defines secrets for connectors when type is `.pagerduty`. properties: - entries: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem - minItems: 1 - type: array - field: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - type: - enum: - - nested + routingKey: + description: > + A 32 character PagerDuty Integration Key for an integration on a + service. type: string required: - - type - - field - - entries - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryNestedEntryItem: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemEntryOperator: - enum: - - excluded - - included - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemHumanId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemMeta: - additionalProperties: true - type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemName: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemTags: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListItemType: - enum: - - simple - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListMeta: - additionalProperties: true + - routingKey + title: Connector secrets properties for a PagerDuty connector type: object - Security_Solution_Endpoint_Exceptions_API_ExceptionListName: - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType: - enum: - - linux - - macos - - windows - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListTags: - items: - type: string - type: array - Security_Solution_Endpoint_Exceptions_API_ExceptionListType: - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Endpoint_Exceptions_API_ExceptionListVersion: - minimum: 1 - type: integer - Security_Solution_Endpoint_Exceptions_API_ExceptionNamespaceType: - description: > - Determines whether the exception container is available in all Kibana - spaces or just the space - - in which it is created, where: - - - - `single`: Only available in the Kibana space in which it is created. - - - `agnostic`: Available in all Kibana spaces. - enum: - - agnostic - - single - type: string - Security_Solution_Endpoint_Exceptions_API_FindEndpointListItemsFilter: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListId: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Exceptions_API_NonEmptyString - Security_Solution_Endpoint_Exceptions_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Endpoint_Exceptions_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Endpoint_Exceptions_API_PlatformErrorResponse: + Connectors_secrets_properties_resilient: + description: Defines secrets for connectors when type is `.resilient`. type: object properties: - error: + apiKeyId: + description: The authentication key ID for HTTP Basic authentication. type: string - message: + apiKeySecret: + description: The authentication key secret for HTTP Basic authentication. type: string - statusCode: - type: integer required: - - statusCode - - error - - message - Security_Solution_Endpoint_Exceptions_API_SiemErrorResponse: - type: object + - apiKeyId + - apiKeySecret + title: Connector secrets properties for IBM Resilient connector + Connectors_secrets_properties_sentinelone: + description: Defines secrets for connectors when type is `.sentinelone`. properties: - message: + token: + description: The A SentinelOne API token. type: string - status_code: - type: integer required: - - status_code - - message - Security_Solution_Endpoint_Management_API_ActionLogRequestQuery: + - token + title: Connector secrets properties for a SentinelOne connector type: object + Connectors_secrets_properties_servicenow: + description: >- + Defines secrets for connectors when type is `.servicenow`, + `.servicenow-sir`, or `.servicenow-itom`. properties: - end_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate - page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' - page_size: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PageSize - start_date: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - Security_Solution_Endpoint_Management_API_ActionStateSuccessResponse: + clientSecret: + description: >- + The client secret assigned to your OAuth application. This property + is required when `isOAuth` is `true`. + type: string + password: + description: >- + The password for HTTP basic authentication. This property is + required when `isOAuth` is `false`. + type: string + privateKey: + description: >- + The RSA private key that you created for use in ServiceNow. This + property is required when `isOAuth` is `true`. + type: string + privateKeyPassword: + description: >- + The password for the RSA private key. This property is required when + `isOAuth` is `true` and you set a password on your private key. + type: string + username: + description: >- + The username for HTTP basic authentication. This property is + required when `isOAuth` is `false`. + type: string + title: >- + Connector secrets properties for ServiceNow ITOM, ServiceNow ITSM, and + ServiceNow SecOps connectors + type: object + Connectors_secrets_properties_slack_api: + description: Defines secrets for connectors when type is `.slack`. type: object properties: - body: - type: object - properties: - data: - type: object - properties: - canEncrypt: - type: boolean - required: - - data + token: + description: Slack bot user OAuth token. + type: string required: - - body - Security_Solution_Endpoint_Management_API_ActionStatusSuccessResponse: + - token + title: Connector secrets properties for a Web API Slack connector + Connectors_secrets_properties_slack_webhook: + description: Defines secrets for connectors when type is `.slack`. type: object properties: - body: - type: object - properties: - data: - type: object - properties: - agent_id: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentId - pending_actions: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionsSchema - required: - - agent_id - - pending_actions - required: - - data + webhookUrl: + description: Slack webhook url. + type: string required: - - body - Security_Solution_Endpoint_Management_API_AgentId: - description: Agent ID - type: string - Security_Solution_Endpoint_Management_API_AgentIds: - minLength: 1 - oneOf: - - items: - minLength: 1 - type: string - maxItems: 50 - minItems: 1 - type: array - - minLength: 1 + - webhookUrl + title: Connector secrets properties for a Webhook Slack connector + Connectors_secrets_properties_swimlane: + description: Defines secrets for connectors when type is `.swimlane`. + properties: + apiToken: + description: Swimlane API authentication token. type: string - Security_Solution_Endpoint_Management_API_AgentTypes: - enum: - - endpoint - - sentinel_one - - crowdstrike - type: string - Security_Solution_Endpoint_Management_API_AlertIds: - description: A list of alerts ids. - items: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NonEmptyString - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_CaseIds: - description: Case IDs to be updated (cannot contain empty strings) - items: - minLength: 1 - type: string - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_Command: - description: The command to be executed (cannot be an empty string) - enum: - - isolate - - unisolate - - kill-process - - suspend-process - - running-processes - - get-file - - execute - - upload - - scan - minLength: 1 - type: string - Security_Solution_Endpoint_Management_API_Commands: - items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Command' - type: array - Security_Solution_Endpoint_Management_API_Comment: - description: Optional comment - type: string - Security_Solution_Endpoint_Management_API_EndDate: - description: End date - type: string - Security_Solution_Endpoint_Management_API_EndpointIds: - description: List of endpoint IDs (cannot contain empty strings) - items: - minLength: 1 - type: string - minItems: 1 - type: array - Security_Solution_Endpoint_Management_API_ExecuteRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - command: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Command - timeout: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Timeout - required: - - command - required: - - parameters - Security_Solution_Endpoint_Management_API_GetEndpointActionListRouteQuery: + title: Connector secrets properties for a Swimlane connector type: object + Connectors_secrets_properties_teams: + description: Defines secrets for connectors when type is `.teams`. properties: - agentIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentIds - agentTypes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - commands: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Commands - endDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndDate - page: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_StartDate - types: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Types' - userIds: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_UserIds - withOutputs: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_WithOutputs - Security_Solution_Endpoint_Management_API_GetFileRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - path: - type: string - required: - - path - required: - - parameters - Security_Solution_Endpoint_Management_API_GetProcessesRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_IsolateRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_KillOrSuspendActionSchema: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - oneOf: - - type: object - properties: - pid: - minimum: 1 - type: integer - - type: object - properties: - entity_id: - minLength: 1 - type: string - required: - - parameters - Security_Solution_Endpoint_Management_API_ListRequestQuery: + webhookUrl: + description: > + The URL of the incoming webhook. If you are using the + `xpack.actions.allowedHosts` setting, add the hostname to the + allowed hosts. + type: string + required: + - webhookUrl + title: Connector secrets properties for a Microsoft Teams connector type: object + Connectors_secrets_properties_tines: + description: Defines secrets for connectors when type is `.tines`. properties: - hostStatuses: - items: - enum: - - healthy - - offline - - updating - - inactive - - unenrolled - type: string - type: array - kuery: - nullable: true - type: string - page: - default: 0 - description: Page number - minimum: 0 - type: integer - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - sortDirection: - enum: - - asc - - desc - nullable: true + email: + description: The email used to sign in to Tines. type: string - sortField: - enum: - - enrolled_at - - metadata.host.hostname - - host_status - - metadata.Endpoint.policy.applied.name - - metadata.Endpoint.policy.applied.status - - metadata.host.os.name - - metadata.host.ip - - metadata.agent.version - - last_checkin + token: + description: The Tines API token. type: string required: - - hostStatuses - Security_Solution_Endpoint_Management_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Endpoint_Management_API_NoParametersRequestSchema: + - email + - token + title: Connector secrets properties for a Tines connector type: object + Connectors_secrets_properties_torq: + description: Defines secrets for connectors when type is `.torq`. properties: - body: - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids + token: + description: The secret of the webhook authentication header. + type: string required: - - body - Security_Solution_Endpoint_Management_API_Page: - default: 1 - description: Page number - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_PageSize: - default: 10 - description: Number of items per page - maximum: 100 - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_Parameters: - description: Optional parameters object - type: object - Security_Solution_Endpoint_Management_API_PendingActionDataType: - type: integer - Security_Solution_Endpoint_Management_API_PendingActionsSchema: - oneOf: - - type: object - properties: - execute: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - get-file: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - isolate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - kill-process: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - running-processes: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - scan: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - suspend-process: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - unisolate: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - upload: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_PendingActionDataType - - additionalProperties: true - type: object - Security_Solution_Endpoint_Management_API_ProtectionUpdatesNoteResponse: + - token + title: Connector secrets properties for a Torq connector type: object + Connectors_secrets_properties_webhook: + description: Defines secrets for connectors when type is `.webhook`. properties: - note: + crt: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-crt-key`, it is a base64 encoded version of the CRT or CERT + file. type: string - Security_Solution_Endpoint_Management_API_ScanRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - parameters: - type: object - properties: - path: - type: string - required: - - path - required: - - parameters - Security_Solution_Endpoint_Management_API_StartDate: - description: Start date - type: string - Security_Solution_Endpoint_Management_API_SuccessResponse: - type: object - properties: {} - Security_Solution_Endpoint_Management_API_Timeout: - description: The maximum timeout value in milliseconds (optional) - minimum: 1 - type: integer - Security_Solution_Endpoint_Management_API_Type: - description: Type of response action - enum: - - automated - - manual - type: string - Security_Solution_Endpoint_Management_API_Types: - description: List of types of response actions - items: - $ref: '#/components/schemas/Security_Solution_Endpoint_Management_API_Type' - maxLength: 2 - minLength: 1 - type: array - Security_Solution_Endpoint_Management_API_UnisolateRouteRequestBody: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_NoParametersRequestSchema - Security_Solution_Endpoint_Management_API_UploadRouteRequestBody: - allOf: - - type: object - properties: - agent_type: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AgentTypes - alert_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_AlertIds - case_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_CaseIds - comment: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Comment - endpoint_ids: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_EndpointIds - parameters: - $ref: >- - #/components/schemas/Security_Solution_Endpoint_Management_API_Parameters - required: - - endpoint_ids - - type: object - properties: - file: - format: binary - type: string - parameters: - type: object - properties: - overwrite: - default: false - type: boolean - required: - - parameters - - file - Security_Solution_Endpoint_Management_API_UserIds: - description: User IDs - oneOf: - - items: - minLength: 1 - type: string - minItems: 1 - type: array - - minLength: 1 + key: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-crt-key`, it is a base64 encoded version of the KEY file. type: string - Security_Solution_Endpoint_Management_API_WithOutputs: - description: Shows detailed outputs for an action response - oneOf: - - items: - minLength: 1 - type: string - minItems: 1 - type: array - - minLength: 1 + password: + description: > + The password for HTTP basic authentication or the passphrase for the + SSL certificate files. If `hasAuth` is set to `true` and `authType` + is `webhook-authentication-basic`, this property is required. + type: string + pfx: + description: >- + If `authType` is `webhook-authentication-ssl` and `certType` is + `ssl-pfx`, it is a base64 encoded version of the PFX or P12 file. + type: string + user: + description: > + The username for HTTP basic authentication. If `hasAuth` is set to + `true` and `authType` is `webhook-authentication-basic`, this + property is required. type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadErrorItem: + title: Connector secrets properties for a Webhook connector type: object + Connectors_secrets_properties_xmatters: + description: Defines secrets for connectors when type is `.xmatters`. properties: - index: - type: integer - message: + password: + description: > + A user name for HTTP basic authentication. It is applicable only + when `usesBasic` is `true`. type: string - required: - - message - - index - Security_Solution_Entity_Analytics_API_AssetCriticalityBulkUploadStats: + secretsUrl: + description: > + The request URL for the Elastic Alerts trigger in xMatters with the + API key included in the URL. It is applicable only when `usesBasic` + is `false`. + type: string + user: + description: > + A password for HTTP basic authentication. It is applicable only when + `usesBasic` is `true`. + type: string + title: Connector secrets properties for an xMatters connector type: object - properties: - failed: - type: integer - successful: - type: integer - total: - type: integer - required: - - successful - - failed - - total - Security_Solution_Entity_Analytics_API_AssetCriticalityLevel: - description: The criticality level of the asset. - enum: - - low_impact - - medium_impact - - high_impact - - extreme_impact - type: string - Security_Solution_Entity_Analytics_API_AssetCriticalityRecord: - allOf: + Connectors_update_connector_request: + description: The properties vary depending on the connector type. + oneOf: + - $ref: '#/components/schemas/Connectors_update_connector_request_bedrock' + - $ref: '#/components/schemas/Connectors_update_connector_request_gemini' - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord - - type: object - properties: - '@timestamp': - description: The time the record was created or updated. - example: '2017-07-21T17:32:28Z' - format: date-time - type: string - required: - - '@timestamp' - Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts: + #/components/schemas/Connectors_update_connector_request_cases_webhook + - $ref: '#/components/schemas/Connectors_update_connector_request_d3security' + - $ref: '#/components/schemas/Connectors_update_connector_request_email' + - $ref: '#/components/schemas/Connectors_create_connector_request_genai' + - $ref: '#/components/schemas/Connectors_update_connector_request_index' + - $ref: '#/components/schemas/Connectors_update_connector_request_jira' + - $ref: '#/components/schemas/Connectors_update_connector_request_opsgenie' + - $ref: '#/components/schemas/Connectors_update_connector_request_pagerduty' + - $ref: '#/components/schemas/Connectors_update_connector_request_resilient' + - $ref: '#/components/schemas/Connectors_update_connector_request_sentinelone' + - $ref: '#/components/schemas/Connectors_update_connector_request_serverlog' + - $ref: '#/components/schemas/Connectors_update_connector_request_servicenow' + - $ref: >- + #/components/schemas/Connectors_update_connector_request_servicenow_itom + - $ref: '#/components/schemas/Connectors_update_connector_request_slack_api' + - $ref: >- + #/components/schemas/Connectors_update_connector_request_slack_webhook + - $ref: '#/components/schemas/Connectors_update_connector_request_swimlane' + - $ref: '#/components/schemas/Connectors_update_connector_request_teams' + - $ref: '#/components/schemas/Connectors_update_connector_request_tines' + - $ref: '#/components/schemas/Connectors_update_connector_request_torq' + - $ref: '#/components/schemas/Connectors_update_connector_request_webhook' + - $ref: '#/components/schemas/Connectors_update_connector_request_xmatters' + title: Update connector request body properties + Connectors_update_connector_request_bedrock: + title: Update Amazon Bedrock connector request type: object properties: - id_field: - $ref: '#/components/schemas/Security_Solution_Entity_Analytics_API_IdField' - description: The field representing the ID. - example: host.name - id_value: - description: The ID value of the asset. + config: + $ref: '#/components/schemas/Connectors_config_properties_bedrock' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_bedrock' required: - - id_value - - id_field - Security_Solution_Entity_Analytics_API_CreateAssetCriticalityRecord: - allOf: - - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityRecordIdParts - - type: object - properties: - criticality_level: - $ref: >- - #/components/schemas/Security_Solution_Entity_Analytics_API_AssetCriticalityLevel - required: - - criticality_level - Security_Solution_Entity_Analytics_API_IdField: - enum: - - host.name - - user.name - type: string - Security_Solution_Exceptions_API_CreateExceptionListItemComment: + - config + - name + Connectors_update_connector_request_cases_webhook: + title: Update Webhook - Case Managment connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + config: + $ref: '#/components/schemas/Connectors_config_properties_cases_webhook' + name: + description: The display name for the connector. + example: my-connector + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_cases_webhook' required: - - comment - Security_Solution_Exceptions_API_CreateExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateExceptionListItemComment - type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment: + - config + - name + Connectors_update_connector_request_d3security: + title: Update D3 Security connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + config: + $ref: '#/components/schemas/Connectors_config_properties_d3security' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_d3security' required: - - comment - Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemComment - type: array - Security_Solution_Exceptions_API_CreateRuleExceptionListItemProps: + - config + - name + - secrets + Connectors_update_connector_request_email: + title: Update email connector request type: object properties: - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_CreateRuleExceptionListItemCommentArray - default: [] - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + config: + $ref: '#/components/schemas/Connectors_config_properties_email' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - default: single - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - default: [] - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - default: [] - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_email' required: - - type + - config - name - - description - - entries - Security_Solution_Exceptions_API_ExceptionList: + Connectors_update_connector_request_gemini: + title: Update Google Gemini connector request type: object properties: - _version: - type: string - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListDescription - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - immutable: - type: boolean - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListMeta + config: + $ref: '#/components/schemas/Connectors_config_properties_gemini' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListType - updated_at: - format: date-time + description: The display name for the connector. type: string - updated_by: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_gemini' + required: + - config + - name + Connectors_update_connector_request_index: + title: Update index connector request + type: object + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_index' + name: + description: The display name for the connector. type: string - version: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListVersion required: - - id - - list_id - - type + - config - name - - description - - immutable - - namespace_type - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Exceptions_API_ExceptionListDescription: - type: string - Security_Solution_Exceptions_API_ExceptionListHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - description: 'Human readable string identifier, e.g. `trusted-linux-processes`' - Security_Solution_Exceptions_API_ExceptionListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItem: + Connectors_update_connector_request_jira: + title: Update Jira connector request type: object properties: - _version: - type: string - comments: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemCommentArray - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemDescription - entries: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryArray - expire_time: - format: date-time - type: string - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId - meta: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemMeta + config: + $ref: '#/components/schemas/Connectors_config_properties_jira' name: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemName - namespace_type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionNamespaceType - os_types: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray - tags: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemTags - tie_breaker_id: - type: string - type: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemType - updated_at: - format: date-time - type: string - updated_by: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_jira' required: - - id - - item_id - - list_id - - type + - config - name - - description - - entries - - namespace_type - - comments - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Exceptions_API_ExceptionListItemComment: + - secrets + Connectors_update_connector_request_opsgenie: + title: Update Opsgenie connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - created_at: - format: date-time - type: string - created_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - updated_at: - format: date-time + config: + $ref: '#/components/schemas/Connectors_config_properties_opsgenie' + name: + description: The display name for the connector. type: string - updated_by: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_opsgenie' required: - - id - - comment - - created_at - - created_by - Security_Solution_Exceptions_API_ExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemComment - type: array - Security_Solution_Exceptions_API_ExceptionListItemDescription: - type: string - Security_Solution_Exceptions_API_ExceptionListItemEntry: - anyOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryList - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNested - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard - discriminator: - propertyName: type - Security_Solution_Exceptions_API_ExceptionListItemEntryArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntry - type: array - Security_Solution_Exceptions_API_ExceptionListItemEntryExists: + - config + - name + - secrets + Connectors_update_connector_request_pagerduty: + title: Update PagerDuty connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - exists + config: + $ref: '#/components/schemas/Connectors_config_properties_pagerduty' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_pagerduty' required: - - type - - field - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryList: + - config + - name + - secrets + Connectors_update_connector_request_resilient: + title: Update IBM Resilient connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - list: - type: object - properties: - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListId' - type: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_ListType' - required: - - id - - type - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - list + config: + $ref: '#/components/schemas/Connectors_config_properties_resilient' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_resilient' required: - - type - - field - - list - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatch: + - config + - name + - secrets + Connectors_update_connector_request_sentinelone: + title: Update SentinelOne connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match + config: + $ref: '#/components/schemas/Connectors_config_properties_sentinelone' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_sentinelone' required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny: + - config + - name + - secrets + Connectors_update_connector_request_serverlog: + title: Update server log connector request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - match_any + name: + description: The display name for the connector. type: string - value: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_NonEmptyString - minItems: 1 - type: array required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryMatchWildcard: + - name + Connectors_update_connector_request_servicenow: + title: Update ServiceNow ITSM connector or ServiceNow SecOps request type: object properties: - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - operator: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryOperator - type: - enum: - - wildcard + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow' + name: + description: The display name for the connector. type: string - value: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - type - - field - - value - - operator - Security_Solution_Exceptions_API_ExceptionListItemEntryNested: + - config + - name + - secrets + Connectors_update_connector_request_servicenow_itom: + title: Create ServiceNow ITOM connector request type: object properties: - entries: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem - minItems: 1 - type: array - field: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - type: - enum: - - nested + config: + $ref: '#/components/schemas/Connectors_config_properties_servicenow_itom' + name: + description: The display name for the connector. type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_servicenow' required: - - type - - field - - entries - Security_Solution_Exceptions_API_ExceptionListItemEntryNestedEntryItem: - oneOf: - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatch - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryMatchAny - - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemEntryExists - Security_Solution_Exceptions_API_ExceptionListItemEntryOperator: - enum: - - excluded - - included - type: string - Security_Solution_Exceptions_API_ExceptionListItemHumanId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemMeta: - additionalProperties: true - type: object - Security_Solution_Exceptions_API_ExceptionListItemName: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ExceptionListItemOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Exceptions_API_ExceptionListItemTags: - items: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - type: array - Security_Solution_Exceptions_API_ExceptionListItemType: - enum: - - simple - type: string - Security_Solution_Exceptions_API_ExceptionListMeta: - additionalProperties: true - type: object - Security_Solution_Exceptions_API_ExceptionListName: - type: string - Security_Solution_Exceptions_API_ExceptionListOsType: - enum: - - linux - - macos - - windows - type: string - Security_Solution_Exceptions_API_ExceptionListOsTypeArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListOsType - type: array - Security_Solution_Exceptions_API_ExceptionListsImportBulkError: + - config + - name + - secrets + Connectors_update_connector_request_slack_api: + title: Update Slack connector request type: object properties: - error: - type: object - properties: - message: - type: string - status_code: - type: integer - required: - - status_code - - message - id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListId - item_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListItemHumanId - list_id: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListHumanId + config: + $ref: '#/components/schemas/Connectors_config_properties_slack_api' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_api' required: - - error - Security_Solution_Exceptions_API_ExceptionListsImportBulkErrorArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_ExceptionListsImportBulkError - type: array - Security_Solution_Exceptions_API_ExceptionListTags: - items: - type: string - type: array - Security_Solution_Exceptions_API_ExceptionListType: - enum: - - detection - - rule_default - - endpoint - - endpoint_trusted_apps - - endpoint_events - - endpoint_host_isolation_exceptions - - endpoint_blocklists - type: string - Security_Solution_Exceptions_API_ExceptionListVersion: - minimum: 1 - type: integer - Security_Solution_Exceptions_API_ExceptionNamespaceType: - description: > - Determines whether the exception container is available in all Kibana - spaces or just the space - - in which it is created, where: - - - - `single`: Only available in the Kibana space in which it is created. - - - `agnostic`: Available in all Kibana spaces. - enum: - - agnostic - - single - type: string - Security_Solution_Exceptions_API_FindExceptionListItemsFilter: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_FindExceptionListsFilter: - type: string - Security_Solution_Exceptions_API_ListId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - Security_Solution_Exceptions_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Exceptions_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Exceptions_API_PlatformErrorResponse: + - name + - secrets + Connectors_update_connector_request_slack_webhook: + title: Update Slack connector request type: object properties: - error: - type: string - message: + name: + description: The display name for the connector. type: string - statusCode: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_slack_webhook' required: - - statusCode - - error - - message - Security_Solution_Exceptions_API_RuleId: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_UUID' - Security_Solution_Exceptions_API_SiemErrorResponse: + - name + - secrets + Connectors_update_connector_request_swimlane: + title: Update Swimlane connector request type: object properties: - message: + config: + $ref: '#/components/schemas/Connectors_config_properties_swimlane' + name: + description: The display name for the connector. + example: my-connector type: string - status_code: - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_swimlane' required: - - status_code - - message - Security_Solution_Exceptions_API_UpdateExceptionListItemComment: + - config + - name + - secrets + Connectors_update_connector_request_teams: + title: Update Microsoft Teams connector request type: object properties: - comment: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' - id: - $ref: '#/components/schemas/Security_Solution_Exceptions_API_NonEmptyString' + name: + description: The display name for the connector. + type: string + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_teams' required: - - comment - Security_Solution_Exceptions_API_UpdateExceptionListItemCommentArray: - items: - $ref: >- - #/components/schemas/Security_Solution_Exceptions_API_UpdateExceptionListItemComment - type: array - Security_Solution_Exceptions_API_UUID: - description: A universally unique identifier - format: uuid - type: string - Security_Solution_Lists_API_FindListItemsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListItemsFilter: - type: string - Security_Solution_Lists_API_FindListsCursor: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_FindListsFilter: - type: string - Security_Solution_Lists_API_List: + - name + - secrets + Connectors_update_connector_request_tines: + title: Update Tines connector request type: object properties: - _version: - type: string - '@timestamp': - format: date-time - type: string - created_at: - format: date-time - type: string - created_by: - type: string - description: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListDescription' - deserializer: - type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - immutable: - type: boolean - meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListMetadata' + config: + $ref: '#/components/schemas/Connectors_config_properties_tines' name: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListName' - serializer: - type: string - tie_breaker_id: - type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - updated_at: - format: date-time - type: string - updated_by: + description: The display name for the connector. type: string - version: - minimum: 1 - type: integer + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_tines' required: - - id - - type + - config - name - - description - - immutable - - version - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Lists_API_ListDescription: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItem: + - secrets + Connectors_update_connector_request_torq: + title: Update Torq connector request type: object properties: - _version: - type: string - '@timestamp': - format: date-time - type: string - created_at: - format: date-time - type: string - created_by: - type: string - deserializer: + config: + $ref: '#/components/schemas/Connectors_config_properties_torq' + name: + description: The display name for the connector. type: string - id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemId' - list_id: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListId' - meta: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemMetadata' - serializer: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_torq' + required: + - config + - name + - secrets + Connectors_update_connector_request_webhook: + title: Update Webhook connector request + type: object + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_webhook' + name: + description: The display name for the connector. type: string - tie_breaker_id: + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_webhook' + required: + - config + - name + - secrets + Connectors_update_connector_request_xmatters: + title: Update xMatters connector request + type: object + properties: + config: + $ref: '#/components/schemas/Connectors_config_properties_xmatters' + name: + description: The display name for the connector. type: string - type: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListType' - updated_at: - format: date-time + secrets: + $ref: '#/components/schemas/Connectors_secrets_properties_xmatters' + required: + - config + - name + - secrets + Data_views_400_response: + title: Bad request + type: object + properties: + error: + example: Bad Request type: string - updated_by: + message: type: string - value: - $ref: '#/components/schemas/Security_Solution_Lists_API_ListItemValue' + statusCode: + example: 400 + type: number required: - - id - - type - - list_id - - value - - tie_breaker_id - - created_at - - created_by - - updated_at - - updated_by - Security_Solution_Lists_API_ListItemId: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListItemMetadata: - additionalProperties: true + - statusCode + - error + - message + Data_views_404_response: type: object - Security_Solution_Lists_API_ListItemPrivileges: + properties: + error: + enum: + - Not Found + example: Not Found + type: string + message: + example: >- + Saved object [index-pattern/caaad6d0-920c-11ed-b36a-874bd1548a00] + not found + type: string + statusCode: + enum: + - 404 + example: 404 + type: integer + Data_views_allownoindex: + description: Allows the data view saved object to exist before the data is available. + type: boolean + Data_views_create_data_view_request_object: + title: Create data view request type: object properties: - application: - additionalProperties: - type: boolean - type: object - cluster: - additionalProperties: - type: boolean + data_view: + description: The data view object. type: object - has_all_requested: + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldAttrs: + additionalProperties: + $ref: '#/components/schemas/Data_views_fieldattrs' + type: object + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + id: + type: string + name: + description: The data view name. + type: string + namespaces: + $ref: '#/components/schemas/Data_views_namespaces' + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + type: + $ref: '#/components/schemas/Data_views_type' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta' + version: + type: string + required: + - title + override: + default: false + description: >- + Override an existing data view if a data view with the provided + title already exists. type: boolean - index: - additionalProperties: - additionalProperties: - type: boolean - type: object - type: object - username: - type: string required: - - username - - has_all_requested - - cluster - - index - - application - Security_Solution_Lists_API_ListItemValue: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListMetadata: - additionalProperties: true - type: object - Security_Solution_Lists_API_ListName: - $ref: '#/components/schemas/Security_Solution_Lists_API_NonEmptyString' - Security_Solution_Lists_API_ListPrivileges: + - data_view + Data_views_data_view_response_object: + title: Data view response properties type: object properties: - application: - additionalProperties: - type: boolean - type: object - cluster: - additionalProperties: - type: boolean - type: object - has_all_requested: - type: boolean - index: - additionalProperties: - additionalProperties: - type: boolean - type: object + data_view: type: object - username: - type: string - required: - - username - - has_all_requested - - cluster - - index - - application - Security_Solution_Lists_API_ListType: - enum: - - binary - - boolean - - byte - - date - - date_nanos - - date_range - - double - - double_range - - float - - float_range - - geo_point - - geo_shape - - half_float - - integer - - integer_range - - ip - - ip_range - - keyword - - long - - long_range - - shape - - short - - text - type: string - Security_Solution_Lists_API_NonEmptyString: - description: A string that is not empty and does not contain only whitespace - minLength: 1 - pattern: ^(?! *$).+$ - type: string - Security_Solution_Lists_API_PlatformErrorResponse: + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldAttrs: + additionalProperties: + $ref: '#/components/schemas/Data_views_fieldattrs' + type: object + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + id: + example: ff959d40-b880-11e8-a6d9-e546fe2bba5f + type: string + name: + description: The data view name. + type: string + namespaces: + $ref: '#/components/schemas/Data_views_namespaces' + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta_response' + version: + example: WzQ2LDJd + type: string + Data_views_fieldattrs: + description: A map of field attributes by field name. type: object properties: - error: + count: + description: Popularity count for the field. + type: integer + customDescription: + description: Custom description for the field. + maxLength: 300 type: string - message: + customLabel: + description: Custom label for the field. type: string - statusCode: - type: integer - required: - - statusCode - - error - - message - Security_Solution_Lists_API_SiemErrorResponse: + Data_views_fieldformats: + description: A map of field formats by field name. + type: object + Data_views_namespaces: + description: >- + An array of space identifiers for sharing the data view between multiple + spaces. + items: + default: default + type: string + type: array + Data_views_runtimefieldmap: + description: A map of runtime field definitions by field name. type: object properties: - message: + script: + type: object + properties: + source: + description: Script for the runtime field. + type: string + type: + description: Mapping type of the runtime field. type: string - status_code: - type: integer required: - - status_code - - message - Security_Solution_Osquery_API_ArrayQueries: + - script + - type + Data_views_sourcefilters: + description: The array of field names you want to filter out in Discover. items: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueriesItem' + type: object + properties: + value: + type: string + required: + - value type: array - Security_Solution_Osquery_API_ArrayQueriesItem: - type: object - properties: - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_CreateLiveQueryRequestBody: + Data_views_swap_data_view_request_object: + title: Data view reference swap request type: object properties: - agent_all: + delete: + description: Deletes referenced saved object if all references are removed. type: boolean - agent_ids: - items: - type: string - type: array - agent_platforms: - items: - type: string - type: array - agent_policy_ids: - items: - type: string - type: array - alert_ids: - items: - type: string - type: array - case_ids: - items: - type: string - type: array - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - event_ids: - items: - type: string - type: array - metadata: - nullable: true - type: object - pack_id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackIdOrUndefined' - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ArrayQueries' - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - Security_Solution_Osquery_API_CreatePacksRequestBody: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined - name: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackName' - policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' - shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_CreateSavedQueryRequestBody: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - interval: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_DefaultSuccessResponse: - type: object - properties: {} - Security_Solution_Osquery_API_Description: - type: string - Security_Solution_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Description' - nullable: true - Security_Solution_Osquery_API_ECSMapping: - additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMappingItem' - type: object - Security_Solution_Osquery_API_ECSMappingItem: - type: object - properties: - field: - type: string - value: + forId: + description: Limit the affected saved objects to one or more by identifier. oneOf: - type: string - items: type: string type: array - Security_Solution_Osquery_API_ECSMappingOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ECSMapping' - nullable: true - Security_Solution_Osquery_API_Enabled: - type: boolean - Security_Solution_Osquery_API_EnabledOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Enabled' - nullable: true - Security_Solution_Osquery_API_FindLiveQueryRequestQuery: - type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindPacksRequestQuery: - type: object - properties: - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_FindSavedQueryRequestQuery: - type: object - properties: - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_GetLiveQueryResultsRequestQuery: - type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Solution_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PageOrUndefined' - pageSize: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PageSizeOrUndefined - sort: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SortOrUndefined' - sortOrder: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SortOrderOrUndefined - Security_Solution_Osquery_API_Id: - type: string - Security_Solution_Osquery_API_Interval: - type: string - Security_Solution_Osquery_API_IntervalOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Interval' - nullable: true - Security_Solution_Osquery_API_KueryOrUndefined: - nullable: true - type: string - Security_Solution_Osquery_API_ObjectQueries: - additionalProperties: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueriesItem' - type: object - Security_Solution_Osquery_API_ObjectQueriesItem: - type: object - properties: - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Id' - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PlatformOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - saved_query_id: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SavedQueryIdOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_PackId: - type: string - Security_Solution_Osquery_API_PackIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - nullable: true - Security_Solution_Osquery_API_PackName: - type: string - Security_Solution_Osquery_API_PageOrUndefined: - nullable: true - type: integer - Security_Solution_Osquery_API_PageSizeOrUndefined: - nullable: true - type: integer - Security_Solution_Osquery_API_Platform: - type: string - Security_Solution_Osquery_API_PlatformOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Platform' - nullable: true - Security_Solution_Osquery_API_PolicyIds: - items: - type: string - type: array - Security_Solution_Osquery_API_PolicyIdsOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PolicyIds' - nullable: true - Security_Solution_Osquery_API_Query: - type: string - Security_Solution_Osquery_API_QueryOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Query' - nullable: true - Security_Solution_Osquery_API_Removed: - type: boolean - Security_Solution_Osquery_API_RemovedOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Removed' - nullable: true - Security_Solution_Osquery_API_SavedQueryId: - type: string - Security_Solution_Osquery_API_SavedQueryIdOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - nullable: true - Security_Solution_Osquery_API_Shards: - additionalProperties: - type: number - type: object - Security_Solution_Osquery_API_Snapshot: - type: boolean - Security_Solution_Osquery_API_SnapshotOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Snapshot' - nullable: true - Security_Solution_Osquery_API_SortOrderOrUndefined: - oneOf: - - nullable: true + forType: + description: Limit the affected saved objects by type. type: string - - enum: - - asc - - desc - Security_Solution_Osquery_API_SortOrUndefined: - nullable: true + fromId: + description: The saved object reference to change. + type: string + fromType: + description: > + Specify the type of the saved object reference to alter. The default + value is `index-pattern` for data views. + type: string + toId: + description: New saved object reference value to replace the old value. + type: string + required: + - fromId + - toId + Data_views_timefieldname: + description: 'The timestamp field name, which you use for time-based data views.' type: string - Security_Solution_Osquery_API_UpdatePacksRequestBody: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - enabled: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_EnabledOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_PackId' - policy_ids: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_PolicyIdsOrUndefined - queries: - $ref: '#/components/schemas/Security_Solution_Osquery_API_ObjectQueries' - shards: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Shards' - Security_Solution_Osquery_API_UpdateSavedQueryRequestBody: - type: object - properties: - description: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - ecs_mapping: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_ECSMappingOrUndefined - id: - $ref: '#/components/schemas/Security_Solution_Osquery_API_SavedQueryId' - interval: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_IntervalOrUndefined - platform: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_DescriptionOrUndefined - query: - $ref: '#/components/schemas/Security_Solution_Osquery_API_QueryOrUndefined' - removed: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_RemovedOrUndefined - snapshot: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_SnapshotOrUndefined - version: - $ref: >- - #/components/schemas/Security_Solution_Osquery_API_VersionOrUndefined - Security_Solution_Osquery_API_Version: + Data_views_title: + description: >- + Comma-separated list of data streams, indices, and aliases that you want + to search. Supports wildcards (`*`). type: string - Security_Solution_Osquery_API_VersionOrUndefined: - $ref: '#/components/schemas/Security_Solution_Osquery_API_Version' - nullable: true - Security_Solution_Timeline_API_BareNote: + Data_views_type: + description: 'When set to `rollup`, identifies the rollup data views.' + type: string + Data_views_typemeta: + description: >- + When you use rollup indices, contains the field list for the rollup data + view API endpoints. type: object properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - nullable: true - type: string - note: - nullable: true - type: string - timelineId: - nullable: true - type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true - type: string + aggs: + description: A map of rollup restrictions by aggregation type and field name. + type: object + params: + description: Properties for retrieving rollup fields. + type: object required: - - timelineId - Security_Solution_Timeline_API_ColumnHeaderResult: + - aggs + - params + Data_views_typemeta_response: + description: >- + When you use rollup indices, contains the field list for the rollup data + view API endpoints. + nullable: true type: object properties: - aggregatable: - type: boolean - category: - type: string - columnHeaderType: - type: string - description: - type: string - example: - oneOf: - - type: string - - type: number - id: - type: string - indexes: - items: - type: string - type: array - name: - type: string - placeholder: - type: string - searchable: - type: boolean - type: - type: string - Security_Solution_Timeline_API_DataProviderQueryMatch: + aggs: + description: A map of rollup restrictions by aggregation type and field name. + type: object + params: + description: Properties for retrieving rollup fields. + type: object + Data_views_update_data_view_request_object: + title: Update data view request type: object properties: - enabled: - nullable: true - type: boolean - excluded: - nullable: true + data_view: + description: > + The data view properties you want to update. Only the specified + properties are updated in the data view. Unspecified fields stay as + they are persisted. + type: object + properties: + allowNoIndex: + $ref: '#/components/schemas/Data_views_allownoindex' + fieldFormats: + $ref: '#/components/schemas/Data_views_fieldformats' + fields: + type: object + name: + type: string + runtimeFieldMap: + additionalProperties: + $ref: '#/components/schemas/Data_views_runtimefieldmap' + type: object + sourceFilters: + $ref: '#/components/schemas/Data_views_sourcefilters' + timeFieldName: + $ref: '#/components/schemas/Data_views_timefieldname' + title: + $ref: '#/components/schemas/Data_views_title' + type: + $ref: '#/components/schemas/Data_views_type' + typeMeta: + $ref: '#/components/schemas/Data_views_typemeta' + refresh_fields: + default: false + description: Reloads the data view fields after the data view is updated. type: boolean - id: - nullable: true - type: string - kqlQuery: - nullable: true - type: string - name: - nullable: true - type: string - queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - Security_Solution_Timeline_API_DataProviderResult: + required: + - data_view + Kibana_HTTP_APIs_core_status_redactedResponse: + additionalProperties: false + description: A minimal representation of Kibana's operational status. type: object properties: - and: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderQueryMatch - nullable: true - type: array - enabled: - nullable: true - type: boolean - excluded: - nullable: true - type: boolean - id: - nullable: true - type: string - kqlQuery: - nullable: true - type: string - name: - nullable: true - type: string - queryMatch: - $ref: '#/components/schemas/Security_Solution_Timeline_API_QueryMatchResult' - nullable: true - type: - $ref: '#/components/schemas/Security_Solution_Timeline_API_DataProviderType' - nullable: true - Security_Solution_Timeline_API_DataProviderType: + status: + additionalProperties: false + type: object + properties: + overall: + additionalProperties: false + type: object + properties: + level: + description: Service status levels as human and machine readable values. + enum: + - available + - degraded + - unavailable + - critical + type: string + required: + - level + required: + - overall + required: + - status + Kibana_HTTP_APIs_core_status_response: + additionalProperties: false description: >- - The type of data provider to create. Valid values are `default` and - `template`. - enum: - - default - - template - type: string - Security_Solution_Timeline_API_DocumentIds: - oneOf: - - items: - type: string - type: array - - type: string - Security_Solution_Timeline_API_FavoriteTimelineResponse: + Kibana's operational status as well as a detailed breakdown of plugin + statuses indication of various loads (like event loop utilization and + network traffic) at time of request. type: object properties: - code: - nullable: true - type: number - favorite: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult - type: array - message: - nullable: true - type: string - savedObjectId: + metrics: + additionalProperties: false + description: Metric groups collected by Kibana. + type: object + properties: + collection_interval_in_millis: + description: The interval at which metrics should be collected. + type: number + elasticsearch_client: + additionalProperties: false + description: Current network metrics of Kibana's Elasticsearch client. + type: object + properties: + totalActiveSockets: + description: Count of network sockets currently in use. + type: number + totalIdleSockets: + description: Count of network sockets currently idle. + type: number + totalQueuedRequests: + description: Count of requests not yet assigned to sockets. + type: number + required: + - totalActiveSockets + - totalIdleSockets + - totalQueuedRequests + last_updated: + description: The time metrics were collected. + type: string + required: + - elasticsearch_client + - last_updated + - collection_interval_in_millis + name: + description: Kibana instance name. type: string - templateTimelineId: - nullable: true + status: + additionalProperties: false + type: object + properties: + core: + additionalProperties: false + description: Statuses of core Kibana services. + type: object + properties: + elasticsearch: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: >- + An unstructured set of extra metadata about this + service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + savedObjects: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: >- + An unstructured set of extra metadata about this + service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + required: + - elasticsearch + - savedObjects + overall: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: Service status levels as human and machine readable values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: An unstructured set of extra metadata about this service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + plugins: + additionalProperties: + additionalProperties: false + type: object + properties: + detail: + description: Human readable detail of the service status. + type: string + documentationUrl: + description: A URL to further documentation regarding this service. + type: string + level: + description: >- + Service status levels as human and machine readable + values. + enum: + - available + - degraded + - unavailable + - critical + type: string + meta: + additionalProperties: {} + description: An unstructured set of extra metadata about this service. + type: object + summary: + description: A human readable summary of the service status. + type: string + required: + - level + - summary + - meta + description: A dynamic mapping of plugin ID to plugin status. + type: object + required: + - overall + - core + - plugins + uuid: + description: >- + Unique, generated Kibana instance UUID. This UUID should persist + even if the Kibana process restarts. type: string - templateTimelineVersion: - nullable: true - type: number - timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' version: - type: string - required: - - savedObjectId - - version - Security_Solution_Timeline_API_FavoriteTimelineResult: - type: object - properties: - favoriteDate: - nullable: true - type: number - fullName: - nullable: true - type: string - userName: - nullable: true - type: string - Security_Solution_Timeline_API_FilterTimelineResult: - type: object - properties: - exists: - type: boolean - match_all: - type: string - meta: + additionalProperties: false type: object properties: - alias: - type: string - controlledBy: - type: string - disabled: - type: boolean - field: - type: string - formattedValue: + build_date: + description: The date and time of this build. type: string - index: + build_flavor: + description: >- + The build flavour determines configuration and behavior of + Kibana. On premise users will almost always run the + "traditional" flavour, while other flavours are reserved for + Elastic-specific use cases. + enum: + - serverless + - traditional type: string - key: + build_hash: + description: >- + A unique hash value representing the git commit of this Kibana + build. type: string - negate: + build_number: + description: >- + A monotonically increasing number, each subsequent build will + have a higher number. + type: number + build_snapshot: + description: Whether this build is a snapshot build. type: boolean - params: - type: string - type: - type: string - value: + number: + description: A semantic version number. type: string - missing: - type: string - query: - type: string - range: + required: + - number + - build_hash + - build_number + - build_snapshot + - build_flavor + - build_date + required: + - name + - uuid + - version + - status + - metrics + Machine_learning_APIs_mlSync200Response: + properties: + datafeedsAdded: + additionalProperties: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' + description: >- + If a saved object for an anomaly detection job is missing a datafeed + identifier, it is added when you run the sync machine learning saved + objects API. + type: object + datafeedsRemoved: + additionalProperties: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseDatafeeds' + description: >- + If a saved object for an anomaly detection job references a datafeed + that no longer exists, it is deleted when you run the sync machine + learning saved objects API. + type: object + savedObjectsCreated: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsCreated + savedObjectsDeleted: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted + title: Successful sync API response + type: object + Machine_learning_APIs_mlSync4xxResponse: + properties: + error: + example: Unauthorized type: string - script: + message: type: string - Security_Solution_Timeline_API_ImportTimelineResult: + statusCode: + example: 401 + type: integer + title: Unsuccessful sync API response type: object + Machine_learning_APIs_mlSyncResponseAnomalyDetectors: + description: >- + The sync machine learning saved objects API response contains this + object when there are anomaly detection jobs affected by the + synchronization. There is an object for each relevant job, which + contains the synchronization status. properties: - errors: - items: - type: object - properties: - error: - type: object - properties: - message: - type: string - status_code: - type: number - id: - type: string - type: array success: - type: boolean - success_count: - type: number - timelines_installed: - type: number - timelines_updated: - type: number - Security_Solution_Timeline_API_ImportTimelines: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' - - type: object - properties: - eventNotes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - nullable: true - type: array - globalNotes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - nullable: true - type: array - pinnedEventIds: - items: - type: string - nullable: true - type: array - savedObjectId: - nullable: true - type: string - version: - nullable: true - type: string - Security_Solution_Timeline_API_Note: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_BareNote' - - type: object - properties: - noteId: - type: string - version: - type: string - Security_Solution_Timeline_API_PinnedEvent: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for anomaly detection jobs type: object + Machine_learning_APIs_mlSyncResponseDatafeeds: + description: >- + The sync machine learning saved objects API response contains this + object when there are datafeeds affected by the synchronization. There + is an object for each relevant datafeed, which contains the + synchronization status. properties: - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - eventId: - type: string - pinnedEventId: - type: string - timelineId: - type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true - type: string - version: - type: string - required: - - eventId - - pinnedEventId - - timelineId - - version - Security_Solution_Timeline_API_QueryMatchResult: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for datafeeds type: object + Machine_learning_APIs_mlSyncResponseDataFrameAnalytics: + description: >- + The sync machine learning saved objects API response contains this + object when there are data frame analytics jobs affected by the + synchronization. There is an object for each relevant job, which + contains the synchronization status. properties: - displayField: - nullable: true - type: string - displayValue: - nullable: true - type: string - field: - nullable: true - type: string - operator: - nullable: true - type: string - value: - nullable: true - type: string - Security_Solution_Timeline_API_Readable: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for data frame analytics jobs type: object + Machine_learning_APIs_mlSyncResponseSavedObjectsCreated: + description: >- + If saved objects are missing for machine learning jobs or trained + models, they are created when you run the sync machine learning saved + objects API. properties: - _data: - additionalProperties: true - type: object - _encoding: - type: string - _events: - additionalProperties: true - type: object - _eventsCount: - type: number - _maxListeners: - additionalProperties: true + anomaly-detector: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors + description: >- + If saved objects are missing for anomaly detection jobs, they are + created. type: object - _position: - type: number - _read: - additionalProperties: true + data-frame-analytics: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics + description: >- + If saved objects are missing for data frame analytics jobs, they are + created. type: object - _readableState: - additionalProperties: true + trained-model: + additionalProperties: + $ref: >- + #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels + description: 'If saved objects are missing for trained models, they are created.' type: object - readable: - type: boolean - Security_Solution_Timeline_API_RowRendererId: - enum: - - alert - - alerts - - auditd - - auditd_file - - library - - netflow - - plain - - registry - - suricata - - system - - system_dns - - system_endgame_process - - system_file - - system_fim - - system_security_event - - system_socket - - threat_match - - zeek - type: string - Security_Solution_Timeline_API_SavedTimeline: + title: Sync API response for created saved objects type: object + Machine_learning_APIs_mlSyncResponseSavedObjectsDeleted: + description: >- + If saved objects exist for machine learning jobs or trained models that + no longer exist, they are deleted when you run the sync machine learning + saved objects API. properties: - columns: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_ColumnHeaderResult - nullable: true - type: array - created: - nullable: true - type: number - createdBy: - nullable: true - type: string - dataProviders: - items: + anomaly-detector: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_DataProviderResult - nullable: true - type: array - dataViewId: - nullable: true - type: string - dateRange: - nullable: true - type: object - properties: - end: - oneOf: - - type: string - - type: number - start: - oneOf: - - type: string - - type: number - description: - nullable: true - type: string - eqlOptions: - nullable: true + #/components/schemas/Machine_learning_APIs_mlSyncResponseAnomalyDetectors + description: >- + If there are saved objects exist for nonexistent anomaly detection + jobs, they are deleted. type: object - properties: - eventCategoryField: - nullable: true - type: string - query: - nullable: true - type: string - size: - oneOf: - - nullable: true - type: string - - nullable: true - type: number - tiebreakerField: - nullable: true - type: string - timestampField: - nullable: true - type: string - eventType: - nullable: true - type: string - excludedRowRendererIds: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_RowRendererId' - nullable: true - type: array - favorite: - items: + data-frame-analytics: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FavoriteTimelineResult - nullable: true - type: array - filters: - items: + #/components/schemas/Machine_learning_APIs_mlSyncResponseDataFrameAnalytics + description: >- + If there are saved objects exist for nonexistent data frame + analytics jobs, they are deleted. + type: object + trained-model: + additionalProperties: $ref: >- - #/components/schemas/Security_Solution_Timeline_API_FilterTimelineResult - nullable: true - type: array - indexNames: - items: - type: string - nullable: true - type: array - kqlMode: - nullable: true - type: string - kqlQuery: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_SerializedFilterQueryResult - nullable: true - savedQueryId: - nullable: true - type: string - savedSearchId: - nullable: true - type: string - sort: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Sort' - nullable: true - status: - enum: - - active - - draft - - immutable - nullable: true - type: string - templateTimelineId: - nullable: true - type: string - templateTimelineVersion: - nullable: true - type: number - timelineType: - $ref: '#/components/schemas/Security_Solution_Timeline_API_TimelineType' - nullable: true - title: - nullable: true - type: string - updated: - nullable: true - type: number - updatedBy: - nullable: true - type: string - Security_Solution_Timeline_API_SerializedFilterQueryResult: + #/components/schemas/Machine_learning_APIs_mlSyncResponseTrainedModels + description: >- + If there are saved objects exist for nonexistent trained models, + they are deleted. + type: object + title: Sync API response for deleted saved objects type: object + Machine_learning_APIs_mlSyncResponseSuccess: + description: The success or failure of the synchronization. + type: boolean + Machine_learning_APIs_mlSyncResponseTrainedModels: + description: >- + The sync machine learning saved objects API response contains this + object when there are trained models affected by the synchronization. + There is an object for each relevant trained model, which contains the + synchronization status. properties: - filterQuery: - nullable: true - type: object - properties: - kuery: - nullable: true - type: object - properties: - expression: - nullable: true - type: string - kind: - nullable: true - type: string - serializedQuery: - nullable: true - type: string - Security_Solution_Timeline_API_Sort: - oneOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' - - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_SortObject' - type: array - Security_Solution_Timeline_API_SortFieldTimeline: - description: The field to sort the timelines by. - enum: - - title - - description - - updated - - created - type: string - Security_Solution_Timeline_API_SortObject: + success: + $ref: '#/components/schemas/Machine_learning_APIs_mlSyncResponseSuccess' + title: Sync API response for trained models + type: object + Saved_objects_400_response: + title: Bad request type: object properties: - columnId: - nullable: true - type: string - columnType: - nullable: true + error: + enum: + - Bad Request type: string - sortDirection: - nullable: true + message: type: string - Security_Solution_Timeline_API_TimelineResponse: - allOf: - - $ref: '#/components/schemas/Security_Solution_Timeline_API_SavedTimeline' - - type: object - properties: - eventIdToNoteIds: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' - type: array - noteIds: - items: - type: string - type: array - notes: - items: - $ref: '#/components/schemas/Security_Solution_Timeline_API_Note' - type: array - pinnedEventIds: - items: - type: string - type: array - pinnedEventsSaveObject: - items: - $ref: >- - #/components/schemas/Security_Solution_Timeline_API_PinnedEvent - type: array - savedObjectId: - type: string - version: - type: string - required: - - savedObjectId - - version - Security_Solution_Timeline_API_TimelineStatus: - description: >- - The status of the timeline. Valid values are `active`, `draft`, and - `immutable`. - enum: - - active - - draft - - immutable - type: string - Security_Solution_Timeline_API_TimelineType: - description: >- - The type of timeline to create. Valid values are `default` and - `template`. - enum: - - default - - template - type: string + statusCode: + enum: + - 400 + type: integer + required: + - error + - message + - statusCode + Saved_objects_attributes: + description: > + The data that you want to create. WARNING: When you create saved + objects, attributes are not validated, which allows you to pass + arbitrary and ill-formed data into the API that can break Kibana. Make + sure any data that you send to the API is properly formed. + type: object + Saved_objects_initial_namespaces: + description: > + Identifiers for the spaces in which this object is created. If this is + provided, the object is created only in the explicitly defined spaces. + If this is not provided, the object is created in the current space + (default behavior). For shareable object types (registered with + `namespaceType: 'multiple'`), this option can be used to specify one or + more spaces, including the "All spaces" identifier ('*'). For isolated + object types (registered with `namespaceType: 'single'` or + `namespaceType: 'multiple-isolated'`), this option can only be used to + specify a single space, and the "All spaces" identifier ('*') is not + allowed. For global object types (`registered with `namespaceType: + agnostic`), this option cannot be used. + type: array + Saved_objects_references: + description: > + Objects with `name`, `id`, and `type` properties that describe the other + saved objects that this object references. Use `name` in attributes to + refer to the other saved object, but never the `id`, which can update + automatically during migrations or import and export. + type: array SLOs_400_response: title: Bad request type: object @@ -29051,30 +11052,6 @@ tags: Manage Kibana saved objects, including dashboards, visualizations, and more. name: saved objects - - description: Manage and interact with Security Assistant resources. - name: Security AI Assistant API - - description: >- - You can create rules that automatically turn events and external alerts - sent to Elastic Security into detection alerts. These alerts are displayed - on the Detections page. - name: Security Solution Detections API - - description: Interact with and manage endpoints running the Elastic Defend integration. - name: Security Solution Endpoint Management API - - description: '' - name: Security Solution Entity Analytics API - - description: >- - Exceptions API allows you to manage detection rule exceptions to prevent a - rule from generating an alert from incoming events even when the rule's - other criteria are met. - name: Security Solution Exceptions API - - description: 'Lists API allows you to manage lists of keywords, IPs or IP ranges items.' - name: Security Solution Lists API - - description: 'Run live queries, manage packs and saved queries.' - name: Security Solution Osquery API - - description: >- - You can create Timelines and Timeline templates via the API, as well as - import new Timelines from an ndjson file. - name: Security Solution Timeline API - description: 'SLO APIs enable you to define, manage and track service-level objectives' name: slo - name: system diff --git a/oas_docs/overlays/kibana.overlays.yaml b/oas_docs/overlays/kibana.overlays.yaml index 22162721c6867c..324e3bdc47c651 100644 --- a/oas_docs/overlays/kibana.overlays.yaml +++ b/oas_docs/overlays/kibana.overlays.yaml @@ -105,10 +105,10 @@ actions: description: Change displayName update: x-displayName: "Saved objects" - # - target: '$.tags[?(@.name=="slo")]' - # description: Change displayName - # update: - # x-displayName: "Service level objectives" + - target: '$.tags[?(@.name=="slo")]' + description: Change displayName + update: + x-displayName: "Service level objectives" - target: '$.tags[?(@.name=="system")]' description: Change displayName update: diff --git a/oas_docs/scripts/merge_ess_oas.js b/oas_docs/scripts/merge_ess_oas.js index a1812670c15f96..f786a1ce11921c 100644 --- a/oas_docs/scripts/merge_ess_oas.js +++ b/oas_docs/scripts/merge_ess_oas.js @@ -24,12 +24,6 @@ const { REPO_ROOT } = require('@kbn/repo-info'); `${REPO_ROOT}/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml`, // Security solution - `${REPO_ROOT}/x-pack/plugins/security_solution/docs/openapi/ess/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-lists-common/docs/openapi/ess/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/*.schema.yaml`, - `${REPO_ROOT}/x-pack/packages/kbn-elastic-assistant-common/docs/openapi/ess/*.schema.yaml`, - `${REPO_ROOT}/x-pack/plugins/osquery/docs/openapi/ess/*.schema.yaml`, ], outputFilePath: `${REPO_ROOT}/oas_docs/output/kibana.yaml`, options: { diff --git a/oas_docs/scripts/merge_ess_oas_staging.js b/oas_docs/scripts/merge_ess_oas_staging.js new file mode 100644 index 00000000000000..1b490067e224d9 --- /dev/null +++ b/oas_docs/scripts/merge_ess_oas_staging.js @@ -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 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. + */ + +require('../../src/setup_node_env'); +const { merge } = require('@kbn/openapi-bundler'); +const { REPO_ROOT } = require('@kbn/repo-info'); + +(async () => { + await merge({ + sourceGlobs: [ + `${REPO_ROOT}/oas_docs/bundle.json`, + `${REPO_ROOT}/x-pack/plugins/actions/docs/openapi/bundled.yaml`, + `${REPO_ROOT}/src/plugins/data_views/docs/openapi/bundled.yaml`, + `${REPO_ROOT}/x-pack/plugins/ml/common/openapi/ml_apis.yaml`, + `${REPO_ROOT}/packages/core/saved-objects/docs/openapi/bundled.yaml`, + + // Observability Solution + `${REPO_ROOT}/x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml`, + `${REPO_ROOT}/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml`, + + // Security solution + `${REPO_ROOT}/x-pack/plugins/security_solution/docs/openapi/ess/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-lists-common/docs/openapi/ess/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-exceptions-common/docs/openapi/ess/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/ess/*.schema.yaml`, + `${REPO_ROOT}/x-pack/packages/kbn-elastic-assistant-common/docs/openapi/ess/*.schema.yaml`, + `${REPO_ROOT}/x-pack/plugins/osquery/docs/openapi/ess/*.schema.yaml`, + ], + outputFilePath: `${REPO_ROOT}/oas_docs/output/kibana.staging.yaml`, + options: { + prototypeDocument: `${REPO_ROOT}/oas_docs/kibana.info.yaml`, + }, + }); +})(); diff --git a/oas_docs/scripts/merge_serverless_oas.js b/oas_docs/scripts/merge_serverless_oas.js index e1b9bf3c7ab174..9ca63027d180a5 100644 --- a/oas_docs/scripts/merge_serverless_oas.js +++ b/oas_docs/scripts/merge_serverless_oas.js @@ -24,16 +24,10 @@ const { REPO_ROOT } = require('@kbn/repo-info'); `${REPO_ROOT}/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml`, // Security solution - `${REPO_ROOT}/x-pack/plugins/security_solution/docs/openapi/serverless/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/*.schema.yaml`, - `${REPO_ROOT}/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/*.schema.yaml`, - `${REPO_ROOT}/x-pack/packages/kbn-elastic-assistant-common/docs/openapi/serverless/*.schema.yaml`, - `${REPO_ROOT}/x-pack/plugins/osquery/docs/openapi/serverless/*.schema.yaml`, ], outputFilePath: `${REPO_ROOT}/oas_docs/output/kibana.serverless.yaml`, options: { - prototypeDocument: `${REPO_ROOT}/oas_docs/kibana.info.yaml`, + prototypeDocument: `${REPO_ROOT}/oas_docs/kibana.info.serverless.yaml`, }, }); })(); diff --git a/oas_docs/scripts/merge_serverless_oas_staging.js b/oas_docs/scripts/merge_serverless_oas_staging.js new file mode 100644 index 00000000000000..56a5e58ea4161b --- /dev/null +++ b/oas_docs/scripts/merge_serverless_oas_staging.js @@ -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 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. + */ + +require('../../src/setup_node_env'); +const { merge } = require('@kbn/openapi-bundler'); +const { REPO_ROOT } = require('@kbn/repo-info'); + +(async () => { + await merge({ + sourceGlobs: [ + `${REPO_ROOT}/oas_docs/bundle.serverless.json`, + `${REPO_ROOT}/x-pack/plugins/actions/docs/openapi/bundled_serverless.yaml`, + `${REPO_ROOT}/src/plugins/data_views/docs/openapi/bundled.yaml`, + `${REPO_ROOT}/x-pack/plugins/ml/common/openapi/ml_apis_serverless.yaml`, + `${REPO_ROOT}/packages/core/saved-objects/docs/openapi/bundled_serverless.yaml`, + + // Observability Solution + `${REPO_ROOT}/x-pack/plugins/observability_solution/apm/docs/openapi/apm.yaml`, + `${REPO_ROOT}/x-pack/plugins/observability_solution/slo/docs/openapi/slo/bundled.yaml`, + + // Security solution + `${REPO_ROOT}/x-pack/plugins/security_solution/docs/openapi/serverless/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-lists-common/docs/openapi/serverless/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-exceptions-common/docs/openapi/serverless/*.schema.yaml`, + `${REPO_ROOT}/packages/kbn-securitysolution-endpoint-exceptions-common/docs/openapi/serverless/*.schema.yaml`, + `${REPO_ROOT}/x-pack/packages/kbn-elastic-assistant-common/docs/openapi/serverless/*.schema.yaml`, + `${REPO_ROOT}/x-pack/plugins/osquery/docs/openapi/serverless/*.schema.yaml`, + ], + outputFilePath: `${REPO_ROOT}/oas_docs/output/kibana.serverless.staging.yaml`, + options: { + prototypeDocument: `${REPO_ROOT}/oas_docs/kibana.info.serverless.yaml`, + }, + }); +})(); From 761f5e71335ad540702b7a7c441093c966a79f60 Mon Sep 17 00:00:00 2001 From: Cee Chen <549407+cee-chen@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:35:08 -0700 Subject: [PATCH 54/92] Upgrade EUI to v95.7.0 (#190346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `v95.6.0` ⏩ `v95.7.0` _[Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams)_ --- ## [`v95.7.0`](https://github.com/elastic/eui/releases/v95.7.0) **CSS-in-JS conversions** - Converted `EuiSelectable` to Emotion ([#7940](https://github.com/elastic/eui/pull/7940)) - Removed `$euiSelectableListItemBorder` - Removed `$euiSelectableListItemPadding` - Converted `EuiSelectableTemplateSitewide` to Emotion ([#7944](https://github.com/elastic/eui/pull/7944)) - Removed `$euiSelectableTemplateFocusBackgroundLight` - Removed `$euiSelectableTemplateFocusBackgroundDark` - Removed `$euiSelectableTemplateSitewideTypes` - Converted `EuiComboBox` to Emotion ([#7950](https://github.com/elastic/eui/pull/7950)) --- package.json | 2 +- .../__snapshots__/index.test.tsx.snap | 64 +++++++++---------- src/dev/license_checker/config.ts | 2 +- .../actions/tags/edit_tags_selectable.tsx | 35 +++++----- .../__jest__/test_pipeline.test.tsx | 6 +- .../resolver/view/process_event_dot.tsx | 2 +- yarn.lock | 8 +-- 7 files changed, 61 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 90f91cf7d98e61..057d064fd31e6b 100644 --- a/package.json +++ b/package.json @@ -114,7 +114,7 @@ "@elastic/ecs": "^8.11.1", "@elastic/elasticsearch": "^8.14.0", "@elastic/ems-client": "8.5.3", - "@elastic/eui": "95.6.0", + "@elastic/eui": "95.7.0", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap index 1bfa3200b42437..1b462f58b2ed43 100644 --- a/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap +++ b/packages/kbn-securitysolution-autocomplete/src/field/__tests__/__snapshots__/index.test.tsx.snap @@ -6,21 +6,21 @@ Object { "baseElement":
@@ -30,7 +30,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" role="combobox" @@ -74,21 +74,21 @@ Object { , "container":
@@ -98,7 +98,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" role="combobox" @@ -199,20 +199,20 @@ Object { "baseElement":
@@ -222,7 +222,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" disabled="" id="generated-id__eui-combobox-id" @@ -239,20 +239,20 @@ Object { , "container":
@@ -262,7 +262,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" disabled="" id="generated-id__eui-combobox-id" @@ -336,21 +336,21 @@ Object { "baseElement":
@@ -360,7 +360,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" role="combobox" @@ -393,21 +393,21 @@ Object { , "container":
@@ -417,7 +417,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" id="generated-id__eui-combobox-id" role="combobox" @@ -507,21 +507,21 @@ Object { "baseElement":
@@ -531,7 +531,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" disabled="" id="generated-id__eui-combobox-id" @@ -557,21 +557,21 @@ Object { , "container":
@@ -581,7 +581,7 @@ Object { aria-expanded="false" aria-invalid="false" autocomplete="off" - class="euiComboBox__input" + class="euiComboBox__input emotion-euiComboBoxInput" data-test-subj="comboBoxSearchInput" disabled="" id="generated-id__eui-combobox-id" diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index b859c92a36f36c..0ebeb9f0a518f2 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -86,7 +86,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.3': ['Elastic License 2.0'], - '@elastic/eui@95.6.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@95.7.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/x-pack/plugins/cases/public/components/actions/tags/edit_tags_selectable.tsx b/x-pack/plugins/cases/public/components/actions/tags/edit_tags_selectable.tsx index 9f5a0cdfca8285..17cf9939f8145f 100644 --- a/x-pack/plugins/cases/public/components/actions/tags/edit_tags_selectable.tsx +++ b/x-pack/plugins/cases/public/components/actions/tags/edit_tags_selectable.tsx @@ -70,22 +70,25 @@ const EditTagsSelectableComponent: React.FC = ({ const [searchValue, setSearchValue] = useState(''); const { euiTheme } = useEuiTheme(); - const renderOption = useCallback((option: ItemSelectableOption, search: string) => { - const dataTestSubj = option.newItem - ? 'cases-actions-tags-edit-selectable-add-new-tag-icon' - : `cases-actions-tags-edit-selectable-tag-${option.label}-icon-${option.itemIcon}`; - - return ( - <> - - {option.label} - - ); - }, []); + const renderOption = useCallback( + (option: ItemSelectableOption, search: string) => { + const dataTestSubj = option.newItem + ? 'cases-actions-tags-edit-selectable-add-new-tag-icon' + : `cases-actions-tags-edit-selectable-tag-${option.label}-icon-${option.itemIcon}`; + + return ( + <> + + {option.label} + + ); + }, + [euiTheme] + ); /** * While the user searches we need to add the ability diff --git a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/test_pipeline.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/test_pipeline.test.tsx index 3698d07018c712..93316a8358e770 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/test_pipeline.test.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/components/pipeline_editor/__jest__/test_pipeline.test.tsx @@ -377,9 +377,9 @@ describe('Test pipeline', () => { // Click the "Configuration" tab await actions.clickProcessorConfigurationTab(); // Verify type selector has not changed - expect(find('processorTypeSelector.input').find('[role="combobox"]').props().value).toBe( - 'Set' - ); + expect( + find('processorTypeSelector.input').find('input[role="combobox"]').props().value + ).toBe('Set'); }); }); diff --git a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx index 0a17a3a0e8ee92..0465f16d55b70d 100644 --- a/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx +++ b/x-pack/plugins/security_solution/public/resolver/view/process_event_dot.tsx @@ -584,7 +584,7 @@ export const ProcessEventDot = styled(UnstyledProcessEventDot)` width: fit-content; } - & .euiSelectableList-bordered { + & .euiSelectableList { border-top-right-radius: 0px; border-top-left-radius: 0px; } diff --git a/yarn.lock b/yarn.lock index 1ffccfe9744d47..4768e377e05e09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1767,10 +1767,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@95.6.0": - version "95.6.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.6.0.tgz#432845333bd0d64aa816222d192db4715cc75987" - integrity sha512-OnErgFixCcYcDpH3iu1fIG5FxoJ+mmHtKOVI/aqeC0beEeJJSZd8uqcLh4iJf9tfCEb+ApykTIuRGi6XTcpvjw== +"@elastic/eui@95.7.0": + version "95.7.0" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-95.7.0.tgz#50edc43d3aac1a1ea87ec56a04ec0bc91e7e32a1" + integrity sha512-T6tihdAtE3JhXaTMHagidXWB5Sv6c++5vHdPj7kyYGjT1fDPpJ/fuTZTfH2GJLc56g63zBdDNMkLnXZYb0ld4Q== dependencies: "@hello-pangea/dnd" "^16.6.0" "@types/lodash" "^4.14.202" From d6b151862d5ea1def51ef6cb960b1d68bf812f7a Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Wed, 14 Aug 2024 12:03:40 -0600 Subject: [PATCH 55/92] [EEM] Change latest metric to use @timestamp (#190417) ## Summary This PR closes https://github.com/elastic/elastic-entity-model/issues/134 by changing the timestamp for the latest metrics from `event.ingested` to `@timestamp`. --- .../__snapshots__/generate_latest_transform.test.ts.snap | 8 ++++---- .../transform/generate_metadata_aggregations.test.ts | 8 ++++---- .../entities/transform/generate_metadata_aggregations.ts | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap index cc5ee058baf790..f7fe9d8339932c 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap @@ -97,7 +97,7 @@ Object { }, "filter": Object { "range": Object { - "event.ingested": Object { + "@timestamp": Object { "gte": "now-1m", }, }, @@ -114,7 +114,7 @@ Object { }, "filter": Object { "range": Object { - "event.ingested": Object { + "@timestamp": Object { "gte": "now-1m", }, }, @@ -131,7 +131,7 @@ Object { }, "filter": Object { "range": Object { - "event.ingested": Object { + "@timestamp": Object { "gte": "now-1m", }, }, @@ -148,7 +148,7 @@ Object { }, "filter": Object { "range": Object { - "event.ingested": Object { + "@timestamp": Object { "gte": "now-1m", }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts index 0ae3c4a81c870a..ef54abe305a691 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts @@ -85,7 +85,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { 'entity.metadata.host.name': { filter: { range: { - 'event.ingested': { + '@timestamp': { gte: 'now-1m', }, }, @@ -111,7 +111,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { 'entity.metadata.host.name': { filter: { range: { - 'event.ingested': { + '@timestamp': { gte: 'now-1m', }, }, @@ -137,7 +137,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { 'entity.metadata.host.name': { filter: { range: { - 'event.ingested': { + '@timestamp': { gte: 'now-1m', }, }, @@ -163,7 +163,7 @@ describe('Generate Metadata Aggregations for history and latest', () => { 'entity.metadata.hostName': { filter: { range: { - 'event.ingested': { + '@timestamp': { gte: 'now-1m', }, }, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts index 264d5da12ee04d..79aa4312c29559 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts @@ -37,7 +37,7 @@ export function generateLatestMetadataAggregations(definition: EntityDefinition) [`entity.metadata.${metadata.destination}`]: { filter: { range: { - 'event.ingested': { + '@timestamp': { gte: `now-${definition.history.interval}`, }, }, From fc12e58c2f69974b29239b1b7862a8242bf4c94f Mon Sep 17 00:00:00 2001 From: Kerry Gallagher Date: Wed, 14 Aug 2024 19:11:57 +0100 Subject: [PATCH 56/92] [Logs] Provide help for migrating Logs UI settings (#189646) ## Summary This implements https://github.com/elastic/kibana/issues/186824. A new API has been added so that automated corrective actions can be applied. ## UI / UX ![migration](https://github.com/user-attachments/assets/136d96e3-f3b0-46c4-b3b8-b70f0cb08b65) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .buildkite/ftr_oblt_stateful_configs.yml | 1 + .../common/http_api/deprecations/index.ts | 9 ++ .../logs_shared/server/deprecations/index.ts | 22 +++++ .../deprecations/log_sources_setting.ts | 73 ++++++++++++++ .../logs_shared/server/logs_shared_server.ts | 2 + .../logs_shared/server/plugin.ts | 6 +- .../server/routes/deprecations/index.ts | 8 ++ .../deprecations/migrate_log_view_settings.ts | 62 ++++++++++++ .../logs_shared/tsconfig.json | 2 + .../apis/logs_shared/config.ts | 17 ++++ .../api_integration/apis/logs_shared/index.ts | 14 +++ .../logs_shared/migrate_log_view_settings.ts | 95 +++++++++++++++++++ x-pack/test/tsconfig.json | 1 + 13 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/observability_solution/logs_shared/common/http_api/deprecations/index.ts create mode 100644 x-pack/plugins/observability_solution/logs_shared/server/deprecations/index.ts create mode 100644 x-pack/plugins/observability_solution/logs_shared/server/deprecations/log_sources_setting.ts create mode 100644 x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/index.ts create mode 100644 x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/migrate_log_view_settings.ts create mode 100644 x-pack/test/api_integration/apis/logs_shared/config.ts create mode 100644 x-pack/test/api_integration/apis/logs_shared/index.ts create mode 100644 x-pack/test/api_integration/apis/logs_shared/migrate_log_view_settings.ts diff --git a/.buildkite/ftr_oblt_stateful_configs.yml b/.buildkite/ftr_oblt_stateful_configs.yml index 55f3c1b603fcab..eb8382eacce890 100644 --- a/.buildkite/ftr_oblt_stateful_configs.yml +++ b/.buildkite/ftr_oblt_stateful_configs.yml @@ -25,6 +25,7 @@ defaultQueue: 'n2-4-spot' enabled: - x-pack/test/alerting_api_integration/observability/config.ts - x-pack/test/api_integration/apis/logs_ui/config.ts + - x-pack/test/api_integration/apis/logs_shared/config.ts - x-pack/test/api_integration/apis/metrics_ui/config.ts - x-pack/test/api_integration/apis/osquery/config.ts - x-pack/test/api_integration/apis/synthetics/config.ts diff --git a/x-pack/plugins/observability_solution/logs_shared/common/http_api/deprecations/index.ts b/x-pack/plugins/observability_solution/logs_shared/common/http_api/deprecations/index.ts new file mode 100644 index 00000000000000..57f91cc799828b --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_shared/common/http_api/deprecations/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const MIGRATE_LOG_VIEW_SETTINGS_URL = + '/api/logs_shared/deprecations/migrate_log_view_settings'; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/deprecations/index.ts b/x-pack/plugins/observability_solution/logs_shared/server/deprecations/index.ts new file mode 100644 index 00000000000000..3e800466441449 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_shared/server/deprecations/index.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 { LogsSharedPluginCoreSetup } from '../types'; +import { getLogSourcesSettingDeprecationInfo } from './log_sources_setting'; + +export const registerDeprecations = ({ core }: { core: LogsSharedPluginCoreSetup }) => { + core.deprecations.registerDeprecations({ + getDeprecations: async (context) => { + return [ + ...(await getLogSourcesSettingDeprecationInfo({ + context, + getStartServices: core.getStartServices, + })), + ]; + }, + }); +}; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/deprecations/log_sources_setting.ts b/x-pack/plugins/observability_solution/logs_shared/server/deprecations/log_sources_setting.ts new file mode 100644 index 00000000000000..c3e891edf74c99 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_shared/server/deprecations/log_sources_setting.ts @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { DeprecationsDetails } from '@kbn/core-deprecations-common'; +import { GetDeprecationsContext } from '@kbn/core-deprecations-server'; +import { i18n } from '@kbn/i18n'; +import { defaultLogViewId } from '../../common/log_views'; +import { MIGRATE_LOG_VIEW_SETTINGS_URL } from '../../common/http_api/deprecations'; +import { logSourcesKibanaAdvancedSettingRT } from '../../common'; +import { LogsSharedPluginStartServicesAccessor } from '../types'; + +export const getLogSourcesSettingDeprecationInfo = async ({ + getStartServices, + context, +}: { + context: GetDeprecationsContext; + getStartServices: LogsSharedPluginStartServicesAccessor; +}): Promise => { + const [_, pluginStartDeps, pluginStart] = await getStartServices(); + const logSourcesService = + pluginStartDeps.logsDataAccess.services.logSourcesServiceFactory.getLogSourcesService( + context.savedObjectsClient + ); + const logViewsClient = pluginStart.logViews.getClient( + context.savedObjectsClient, + context.esClient.asCurrentUser, + logSourcesService + ); + + const logView = await logViewsClient.getLogView(defaultLogViewId); + + if (logView && !logSourcesKibanaAdvancedSettingRT.is(logView.attributes.logIndices)) { + return [ + { + title: i18n.translate( + 'xpack.logsShared.deprecations.migrateLogViewSettingsToLogSourcesSetting.title', + { + defaultMessage: 'Log sources setting', + } + ), + level: 'warning', + deprecationType: 'feature', + message: i18n.translate( + 'xpack.logsShared.deprecations.migrateLogViewSettingsToLogSourcesSetting.message', + { + defaultMessage: + 'Indices and Data view options previously provided via the Logs UI settings page are now deprecated. Please migrate to using the Kibana log sources advanced setting.', + } + ), + correctiveActions: { + manualSteps: [ + i18n.translate( + 'xpack.logsShared.deprecations.migrateLogViewSettingsToLogSourcesSetting.message.manualStepMessage', + { + defaultMessage: + 'Update the Log sources Kibana advanced setting (via Management > Advanced Settings) to match the setting previously provided via the Logs UI settings page. Then via the Logs UI settings page use the Kibana log sources advanced setting option.', + } + ), + ], + api: { + method: 'PUT', + path: MIGRATE_LOG_VIEW_SETTINGS_URL, + }, + }, + }, + ]; + } else { + return []; + } +}; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/logs_shared_server.ts b/x-pack/plugins/observability_solution/logs_shared/server/logs_shared_server.ts index 60dc17be61d2df..9bb643c8dd6176 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/logs_shared_server.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/logs_shared_server.ts @@ -12,10 +12,12 @@ import { initLogEntriesSummaryRoute, } from './routes/log_entries'; import { initLogViewRoutes } from './routes/log_views'; +import { initMigrateLogViewSettingsRoute } from './routes/deprecations'; export const initLogsSharedServer = (libs: LogsSharedBackendLibs) => { initLogEntriesHighlightsRoute(libs); initLogEntriesSummaryRoute(libs); initLogEntriesSummaryHighlightsRoute(libs); initLogViewRoutes(libs); + initMigrateLogViewSettingsRoute(libs); }; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts index 6bc9560764a7bf..7c97e175ed64f5 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts @@ -24,6 +24,8 @@ import { LogsSharedLogEntriesDomain } from './lib/domains/log_entries_domain'; import { LogsSharedKibanaLogEntriesAdapter } from './lib/adapters/log_entries/kibana_log_entries_adapter'; import { LogEntriesService } from './services/log_entries'; import { LogsSharedConfig } from '../common/plugin_config'; +import { registerDeprecations } from './deprecations'; +import { defaultLogViewId } from '../common/log_views'; export class LogsSharedPlugin implements @@ -58,7 +60,7 @@ export class LogsSharedPlugin core.savedObjects.registerType(logViewSavedObjectType); } else { // Register a static internal view to use as a fallback when the log view SO is not registered - logViews.defineInternalLogView('default', {}); + logViews.defineInternalLogView(defaultLogViewId, {}); } const domainLibs: LogsSharedDomainLibs = { @@ -84,6 +86,8 @@ export class LogsSharedPlugin const logEntriesService = new LogEntriesService(); logEntriesService.setup(core, plugins); + registerDeprecations({ core }); + return { ...domainLibs, logViews, diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/index.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/index.ts new file mode 100644 index 00000000000000..2478fabf328c92 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/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 './migrate_log_view_settings'; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/migrate_log_view_settings.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/migrate_log_view_settings.ts new file mode 100644 index 00000000000000..f3e9db4f1a7654 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/migrate_log_view_settings.ts @@ -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 { defaultLogViewId } from '../../../common/log_views'; +import { MIGRATE_LOG_VIEW_SETTINGS_URL } from '../../../common/http_api/deprecations'; +import { logSourcesKibanaAdvancedSettingRT } from '../../../common'; +import { LogsSharedBackendLibs } from '../../lib/logs_shared_types'; + +// This route facilitates automated one-click handling of updating log view's to use the +// Kibana advanced setting as part of the upgrade assistant. +// First, it will gather the indices currently set on the log view. +// Secondly, it will update the advanced setting to use these indices. +// Lastly, it will update the log view to use the kibana advanced setting. +export const initMigrateLogViewSettingsRoute = ({ + framework, + getStartServices, +}: LogsSharedBackendLibs) => { + framework.router.put( + { path: MIGRATE_LOG_VIEW_SETTINGS_URL, validate: false }, + async (context, request, response) => { + try { + const [_, pluginStartDeps, pluginStart] = await getStartServices(); + + const logSourcesService = + await pluginStartDeps.logsDataAccess.services.logSourcesServiceFactory.getScopedLogSourcesService( + request + ); + const logViewsClient = pluginStart.logViews.getScopedClient(request); + + const logView = await logViewsClient.getLogView(defaultLogViewId); + + if (!logView || logSourcesKibanaAdvancedSettingRT.is(logView.attributes.logIndices)) { + return response.customError({ + body: new Error( + "Unable to migrate log view settings. A log view either doesn't exist or is already using the Kibana advanced setting." + ), + statusCode: 400, + }); + } + + const indices = ( + await logViewsClient.getResolvedLogView({ + type: 'log-view-reference', + logViewId: defaultLogViewId, + }) + ).indices; + + await logSourcesService.setLogSources([{ indexPattern: indices }]); + await logViewsClient.putLogView(defaultLogViewId, { + logIndices: { type: 'kibana_advanced_setting' }, + }); + return response.ok(); + } catch (error) { + throw error; + } + } + ); +}; diff --git a/x-pack/plugins/observability_solution/logs_shared/tsconfig.json b/x-pack/plugins/observability_solution/logs_shared/tsconfig.json index f1bb2527f93111..38cbba7c252c01 100644 --- a/x-pack/plugins/observability_solution/logs_shared/tsconfig.json +++ b/x-pack/plugins/observability_solution/logs_shared/tsconfig.json @@ -42,5 +42,7 @@ "@kbn/test-jest-helpers", "@kbn/router-utils", "@kbn/logs-data-access-plugin", + "@kbn/core-deprecations-common", + "@kbn/core-deprecations-server", ] } diff --git a/x-pack/test/api_integration/apis/logs_shared/config.ts b/x-pack/test/api_integration/apis/logs_shared/config.ts new file mode 100644 index 00000000000000..5f335f116fefeb --- /dev/null +++ b/x-pack/test/api_integration/apis/logs_shared/config.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { FtrConfigProviderContext } from '@kbn/test'; + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const baseIntegrationTestsConfig = await readConfigFile(require.resolve('../../config.ts')); + + return { + ...baseIntegrationTestsConfig.getAll(), + testFiles: [require.resolve('.')], + }; +} diff --git a/x-pack/test/api_integration/apis/logs_shared/index.ts b/x-pack/test/api_integration/apis/logs_shared/index.ts new file mode 100644 index 00000000000000..157526c418754d --- /dev/null +++ b/x-pack/test/api_integration/apis/logs_shared/index.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 { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('Logs shared routes', () => { + loadTestFile(require.resolve('./migrate_log_view_settings')); + }); +} diff --git a/x-pack/test/api_integration/apis/logs_shared/migrate_log_view_settings.ts b/x-pack/test/api_integration/apis/logs_shared/migrate_log_view_settings.ts new file mode 100644 index 00000000000000..e3185fc82dacfa --- /dev/null +++ b/x-pack/test/api_integration/apis/logs_shared/migrate_log_view_settings.ts @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { LogViewAttributes } from '@kbn/logs-shared-plugin/common/log_views'; +import { infraSourceConfigurationSavedObjectName } from '@kbn/infra-plugin/server/lib/sources'; +import { logViewSavedObjectName } from '@kbn/logs-shared-plugin/server'; +import { defaultLogViewId } from '@kbn/logs-shared-plugin/common/log_views'; +import { MIGRATE_LOG_VIEW_SETTINGS_URL } from '@kbn/logs-shared-plugin/common/http_api/deprecations'; +import { OBSERVABILITY_LOGS_DATA_ACCESS_LOG_SOURCES_ID } from '@kbn/management-settings-ids'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + const logViewsService = getService('infraLogViews'); + const kibanaServer = getService('kibanaServer'); + const retry = getService('retry'); + + const INDICES = 'logs-*,something-else-*,test-*'; + + describe('Log view settings migration', () => { + describe('Migration API', () => { + before(async () => { + await kibanaServer.savedObjects.clean({ + types: [infraSourceConfigurationSavedObjectName, logViewSavedObjectName], + }); + }); + + afterEach(async () => { + await kibanaServer.savedObjects.clean({ + types: [infraSourceConfigurationSavedObjectName, logViewSavedObjectName], + }); + }); + + it('performs a migration when the log view is not using the Kibana advanced setting', async () => { + const logViewAttributes: Partial = { + name: 'Test Log View 1', + description: 'Test Description 1', + logIndices: { type: 'index_name', indexName: INDICES }, + logColumns: [], + }; + + await logViewsService.putLogView(defaultLogViewId, { + attributes: logViewAttributes, + }); + + await supertest + .put(MIGRATE_LOG_VIEW_SETTINGS_URL) + .set({ + 'kbn-xsrf': 'some-xsrf-token', + }) + .send() + .expect(200); + + await retry.try(async () => { + const migratedLogView = await logViewsService.getLogView(defaultLogViewId); + expect(migratedLogView.data.attributes.logIndices.type).to.eql('kibana_advanced_setting'); + const uiSetting = await kibanaServer.uiSettings.get( + OBSERVABILITY_LOGS_DATA_ACCESS_LOG_SOURCES_ID + ); + expect(uiSetting).to.eql([INDICES]); + }); + }); + + it('should error when the log view is already using the Kibana advanced setting', async () => { + const logViewAttributes: Partial = { + name: 'Test Log View 1', + description: 'Test Description 1', + logIndices: { type: 'kibana_advanced_setting' }, + logColumns: [], + }; + + await logViewsService.putLogView(defaultLogViewId, { + attributes: logViewAttributes, + }); + + const response = await supertest + .put(MIGRATE_LOG_VIEW_SETTINGS_URL) + .set({ + 'kbn-xsrf': 'some-xsrf-token', + }) + .send() + .expect(400); + + expect(response.body.message).to.eql( + "Unable to migrate log view settings. A log view either doesn't exist or is already using the Kibana advanced setting." + ); + }); + }); + }); +} diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 974a206d71e3f5..9d56d273a8205d 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -177,6 +177,7 @@ "@kbn/entities-schema", "@kbn/actions-simulators-plugin", "@kbn/cases-api-integration-test-plugin", + "@kbn/management-settings-ids", "@kbn/mock-idp-utils" ] } From 19e9bfb26e63a59574daa6ec1763bf5f6ec6f434 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Wed, 14 Aug 2024 12:15:59 -0600 Subject: [PATCH 57/92] [control group] do not render control group when there are no controls (#190521) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR updates ControlGroup to not render any components when there are no controls. PR also removes loading state from ControlGroup, as suggested by @ThomThomson #### Before Screenshot 2024-08-14 at 9 18 57 AM ### Test instructions 1. start kibana with `yarn start --run-examples` 2. Open controls example at http://localhost:5601/app/controlsExamples 3. Remove all controls. Notice how the ControlGroup no longer takes up any empty vertical spacing Screenshot 2024-08-14 at 9 15 53 AM --- .../react_control_example.tsx | 16 ++++++++++++++- .../components/control_group.tsx | 20 +++++++++---------- .../react_embeddable_renderer.tsx | 1 + .../panel_component/presentation_panel.tsx | 2 +- .../public/panel_component/types.ts | 4 ++++ 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/examples/controls_example/public/app/react_control_example/react_control_example.tsx b/examples/controls_example/public/app/react_control_example/react_control_example.tsx index 690c33d0aad977..700b899805be89 100644 --- a/examples/controls_example/public/app/react_control_example/react_control_example.tsx +++ b/examples/controls_example/public/app/react_control_example/react_control_example.tsx @@ -219,6 +219,19 @@ export const ReactControlExample = ({ }; }, [controlGroupApi, timeslice$]); + const [hasControls, setHasControls] = useState(false); + useEffect(() => { + if (!controlGroupApi) { + return; + } + const subscription = controlGroupApi.children$.subscribe((children) => { + setHasControls(Object.keys(children).length > 0); + }); + return () => { + subscription.unsubscribe(); + }; + }, [controlGroupApi]); + useEffect(() => { const subscription = combineLatest([controlGroupFilters$, unifiedSearchFilters$]).subscribe( ([controlGroupFilters, unifiedSearchFilters]) => { @@ -389,7 +402,7 @@ export const ReactControlExample = ({ reload$.next(); }} /> - + {hasControls && } { dashboardApi?.setChild(api); @@ -402,6 +415,7 @@ export const ReactControlExample = ({ getSerializedStateForChild: getControlGroupSerializedState, getRuntimeStateForChild: getControlGroupRuntimeState, })} + panelProps={{ hideLoader: true }} key={`control_group`} /> diff --git a/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx b/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx index 72c891444081ab..c825e9021b48d6 100644 --- a/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx +++ b/src/plugins/controls/public/react_controls/control_group/components/control_group.tsx @@ -7,6 +7,7 @@ */ import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { css } from '@emotion/react'; import { BehaviorSubject } from 'rxjs'; import { DndContext, @@ -24,14 +25,7 @@ import { SortableContext, sortableKeyboardCoordinates, } from '@dnd-kit/sortable'; -import { - EuiButtonIcon, - EuiFlexGroup, - EuiFlexItem, - EuiLoadingChart, - EuiPanel, - EuiToolTip, -} from '@elastic/eui'; +import { EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiToolTip } from '@elastic/eui'; import { useBatchedPublishingSubjects } from '@kbn/presentation-publishing'; import { ControlStyle } from '../../..'; import { ControlsInOrder } from '../init_controls_manager'; @@ -114,8 +108,15 @@ export function ControlGroup({ ); }, [hasUnappliedSelections, applySelections]); + if (controlsInOrder.length === 0) { + return null; + } + return ( - {!isInitialized && } setDraggingId(`${active.id}`)} @@ -167,7 +167,7 @@ export function ControlGroup({ - {isInitialized && !autoApplySelections && ( + {!autoApplySelections && ( {hasUnappliedSelections ? ( ApplyButtonComponent diff --git a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx index f538c7b1164b1c..5b198f7ad45fc2 100644 --- a/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx +++ b/src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx @@ -65,6 +65,7 @@ export const ReactEmbeddableRenderer = < | 'showBorder' | 'showBadges' | 'showNotifications' + | 'hideLoader' | 'hideHeader' | 'hideInspector' >; 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 772714eb44e330..811492b8f9e7db 100644 --- a/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx +++ b/src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx @@ -50,7 +50,7 @@ export const PresentationPanel = < }, []); if (loading) - return ( + return props.hideLoader ? null : ( Date: Wed, 14 Aug 2024 14:32:03 -0400 Subject: [PATCH 58/92] chore(rca): Add notes related APIs (#190362) --- .github/CODEOWNERS | 1 + package.json | 1 + packages/kbn-investigation-shared/README.md | 3 + packages/kbn-investigation-shared/index.ts | 23 ++++++ .../kbn-investigation-shared/jest.config.js | 13 ++++ .../kbn-investigation-shared/kibana.jsonc | 5 ++ .../kbn-investigation-shared/package.json | 6 ++ .../src}/schema/create.ts | 6 +- .../src/schema/create_notes.ts | 36 ++++++++++ .../src/schema/delete.ts | 20 ++++++ .../src}/schema/find.ts | 6 +- .../src}/schema/get.ts | 6 +- .../src/schema/get_notes.ts | 23 ++++++ .../src}/schema/investigation.ts | 8 ++- .../src/schema/investigation_note.ts | 21 ++++++ .../src}/schema/origin.ts | 11 ++- .../kbn-investigation-shared/tsconfig.json | 17 +++++ tsconfig.base.json | 2 + .../investigate/common/index.ts | 8 --- .../investigate/common/types.ts | 2 +- .../public/hooks/use_investigate_widget.tsx | 8 +-- .../use_investigation/investigation_store.ts | 2 +- .../investigate/public/plugin.tsx | 4 +- .../investigate/public/types.ts | 6 +- .../investigate/tsconfig.json | 3 +- .../investigate_app/public/application.tsx | 25 +++++-- .../public/hooks/use_abort_signal.ts | 21 ------ .../hooks/use_add_investigation_note.ts | 51 ++++++++++++++ .../public/hooks/use_fetch_investigation.ts | 58 +++++++++++++++ .../hooks/use_fetch_investigation_list.ts | 2 +- .../public/hooks/use_get_alert_details.tsx | 10 +-- .../hooks/use_get_investigation_details.tsx | 10 +-- .../public/hooks/use_investigate_params.ts | 14 ---- .../public/hooks/use_investigate_router.ts | 55 --------------- .../investigation_details/index.stories.tsx | 2 +- .../investigation_details/index.tsx | 70 +++++++++---------- .../investigation_notes.tsx | 4 +- .../investigation_notes/timeline_message.tsx | 2 +- .../details/investigation_details_page.tsx | 33 ++++----- .../public/pages/details/types.ts | 10 +++ .../investigate_app/public/routes/config.tsx | 48 ++++++------- .../server/models/investigation.ts | 4 +- .../server/models/investigation_note.ts | 18 +++++ ...investigate_app_server_route_repository.ts | 63 +++++++++++++++-- .../server/services/create_investigation.ts | 6 +- .../services/create_investigation_note.ts | 33 +++++++++ .../server/services/delete_investigation.ts | 15 ++++ .../server/services/find_investigations.ts | 4 +- .../server/services/get_investigation.ts | 9 ++- .../services/get_investigation_notes.ts | 21 ++++++ .../investigate_app/tsconfig.json | 3 +- .../hooks/use_create_investigation.tsx | 6 +- .../use_fetch_investigations_by_alert.tsx | 2 +- .../observability/tsconfig.json | 1 + yarn.lock | 4 ++ 55 files changed, 587 insertions(+), 258 deletions(-) create mode 100644 packages/kbn-investigation-shared/README.md create mode 100644 packages/kbn-investigation-shared/index.ts create mode 100644 packages/kbn-investigation-shared/jest.config.js create mode 100644 packages/kbn-investigation-shared/kibana.jsonc create mode 100644 packages/kbn-investigation-shared/package.json rename {x-pack/plugins/observability_solution/investigate/common => packages/kbn-investigation-shared/src}/schema/create.ts (86%) create mode 100644 packages/kbn-investigation-shared/src/schema/create_notes.ts create mode 100644 packages/kbn-investigation-shared/src/schema/delete.ts rename {x-pack/plugins/observability_solution/investigate/common => packages/kbn-investigation-shared/src}/schema/find.ts (83%) rename {x-pack/plugins/observability_solution/investigate/common => packages/kbn-investigation-shared/src}/schema/get.ts (80%) create mode 100644 packages/kbn-investigation-shared/src/schema/get_notes.ts rename {x-pack/plugins/observability_solution/investigate/common => packages/kbn-investigation-shared/src}/schema/investigation.ts (70%) create mode 100644 packages/kbn-investigation-shared/src/schema/investigation_note.ts rename {x-pack/plugins/observability_solution/investigate/common => packages/kbn-investigation-shared/src}/schema/origin.ts (61%) create mode 100644 packages/kbn-investigation-shared/tsconfig.json delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_abort_signal.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_params.ts delete mode 100644 x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_router.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/public/pages/details/types.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/server/models/investigation_note.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation_note.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/server/services/delete_investigation.ts create mode 100644 x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation_notes.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fcdfaf1fe4ef8b..37941842c0fca0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -513,6 +513,7 @@ test/interactive_setup_api_integration/plugins/test_endpoints @elastic/kibana-se packages/kbn-interpreter @elastic/kibana-visualizations x-pack/plugins/observability_solution/investigate_app @elastic/obs-ux-management-team x-pack/plugins/observability_solution/investigate @elastic/obs-ux-management-team +packages/kbn-investigation-shared @elastic/obs-ux-management-team packages/kbn-io-ts-utils @elastic/obs-knowledge-team packages/kbn-ipynb @elastic/search-kibana packages/kbn-jest-serializers @elastic/kibana-operations diff --git a/package.json b/package.json index 057d064fd31e6b..6a4cb58c50f574 100644 --- a/package.json +++ b/package.json @@ -556,6 +556,7 @@ "@kbn/interpreter": "link:packages/kbn-interpreter", "@kbn/investigate-app-plugin": "link:x-pack/plugins/observability_solution/investigate_app", "@kbn/investigate-plugin": "link:x-pack/plugins/observability_solution/investigate", + "@kbn/investigation-shared": "link:packages/kbn-investigation-shared", "@kbn/io-ts-utils": "link:packages/kbn-io-ts-utils", "@kbn/ipynb": "link:packages/kbn-ipynb", "@kbn/json-schemas": "link:x-pack/packages/ml/json_schemas", diff --git a/packages/kbn-investigation-shared/README.md b/packages/kbn-investigation-shared/README.md new file mode 100644 index 00000000000000..07c07fe3e70815 --- /dev/null +++ b/packages/kbn-investigation-shared/README.md @@ -0,0 +1,3 @@ +# @kbn/investigation-shared + +Empty package generated by @kbn/generate diff --git a/packages/kbn-investigation-shared/index.ts b/packages/kbn-investigation-shared/index.ts new file mode 100644 index 00000000000000..723a97d762b023 --- /dev/null +++ b/packages/kbn-investigation-shared/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 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 type * from './src/schema/create'; +export type * from './src/schema/create_notes'; +export type * from './src/schema/delete'; +export type * from './src/schema/find'; +export type * from './src/schema/get'; +export type * from './src/schema/get_notes'; +export type * from './src/schema/origin'; + +export * from './src/schema/create'; +export * from './src/schema/create_notes'; +export * from './src/schema/delete'; +export * from './src/schema/find'; +export * from './src/schema/get'; +export * from './src/schema/get_notes'; +export * from './src/schema/origin'; diff --git a/packages/kbn-investigation-shared/jest.config.js b/packages/kbn-investigation-shared/jest.config.js new file mode 100644 index 00000000000000..97bfdd78ff3192 --- /dev/null +++ b/packages/kbn-investigation-shared/jest.config.js @@ -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 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. + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-investigation-shared'], +}; diff --git a/packages/kbn-investigation-shared/kibana.jsonc b/packages/kbn-investigation-shared/kibana.jsonc new file mode 100644 index 00000000000000..ffc2802ff3af91 --- /dev/null +++ b/packages/kbn-investigation-shared/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/investigation-shared", + "owner": "@elastic/obs-ux-management-team" +} diff --git a/packages/kbn-investigation-shared/package.json b/packages/kbn-investigation-shared/package.json new file mode 100644 index 00000000000000..bf4a97caf483e0 --- /dev/null +++ b/packages/kbn-investigation-shared/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/investigation-shared", + "private": true, + "version": "1.0.0", + "license": "SSPL-1.0 OR Elastic License 2.0" +} diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/create.ts b/packages/kbn-investigation-shared/src/schema/create.ts similarity index 86% rename from x-pack/plugins/observability_solution/investigate/common/schema/create.ts rename to packages/kbn-investigation-shared/src/schema/create.ts index f2ba04de9e88ad..99073087d0b43f 100644 --- a/x-pack/plugins/observability_solution/investigate/common/schema/create.ts +++ b/packages/kbn-investigation-shared/src/schema/create.ts @@ -1,9 +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. + * 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 * as t from 'io-ts'; import { investigationResponseSchema } from './investigation'; import { alertOriginSchema, blankOriginSchema } from './origin'; diff --git a/packages/kbn-investigation-shared/src/schema/create_notes.ts b/packages/kbn-investigation-shared/src/schema/create_notes.ts new file mode 100644 index 00000000000000..a920a41108e518 --- /dev/null +++ b/packages/kbn-investigation-shared/src/schema/create_notes.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 * as t from 'io-ts'; +import { investigationNoteResponseSchema } from './investigation_note'; + +const createInvestigationNoteParamsSchema = t.type({ + path: t.type({ + id: t.string, + }), + body: t.type({ + content: t.string, + }), +}); + +const createInvestigationNoteResponseSchema = investigationNoteResponseSchema; + +type CreateInvestigationNoteInput = t.OutputOf< + typeof createInvestigationNoteParamsSchema.props.body +>; +type CreateInvestigationNoteParams = t.TypeOf< + typeof createInvestigationNoteParamsSchema.props.body +>; +type CreateInvestigationNoteResponse = t.OutputOf; + +export { createInvestigationNoteParamsSchema, createInvestigationNoteResponseSchema }; +export type { + CreateInvestigationNoteInput, + CreateInvestigationNoteParams, + CreateInvestigationNoteResponse, +}; diff --git a/packages/kbn-investigation-shared/src/schema/delete.ts b/packages/kbn-investigation-shared/src/schema/delete.ts new file mode 100644 index 00000000000000..de0381a6161f3e --- /dev/null +++ b/packages/kbn-investigation-shared/src/schema/delete.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 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 * as t from 'io-ts'; + +const deleteInvestigationParamsSchema = t.type({ + path: t.type({ + id: t.string, + }), +}); + +type DeleteInvestigationParams = t.TypeOf; // Parsed payload used by the backend + +export { deleteInvestigationParamsSchema }; +export type { DeleteInvestigationParams }; diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/find.ts b/packages/kbn-investigation-shared/src/schema/find.ts similarity index 83% rename from x-pack/plugins/observability_solution/investigate/common/schema/find.ts rename to packages/kbn-investigation-shared/src/schema/find.ts index 4eb9d6f9bf66c3..048a2f01c064ae 100644 --- a/x-pack/plugins/observability_solution/investigate/common/schema/find.ts +++ b/packages/kbn-investigation-shared/src/schema/find.ts @@ -1,9 +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. + * 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 * as t from 'io-ts'; import { investigationResponseSchema } from './investigation'; diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/get.ts b/packages/kbn-investigation-shared/src/schema/get.ts similarity index 80% rename from x-pack/plugins/observability_solution/investigate/common/schema/get.ts rename to packages/kbn-investigation-shared/src/schema/get.ts index b30fb9f61cff83..6e2b7d6063ff1e 100644 --- a/x-pack/plugins/observability_solution/investigate/common/schema/get.ts +++ b/packages/kbn-investigation-shared/src/schema/get.ts @@ -1,9 +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. + * 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 * as t from 'io-ts'; import { investigationResponseSchema } from './investigation'; diff --git a/packages/kbn-investigation-shared/src/schema/get_notes.ts b/packages/kbn-investigation-shared/src/schema/get_notes.ts new file mode 100644 index 00000000000000..6162d270a34394 --- /dev/null +++ b/packages/kbn-investigation-shared/src/schema/get_notes.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 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 * as t from 'io-ts'; +import { investigationNoteResponseSchema } from './investigation_note'; + +const getInvestigationNotesParamsSchema = t.type({ + path: t.type({ + id: t.string, + }), +}); + +const getInvestigationNotesResponseSchema = t.array(investigationNoteResponseSchema); + +type GetInvestigationNotesResponse = t.OutputOf; + +export { getInvestigationNotesParamsSchema, getInvestigationNotesResponseSchema }; +export type { GetInvestigationNotesResponse }; diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts b/packages/kbn-investigation-shared/src/schema/investigation.ts similarity index 70% rename from x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts rename to packages/kbn-investigation-shared/src/schema/investigation.ts index 23247bba88ab88..d47db8283d02c0 100644 --- a/x-pack/plugins/observability_solution/investigate/common/schema/investigation.ts +++ b/packages/kbn-investigation-shared/src/schema/investigation.ts @@ -1,11 +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. + * 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 * as t from 'io-ts'; import { alertOriginSchema, blankOriginSchema } from './origin'; +import { investigationNoteResponseSchema } from './investigation_note'; const investigationResponseSchema = t.type({ id: t.string, @@ -17,6 +20,7 @@ const investigationResponseSchema = t.type({ }), origin: t.union([alertOriginSchema, blankOriginSchema]), status: t.union([t.literal('ongoing'), t.literal('closed')]), + notes: t.array(investigationNoteResponseSchema), }); type InvestigationResponse = t.OutputOf; diff --git a/packages/kbn-investigation-shared/src/schema/investigation_note.ts b/packages/kbn-investigation-shared/src/schema/investigation_note.ts new file mode 100644 index 00000000000000..f678a70cb929ce --- /dev/null +++ b/packages/kbn-investigation-shared/src/schema/investigation_note.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 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 * as t from 'io-ts'; + +const investigationNoteResponseSchema = t.type({ + id: t.string, + content: t.string, + createdAt: t.number, + createdBy: t.string, +}); + +type InvestigationNoteResponse = t.OutputOf; + +export { investigationNoteResponseSchema }; +export type { InvestigationNoteResponse }; diff --git a/x-pack/plugins/observability_solution/investigate/common/schema/origin.ts b/packages/kbn-investigation-shared/src/schema/origin.ts similarity index 61% rename from x-pack/plugins/observability_solution/investigate/common/schema/origin.ts rename to packages/kbn-investigation-shared/src/schema/origin.ts index 1c00f5ad73de81..7d5c5447b633de 100644 --- a/x-pack/plugins/observability_solution/investigate/common/schema/origin.ts +++ b/packages/kbn-investigation-shared/src/schema/origin.ts @@ -1,17 +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. + * 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 * as t from 'io-ts'; const blankOriginSchema = t.type({ type: t.literal('blank') }); const alertOriginSchema = t.type({ type: t.literal('alert'), id: t.string }); -type AlertOrigin = t.OutputOf; -type BlankOrigin = t.OutputOf; - export { alertOriginSchema, blankOriginSchema }; - -export type { AlertOrigin, BlankOrigin }; diff --git a/packages/kbn-investigation-shared/tsconfig.json b/packages/kbn-investigation-shared/tsconfig.json new file mode 100644 index 00000000000000..2f9ddddbeea23c --- /dev/null +++ b/packages/kbn-investigation-shared/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 4fb1008c3b79bb..3192d741b3b1a3 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1020,6 +1020,8 @@ "@kbn/investigate-app-plugin/*": ["x-pack/plugins/observability_solution/investigate_app/*"], "@kbn/investigate-plugin": ["x-pack/plugins/observability_solution/investigate"], "@kbn/investigate-plugin/*": ["x-pack/plugins/observability_solution/investigate/*"], + "@kbn/investigation-shared": ["packages/kbn-investigation-shared"], + "@kbn/investigation-shared/*": ["packages/kbn-investigation-shared/*"], "@kbn/io-ts-utils": ["packages/kbn-io-ts-utils"], "@kbn/io-ts-utils/*": ["packages/kbn-io-ts-utils/*"], "@kbn/ipynb": ["packages/kbn-ipynb"], diff --git a/x-pack/plugins/observability_solution/investigate/common/index.ts b/x-pack/plugins/observability_solution/investigate/common/index.ts index 71585c294f7763..7846f257f64fe4 100644 --- a/x-pack/plugins/observability_solution/investigate/common/index.ts +++ b/x-pack/plugins/observability_solution/investigate/common/index.ts @@ -14,11 +14,3 @@ export type { export { mergePlainObjects } from './utils/merge_plain_objects'; export { InvestigateWidgetColumnSpan } from './types'; - -export type { CreateInvestigationInput, CreateInvestigationResponse } from './schema/create'; -export type { GetInvestigationParams } from './schema/get'; -export type { FindInvestigationsResponse } from './schema/find'; - -export { createInvestigationParamsSchema } from './schema/create'; -export { getInvestigationParamsSchema } from './schema/get'; -export { findInvestigationsParamsSchema } from './schema/find'; diff --git a/x-pack/plugins/observability_solution/investigate/common/types.ts b/x-pack/plugins/observability_solution/investigate/common/types.ts index e8a3f08cfdc2c2..8fdd1968f21251 100644 --- a/x-pack/plugins/observability_solution/investigate/common/types.ts +++ b/x-pack/plugins/observability_solution/investigate/common/types.ts @@ -35,7 +35,7 @@ export interface Investigation { export interface InvestigationNote { id: string; createdAt: number; - createdBy: AuthenticatedUser; + createdBy: string; content: string; } diff --git a/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigate_widget.tsx b/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigate_widget.tsx index a29614f74782b1..984058a1829c09 100644 --- a/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigate_widget.tsx +++ b/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigate_widget.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useContext, createContext } from 'react'; +import { createContext } from 'react'; import type { InvestigateWidgetCreate } from '../../common'; export interface UseInvestigateWidgetApi< @@ -17,9 +17,3 @@ export interface UseInvestigateWidgetApi< const InvestigateWidgetApiContext = createContext(undefined); export const InvestigateWidgetApiContextProvider = InvestigateWidgetApiContext.Provider; - -export function useInvestigateWidget(): UseInvestigateWidgetApi | undefined { - const context = useContext(InvestigateWidgetApiContext); - - return context; -} diff --git a/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigation/investigation_store.ts b/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigation/investigation_store.ts index 0b47427e16802f..4c9b7ea71cffa0 100644 --- a/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigation/investigation_store.ts +++ b/x-pack/plugins/observability_solution/investigate/public/hooks/use_investigation/investigation_store.ts @@ -159,7 +159,7 @@ export function createInvestigationStore({ notes: prevInvestigation.notes.concat({ id: v4(), createdAt: Date.now(), - createdBy: user, + createdBy: user.username, content: note, }), }; diff --git a/x-pack/plugins/observability_solution/investigate/public/plugin.tsx b/x-pack/plugins/observability_solution/investigate/public/plugin.tsx index 6ac60dbb20751b..b54454f63b455d 100644 --- a/x-pack/plugins/observability_solution/investigate/public/plugin.tsx +++ b/x-pack/plugins/observability_solution/investigate/public/plugin.tsx @@ -4,10 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { CoreSetup, CoreStart, PluginInitializerContext, Plugin } from '@kbn/core/public'; +import type { CoreSetup, CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/public'; import type { Logger } from '@kbn/logging'; import { useMemo } from 'react'; -import { useInvestigateWidget } from './hooks/use_investigate_widget'; import { createUseInvestigation } from './hooks/use_investigation'; import type { ConfigSchema, @@ -73,7 +72,6 @@ export class InvestigatePlugin to, }); }, - useInvestigateWidget, }; } } diff --git a/x-pack/plugins/observability_solution/investigate/public/types.ts b/x-pack/plugins/observability_solution/investigate/public/types.ts index 8951781be99f25..50da793c5b5442 100644 --- a/x-pack/plugins/observability_solution/investigate/public/types.ts +++ b/x-pack/plugins/observability_solution/investigate/public/types.ts @@ -6,13 +6,12 @@ */ /* eslint-disable @typescript-eslint/no-empty-interface*/ -import type { FromSchema } from 'json-schema-to-ts'; -import type { CompatibleJSONSchema } from '@kbn/observability-ai-assistant-plugin/public'; import type { AuthenticatedUser } from '@kbn/core/public'; +import type { CompatibleJSONSchema } from '@kbn/observability-ai-assistant-plugin/public'; +import type { FromSchema } from 'json-schema-to-ts'; import type { InvestigateWidget } from '../common'; import type { GlobalWidgetParameters, InvestigateWidgetCreate } from '../common/types'; import type { UseInvestigationApi } from './hooks/use_investigation'; -import type { UseInvestigateWidgetApi } from './hooks/use_investigate_widget'; export enum ChromeOption { disabled = 'disabled', @@ -84,5 +83,4 @@ export interface InvestigatePublicStart { from: string; to: string; }) => UseInvestigationApi; - useInvestigateWidget: () => UseInvestigateWidgetApi | undefined; } diff --git a/x-pack/plugins/observability_solution/investigate/tsconfig.json b/x-pack/plugins/observability_solution/investigate/tsconfig.json index fbbd221edb33de..c0ba6efeb978ab 100644 --- a/x-pack/plugins/observability_solution/investigate/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate/tsconfig.json @@ -9,8 +9,7 @@ "public/**/*", "typings/**/*", "public/**/*.json", - "server/**/*" - ], + "server/**/*", ], "kbn_references": [ "@kbn/core", "@kbn/logging", diff --git a/x-pack/plugins/observability_solution/investigate_app/public/application.tsx b/x-pack/plugins/observability_solution/investigate_app/public/application.tsx index c277f7f081368e..062d3be1f444e4 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/application.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/application.tsx @@ -7,14 +7,14 @@ import type { CoreStart, CoreTheme } from '@kbn/core/public'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; -import { RouteRenderer, RouterProvider } from '@kbn/typed-react-router-config'; +import { Route, Router, Routes } from '@kbn/shared-ux-router'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { History } from 'history'; import React, { useMemo } from 'react'; import type { Observable } from 'rxjs'; import { InvestigateAppContextProvider } from './components/investigate_app_context_provider'; import { InvestigateAppKibanaContext } from './hooks/use_kibana'; -import { investigateRouter } from './routes/config'; +import { getRoutes } from './routes/config'; import { InvestigateAppServices } from './services/types'; import type { InvestigateAppStartDependencies } from './types'; @@ -46,6 +46,21 @@ function Application({ [coreStart, pluginsStart, services] ); + const App = () => { + const routes = getRoutes(); + return ( + + {Object.keys(routes).map((path) => { + const { handler, exact } = routes[path]; + const Wrapper = () => { + return handler(); + }; + return ; + })} + + ); + }; + const queryClient = new QueryClient(); return ( @@ -53,11 +68,11 @@ function Application({ - + - + - + diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_abort_signal.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_abort_signal.ts deleted file mode 100644 index cf8f4ce7870420..00000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_abort_signal.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useEffect, useRef } from 'react'; - -export function useAbortSignal() { - const controllerRef = useRef(new AbortController()); - - useEffect(() => { - const controller = controllerRef.current; - return () => { - controller.abort(); - }; - }, []); - - return controllerRef.current.signal; -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts new file mode 100644 index 00000000000000..95a470099a9d36 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_add_investigation_note.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; +import { useMutation } from '@tanstack/react-query'; +import { + CreateInvestigationNoteInput, + CreateInvestigationNoteResponse, +} from '@kbn/investigation-shared'; +import { useKibana } from './use_kibana'; + +type ServerError = IHttpFetchError; + +export function useAddInvestigationNote() { + const { + core: { + http, + notifications: { toasts }, + }, + } = useKibana(); + + return useMutation< + CreateInvestigationNoteResponse, + ServerError, + { investigationId: string; note: CreateInvestigationNoteInput }, + { investigationId: string } + >( + ['addInvestigationNote'], + ({ investigationId, note }) => { + const body = JSON.stringify(note); + return http.post( + `/api/observability/investigations/${investigationId}/notes`, + { body, version: '2023-10-31' } + ); + }, + { + onSuccess: (response, {}) => { + // TODO: clear investigationNotes key from queryClient, and push new note to the internal store. + // console.log(response); + toasts.addSuccess('Note saved'); + }, + onError: (error, {}, context) => { + // console.log(error); + }, + } + ); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts new file mode 100644 index 00000000000000..39f026a47af6fb --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { GetInvestigationResponse } from '@kbn/investigation-shared'; +import { useQuery } from '@tanstack/react-query'; +import { investigationKeys } from './query_key_factory'; +import { useKibana } from './use_kibana'; + +export interface Params { + id: string; +} + +export interface UseFetchInvestigationResponse { + isInitialLoading: boolean; + isLoading: boolean; + isRefetching: boolean; + isSuccess: boolean; + isError: boolean; + data: GetInvestigationResponse | undefined; +} + +export function useFetchInvestigation({ id }: Params): UseFetchInvestigationResponse { + const { + core: { + http, + notifications: { toasts }, + }, + } = useKibana(); + + const { isInitialLoading, isLoading, isError, isSuccess, isRefetching, data } = useQuery({ + queryKey: investigationKeys.fetch({ id }), + queryFn: async ({ signal }) => { + return await http.get(`/api/observability/investigations/${id}`, { + version: '2023-10-31', + signal, + }); + }, + refetchOnWindowFocus: false, + onError: (error: Error) => { + toasts.addError(error, { + title: 'Something went wrong while fetching Investigations', + }); + }, + }); + + return { + data, + isInitialLoading, + isLoading, + isRefetching, + isSuccess, + isError, + }; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts index fef9ce274d63e8..db9c4264bdf3ef 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_fetch_investigation_list.ts @@ -6,7 +6,7 @@ */ import { useQuery } from '@tanstack/react-query'; -import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; +import { FindInvestigationsResponse } from '@kbn/investigation-shared'; import { investigationKeys } from './query_key_factory'; import { useKibana } from './use_kibana'; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx index 5f3bc3f3c9b6a1..0c0cda89d3eb84 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_alert_details.tsx @@ -10,7 +10,7 @@ import { BASE_RAC_ALERTS_API_PATH, EcsFieldsResponse } from '@kbn/rule-registry- import { useKibana } from './use_kibana'; export interface AlertParams { - id: string; + id?: string; } export interface UseFetchAlertResponse { @@ -40,15 +40,7 @@ export function useFetchAlert({ id }: AlertParams): UseFetchAlertResponse { signal, }); }, - cacheTime: 0, refetchOnWindowFocus: false, - retry: (failureCount, error) => { - if (String(error) === 'Error: Forbidden') { - return false; - } - - return failureCount < 3; - }, onError: (error: Error) => { toasts.addError(error, { title: 'Something went wrong while fetching alert', diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx index 796d8bc5615751..f42a15dadbeb26 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_get_investigation_details.tsx @@ -6,7 +6,7 @@ */ import { useQuery } from '@tanstack/react-query'; -import { GetInvestigationResponse } from '@kbn/investigate-plugin/common/schema/get'; +import { GetInvestigationResponse } from '@kbn/investigation-shared'; import { investigationKeys } from './query_key_factory'; import { useKibana } from './use_kibana'; @@ -41,15 +41,7 @@ export function useFetchInvestigation({ signal, }); }, - cacheTime: 0, refetchOnWindowFocus: false, - retry: (failureCount, error) => { - if (String(error) === 'Error: Forbidden') { - return false; - } - - return failureCount < 3; - }, onError: (error: Error) => { toasts.addError(error, { title: 'Something went wrong while fetching Investigation', diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_params.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_params.ts deleted file mode 100644 index d29e06bea8b9cf..00000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_params.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import { type PathsOf, type TypeOf, useParams } from '@kbn/typed-react-router-config'; -import type { InvestigateRoutes } from '../routes/config'; - -export function useInvestigateParams>( - path: TPath -): TypeOf { - return useParams(path)! as TypeOf; -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_router.ts b/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_router.ts deleted file mode 100644 index 40775d54e06053..00000000000000 --- a/x-pack/plugins/observability_solution/investigate_app/public/hooks/use_investigate_router.ts +++ /dev/null @@ -1,55 +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 { PathsOf, TypeAsArgs, TypeOf } from '@kbn/typed-react-router-config'; -import { useMemo } from 'react'; -import { InvestigateRouter, InvestigateRoutes } from '../routes/config'; -import { investigateRouter } from '../routes/config'; -import { useKibana } from './use_kibana'; - -interface StatefulInvestigateRouter extends InvestigateRouter { - push>( - path: T, - ...params: TypeAsArgs> - ): void; - replace>( - path: T, - ...params: TypeAsArgs> - ): void; -} - -export function useInvestigateRouter(): StatefulInvestigateRouter { - const { - core: { - http, - application: { navigateToApp }, - }, - } = useKibana(); - - const link = (...args: any[]) => { - // @ts-expect-error - return investigateRouter.link(...args); - }; - - return useMemo( - () => ({ - ...investigateRouter, - push: (...args) => { - const next = link(...args); - navigateToApp('investigations', { path: next, replace: false }); - }, - replace: (path, ...args) => { - const next = link(path, ...args); - navigateToApp('investigations', { path: next, replace: true }); - }, - link: (path, ...args) => { - return http.basePath.prepend('/app/investigations' + link(path, ...args)); - }, - }), - [navigateToApp, http.basePath] - ); -} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.stories.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.stories.tsx index 276d86519dfa48..8dfb18a753ac22 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.stories.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.stories.tsx @@ -20,7 +20,7 @@ export default meta; const defaultProps: ComponentStoryObj = { args: {}, - render: (props) => , + render: (props) => , }; export const InvestigateViewStory: ComponentStoryObj = { diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.tsx index 86a05ccdd9f34a..8004e739f056f7 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_details/index.tsx @@ -6,27 +6,41 @@ */ import datemath from '@elastic/datemath'; import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; -import type { InvestigateWidgetCreate } from '@kbn/investigate-plugin/public'; import { AuthenticatedUser } from '@kbn/security-plugin/common'; import { keyBy, noop } from 'lodash'; -import React, { useEffect, useMemo, useRef } from 'react'; +import React, { useMemo } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { AddObservationUI } from '../../../../components/add_observation_ui'; import { InvestigateSearchBar } from '../../../../components/investigate_search_bar'; import { InvestigateWidgetGrid } from '../../../../components/investigate_widget_grid'; +import { useAddInvestigationNote } from '../../../../hooks/use_add_investigation_note'; import { useDateRange } from '../../../../hooks/use_date_range'; +import { useFetchInvestigation } from '../../../../hooks/use_fetch_investigation'; import { useKibana } from '../../../../hooks/use_kibana'; import { InvestigationNotes } from '../investigation_notes/investigation_notes'; -function InvestigationDetailsWithUser({ user }: { user: AuthenticatedUser }) { +function InvestigationDetailsWithUser({ + user, + investigationId, +}: { + user: AuthenticatedUser; + investigationId: string; +}) { const { dependencies: { start: { investigate }, }, } = useKibana(); - const widgetDefinitions = useMemo(() => investigate.getWidgetDefinitions(), [investigate]); + const widgetDefinitions = investigate.getWidgetDefinitions(); const [range, setRange] = useDateRange(); + const { data: investigationData } = useFetchInvestigation({ id: investigationId }); + const { mutateAsync: addInvestigationNote } = useAddInvestigationNote(); + const handleAddInvestigationNote = async (note: string) => { + await addInvestigationNote({ investigationId, note: { content: note } }); + await addNote(note); + }; + const { addItem, copyItem, @@ -42,33 +56,6 @@ function InvestigationDetailsWithUser({ user }: { user: AuthenticatedUser }) { to: range.end.toISOString(), }); - const createWidget = (widgetCreate: InvestigateWidgetCreate) => { - return addItem(widgetCreate); - }; - - const createWidgetRef = useRef(createWidget); - createWidgetRef.current = createWidget; - - useEffect(() => { - if ( - renderableInvestigation?.parameters.timeRange.from && - renderableInvestigation?.parameters.timeRange.to && - range.start.toISOString() !== renderableInvestigation.parameters.timeRange.from && - range.end.toISOString() !== renderableInvestigation.parameters.timeRange.to - ) { - setRange({ - from: renderableInvestigation.parameters.timeRange.from, - to: renderableInvestigation.parameters.timeRange.to, - }); - } - }, [ - renderableInvestigation?.parameters.timeRange.from, - renderableInvestigation?.parameters.timeRange.to, - range.start, - range.end, - setRange, - ]); - const gridItems = useMemo(() => { const widgetDefinitionsByType = keyBy(widgetDefinitions, 'type'); @@ -88,7 +75,7 @@ function InvestigationDetailsWithUser({ user }: { user: AuthenticatedUser }) { }); }, [renderableInvestigation, widgetDefinitions]); - if (!investigation || !renderableInvestigation || !gridItems) { + if (!investigation || !renderableInvestigation || !gridItems || !investigationData) { return ; } @@ -135,20 +122,24 @@ function InvestigationDetailsWithUser({ user }: { user: AuthenticatedUser }) { { - return createWidgetRef.current(widget); + return addItem(widget); }} /> - + ); } -export function InvestigationDetails({}: {}) { +export function InvestigationDetails({ investigationId }: { investigationId: string }) { const { core: { security }, } = useKibana(); @@ -157,5 +148,12 @@ export function InvestigationDetails({}: {}) { return security.authc.getCurrentUser(); }, [security]); - return user.value ? : null; + if (investigationId == null) { + // TODO: return 404 page + return null; + } + + return user.value ? ( + + ) : null; } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/investigation_notes.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/investigation_notes.tsx index 21f5db7b768d61..09258063839e3d 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/investigation_notes.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/investigation_notes.tsx @@ -16,8 +16,8 @@ import { } from '@elastic/eui'; import { css } from '@emotion/css'; import { i18n } from '@kbn/i18n'; -import { InvestigationNote } from '@kbn/investigate-plugin/common'; import React from 'react'; +import { InvestigationNote } from '@kbn/investigate-plugin/common'; import { useTheme } from '../../../../hooks/use_theme'; import { ResizableTextInput } from './resizable_text_input'; import { TimelineMessage } from './timeline_message'; @@ -69,7 +69,7 @@ export function InvestigationNotes({ notes, addNote, deleteNote }: Props) { return ( } + icon={} note={currNote} onDelete={() => deleteNote(currNote.id)} /> diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/timeline_message.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/timeline_message.tsx index 31539050f7c525..c8e95ad70c7581 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/timeline_message.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/investigation_notes/timeline_message.tsx @@ -6,9 +6,9 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiMarkdownFormat, EuiText } from '@elastic/eui'; import { css } from '@emotion/css'; -import { InvestigationNote } from '@kbn/investigate-plugin/common'; // eslint-disable-next-line import/no-extraneous-dependencies import { format } from 'date-fns'; +import { InvestigationNote } from '@kbn/investigate-plugin/common'; import React from 'react'; import { InvestigateTextButton } from '../../../../components/investigate_text_button'; import { useTheme } from '../../../../hooks/use_theme'; diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx index ed749ce925ea18..90af6b4591c695 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/investigation_details_page.tsx @@ -7,15 +7,16 @@ import { EuiButton, EuiButtonEmpty, EuiText } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import React from 'react'; +import { alertOriginSchema } from '@kbn/investigation-shared'; import { ALERT_RULE_CATEGORY } from '@kbn/rule-data-utils/src/default_alerts_as_data'; -import { AlertOrigin } from '@kbn/investigate-plugin/common/schema/origin'; +import React from 'react'; +import { useParams } from 'react-router-dom'; import { paths } from '../../../common/paths'; -import { useKibana } from '../../hooks/use_kibana'; -import { useFetchInvestigation } from '../../hooks/use_get_investigation_details'; -import { useInvestigateParams } from '../../hooks/use_investigate_params'; import { useFetchAlert } from '../../hooks/use_get_alert_details'; +import { useFetchInvestigation } from '../../hooks/use_get_investigation_details'; +import { useKibana } from '../../hooks/use_kibana'; import { InvestigationDetails } from './components/investigation_details'; +import { InvestigationDetailsPathParams } from './types'; export function InvestigationDetailsPage() { const { @@ -27,9 +28,7 @@ export function InvestigationDetailsPage() { }, } = useKibana(); - const { - path: { id }, - } = useInvestigateParams('/{id}'); + const { investigationId } = useParams(); const ObservabilityPageTemplate = observabilityShared.navigation.PageTemplate; @@ -37,17 +36,15 @@ export function InvestigationDetailsPage() { data: investigationDetails, isLoading: isFetchInvestigationLoading, isError: isFetchInvestigationError, - } = useFetchInvestigation({ id }); + } = useFetchInvestigation({ id: investigationId }); - const alertId = investigationDetails ? (investigationDetails.origin as AlertOrigin).id : ''; + const alertId = alertOriginSchema.is(investigationDetails?.origin) + ? investigationDetails?.origin.id + : undefined; - const { - data: alertDetails, - isLoading: isFetchAlertLoading, - isError: isFetchAlertError, - } = useFetchAlert({ id: alertId }); + const { data: alertDetails } = useFetchAlert({ id: alertId }); - if (isFetchInvestigationLoading || isFetchAlertLoading) { + if (isFetchInvestigationLoading) { return (

{i18n.translate('xpack.investigateApp.fetchInvestigation.loadingLabel', { @@ -57,7 +54,7 @@ export function InvestigationDetailsPage() { ); } - if (isFetchInvestigationError || isFetchAlertError) { + if (isFetchInvestigationError) { return (

{i18n.translate('xpack.investigateApp.fetchInvestigation.errorLabel', { @@ -109,7 +106,7 @@ export function InvestigationDetailsPage() { ], }} > - + ); } diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/types.ts b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/types.ts new file mode 100644 index 00000000000000..1f9cb337f3d285 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/types.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface InvestigationDetailsPathParams { + investigationId: string; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/public/routes/config.tsx b/x-pack/plugins/observability_solution/investigate_app/public/routes/config.tsx index aaea81ec3d5741..7c6d4e894a6444 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/routes/config.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/routes/config.tsx @@ -4,33 +4,31 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { createRouter } from '@kbn/typed-react-router-config'; -import * as t from 'io-ts'; import React from 'react'; import { InvestigationDetailsPage } from '../pages/details/investigation_details_page'; import { InvestigationListPage } from '../pages/list/investigation_list_page'; -/** - * The array of route definitions to be used when the application - * creates the routes. - */ -const investigateRoutes = { - '/': { - element: , - }, - '/new': { - element: , - }, - '/{id}': { - element: , - params: t.type({ - path: t.type({ id: t.string }), - }), - }, +export const getRoutes = (): { + [path: string]: { + handler: () => React.ReactElement; + params: Record; + exact: boolean; + }; +} => { + return { + '/': { + handler: () => { + return ; + }, + params: {}, + exact: true, + }, + '/:investigationId': { + handler: () => { + return ; + }, + params: {}, + exact: true, + }, + }; }; - -export type InvestigateRoutes = typeof investigateRoutes; - -export const investigateRouter = createRouter(investigateRoutes); - -export type InvestigateRouter = typeof investigateRouter; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts index 041b1d217c2088..9b66a71ce3a9b7 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { alertOriginSchema, blankOriginSchema } from '@kbn/investigate-plugin/common/schema/origin'; +import { alertOriginSchema, blankOriginSchema } from '@kbn/investigation-shared'; import * as t from 'io-ts'; +import { investigationNoteSchema } from './investigation_note'; export const investigationSchema = t.type({ id: t.string, @@ -18,6 +19,7 @@ export const investigationSchema = t.type({ }), origin: t.union([alertOriginSchema, blankOriginSchema]), status: t.union([t.literal('ongoing'), t.literal('closed')]), + notes: t.array(investigationNoteSchema), }); export type Investigation = t.TypeOf; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/models/investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation_note.ts new file mode 100644 index 00000000000000..d94ec1a94c1088 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/server/models/investigation_note.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 * as t from 'io-ts'; + +export const investigationNoteSchema = t.type({ + id: t.string, + createdAt: t.number, + createdBy: t.string, + content: t.string, +}); + +export type InvestigationNote = t.TypeOf; +export type StoredInvestigationNote = t.OutputOf; diff --git a/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts b/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts index f745b46bb54b89..65f61d7f0a8142 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/routes/get_global_investigate_app_server_route_repository.ts @@ -5,14 +5,22 @@ * 2.0. */ -import { createInvestigationParamsSchema } from '@kbn/investigate-plugin/common'; -import { findInvestigationsParamsSchema } from '@kbn/investigate-plugin/common'; -import { getInvestigationParamsSchema } from '@kbn/investigate-plugin/common'; +import { + createInvestigationNoteParamsSchema, + createInvestigationParamsSchema, + deleteInvestigationParamsSchema, + findInvestigationsParamsSchema, + getInvestigationNotesParamsSchema, + getInvestigationParamsSchema, +} from '@kbn/investigation-shared'; import { createInvestigation } from '../services/create_investigation'; -import { investigationRepositoryFactory } from '../services/investigation_repository'; -import { createInvestigateAppServerRoute } from './create_investigate_app_server_route'; +import { createInvestigationNote } from '../services/create_investigation_note'; +import { deleteInvestigation } from '../services/delete_investigation'; import { findInvestigations } from '../services/find_investigations'; import { getInvestigation } from '../services/get_investigation'; +import { getInvestigationNotes } from '../services/get_investigation_notes'; +import { investigationRepositoryFactory } from '../services/investigation_repository'; +import { createInvestigateAppServerRoute } from './create_investigate_app_server_route'; const createInvestigationRoute = createInvestigateAppServerRoute({ endpoint: 'POST /api/observability/investigations 2023-10-31', @@ -56,11 +64,56 @@ const getInvestigationRoute = createInvestigateAppServerRoute({ }, }); +const deleteInvestigationRoute = createInvestigateAppServerRoute({ + endpoint: 'DELETE /api/observability/investigations/{id} 2023-10-31', + options: { + tags: [], + }, + params: deleteInvestigationParamsSchema, + handler: async (params) => { + const soClient = (await params.context.core).savedObjects.client; + const repository = investigationRepositoryFactory({ soClient, logger: params.logger }); + + return await deleteInvestigation(params.params.path.id, repository); + }, +}); + +const createInvestigationNoteRoute = createInvestigateAppServerRoute({ + endpoint: 'POST /api/observability/investigations/{id}/notes 2023-10-31', + options: { + tags: [], + }, + params: createInvestigationNoteParamsSchema, + handler: async (params) => { + const soClient = (await params.context.core).savedObjects.client; + const repository = investigationRepositoryFactory({ soClient, logger: params.logger }); + + return await createInvestigationNote(params.params.path.id, params.params.body, repository); + }, +}); + +const getInvestigationNotesRoute = createInvestigateAppServerRoute({ + endpoint: 'GET /api/observability/investigations/{id}/notes 2023-10-31', + options: { + tags: [], + }, + params: getInvestigationNotesParamsSchema, + handler: async (params) => { + const soClient = (await params.context.core).savedObjects.client; + const repository = investigationRepositoryFactory({ soClient, logger: params.logger }); + + return await getInvestigationNotes(params.params.path.id, repository); + }, +}); + export function getGlobalInvestigateAppServerRouteRepository() { return { ...createInvestigationRoute, ...findInvestigationsRoute, ...getInvestigationRoute, + ...deleteInvestigationRoute, + ...createInvestigationNoteRoute, + ...getInvestigationNotesRoute, }; } diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts index 52b5953fb80951..ee79ec34e1d362 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation.ts @@ -5,10 +5,7 @@ * 2.0. */ -import { - CreateInvestigationInput, - CreateInvestigationResponse, -} from '@kbn/investigate-plugin/common'; +import { CreateInvestigationInput, CreateInvestigationResponse } from '@kbn/investigation-shared'; import { InvestigationRepository } from './investigation_repository'; enum InvestigationStatus { @@ -25,6 +22,7 @@ export async function createInvestigation( createdAt: Date.now(), createdBy: 'elastic', status: InvestigationStatus.ongoing, + notes: [], }; await repository.save(investigation); diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation_note.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation_note.ts new file mode 100644 index 00000000000000..57e1b3312dc455 --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/create_investigation_note.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 { + CreateInvestigationNoteInput, + CreateInvestigationNoteResponse, +} from '@kbn/investigation-shared'; +import { v4 } from 'uuid'; +import { InvestigationRepository } from './investigation_repository'; + +export async function createInvestigationNote( + investigationId: string, + params: CreateInvestigationNoteInput, + repository: InvestigationRepository +): Promise { + const investigation = await repository.findById(investigationId); + + const investigationNote = { + id: v4(), + content: params.content, + createdBy: 'TODO: get user from request', + createdAt: Date.now(), + }; + investigation.notes.push(investigationNote); + + await repository.save(investigation); + + return investigationNote; +} diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/delete_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/delete_investigation.ts new file mode 100644 index 00000000000000..f615a6fb61a33c --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/delete_investigation.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { InvestigationRepository } from './investigation_repository'; + +export async function deleteInvestigation( + id: string, + repository: InvestigationRepository +): Promise { + await repository.deleteById(id); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts index 0db6f2eb587b8a..a3ea2db46d357a 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/find_investigations.ts @@ -5,11 +5,11 @@ * 2.0. */ -import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; import { FindInvestigationsParams, + FindInvestigationsResponse, findInvestigationsResponseSchema, -} from '@kbn/investigate-plugin/common/schema/find'; +} from '@kbn/investigation-shared'; import { InvestigationRepository } from './investigation_repository'; export async function findInvestigations( diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts index e57111af99e323..1aed642da756dd 100644 --- a/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation.ts @@ -5,8 +5,11 @@ * 2.0. */ -import { GetInvestigationParams } from '@kbn/investigate-plugin/common'; -import { GetInvestigationResponse } from '@kbn/investigate-plugin/common/schema/get'; +import { + GetInvestigationParams, + GetInvestigationResponse, + getInvestigationResponseSchema, +} from '@kbn/investigation-shared'; import { InvestigationRepository } from './investigation_repository'; export async function getInvestigation( @@ -15,5 +18,5 @@ export async function getInvestigation( ): Promise { const investigation = await repository.findById(params.id); - return investigation; + return getInvestigationResponseSchema.encode(investigation); } diff --git a/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation_notes.ts b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation_notes.ts new file mode 100644 index 00000000000000..510798e5007a5f --- /dev/null +++ b/x-pack/plugins/observability_solution/investigate_app/server/services/get_investigation_notes.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 { + GetInvestigationNotesResponse, + getInvestigationNotesResponseSchema, +} from '@kbn/investigation-shared'; +import { InvestigationRepository } from './investigation_repository'; + +export async function getInvestigationNotes( + investigationId: string, + repository: InvestigationRepository +): Promise { + const investigation = await repository.findById(investigationId); + + return getInvestigationNotesResponseSchema.encode(investigation.notes); +} diff --git a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json index 6647b16356984a..174c81ba6f6df5 100644 --- a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json @@ -21,7 +21,6 @@ "@kbn/react-kibana-context-theme", "@kbn/shared-ux-link-redirect-app", "@kbn/kibana-react-plugin", - "@kbn/typed-react-router-config", "@kbn/i18n", "@kbn/embeddable-plugin", "@kbn/observability-ai-assistant-plugin", @@ -54,5 +53,7 @@ "@kbn/core-saved-objects-server", "@kbn/rule-registry-plugin", "@kbn/rule-data-utils", + "@kbn/shared-ux-router", + "@kbn/investigation-shared", ], } diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx index e41674b2e78bef..11a797b7755772 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_create_investigation.tsx @@ -6,13 +6,13 @@ */ import { IHttpFetchError, ResponseErrorBody } from '@kbn/core/public'; -import { QueryKey, useMutation } from '@tanstack/react-query'; import { i18n } from '@kbn/i18n'; import { CreateInvestigationInput, CreateInvestigationResponse, -} from '@kbn/investigate-plugin/common'; -import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; + FindInvestigationsResponse, +} from '@kbn/investigation-shared'; +import { QueryKey, useMutation } from '@tanstack/react-query'; import { useKibana } from '../../../utils/kibana_react'; type ServerError = IHttpFetchError; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx index d9376f30d95797..67867858310f81 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/hooks/use_fetch_investigations_by_alert.tsx @@ -5,8 +5,8 @@ * 2.0. */ +import { FindInvestigationsResponse } from '@kbn/investigation-shared'; import { useQuery } from '@tanstack/react-query'; -import { FindInvestigationsResponse } from '@kbn/investigate-plugin/common'; import { useKibana } from '../../../utils/kibana_react'; export interface InvestigationsByAlertParams { diff --git a/x-pack/plugins/observability_solution/observability/tsconfig.json b/x-pack/plugins/observability_solution/observability/tsconfig.json index 53390c6c2d5357..0a65077d42a1ed 100644 --- a/x-pack/plugins/observability_solution/observability/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability/tsconfig.json @@ -111,6 +111,7 @@ "@kbn/observability-alerting-rule-utils", "@kbn/core-ui-settings-server-mocks", "@kbn/investigate-plugin", + "@kbn/investigation-shared", ], "exclude": [ "target/**/*" diff --git a/yarn.lock b/yarn.lock index 4768e377e05e09..d70da04a9070f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5320,6 +5320,10 @@ version "0.0.0" uid "" +"@kbn/investigation-shared@link:packages/kbn-investigation-shared": + version "0.0.0" + uid "" + "@kbn/io-ts-utils@link:packages/kbn-io-ts-utils": version "0.0.0" uid "" From 69c50c87748582e428192fe53bc790c68efa871e Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 14 Aug 2024 13:53:02 -0500 Subject: [PATCH 59/92] [renovate] Add CodeQL github action (#190537) --- renovate.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/renovate.json b/renovate.json index 6f9e87e5e07a0e..5f00b90f16b5ce 100644 --- a/renovate.json +++ b/renovate.json @@ -207,6 +207,18 @@ "minimumReleaseAge": "7 days", "enabled": true }, + { + "groupName": "CodeQL", + "matchDepNames": [ + "github/codeql-action/analyze", + "github/codeql-action/init" + ], + "reviewers": ["team:kibana-security"], + "matchBaseBranches": ["main"], + "labels": ["Team:Security", "release_note:skip", "backport:all-open"], + "minimumReleaseAge": "7 days", + "enabled": true + }, { "groupName": "ftr", "matchDepNames": [ From 4b0fb8fd588542ce2fc679b0d330900a08987d54 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 14 Aug 2024 14:03:05 -0500 Subject: [PATCH 60/92] [renovate] Add operations related github actions (#190538) --- renovate.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/renovate.json b/renovate.json index 5f00b90f16b5ce..c75d1336c2e0fe 100644 --- a/renovate.json +++ b/renovate.json @@ -27,9 +27,16 @@ "enabled": true }, { - "groupName": "GitHub actions", + "groupName": "operations actions", "matchManagers": ["github-actions"], - "matchPackageNames": ["actions/checkout"], + "matchPackageNames": [ + "actions/checkout", + "elastic/github-actions/project-assigner", + "hmarr/auto-approve-action", + "octokit/graphql-action", + "sergeysova/jq-action", + "sourenlouv/backport" + ], "reviewers": ["team:kibana-operations"], "matchBaseBranches": ["main"], "labels": ["Team:Operations", "backport:all-open", "release_note:skip"], From 627c9c41cf43b98cfa208afb654a5aaaf1b422ba Mon Sep 17 00:00:00 2001 From: "Quynh Nguyen (Quinn)" <43350163+qn895@users.noreply.github.com> Date: Wed, 14 Aug 2024 14:55:38 -0500 Subject: [PATCH 61/92] [ES|QL] Fix fields are no longer suggested for grok and dissect (#190153) ## Summary Fixes https://github.com/elastic/kibana/issues/190070 ![Screenshot 2024-08-08 at 09 54 30](https://github.com/user-attachments/assets/8a3bb30f-50ba-4aa6-a5f3-1ca9bc0075e7) ![Screenshot 2024-08-08 at 09 54 40](https://github.com/user-attachments/assets/81db1d34-bec5-4567-a066-c1f3557891ce) ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine Co-authored-by: Stratoula Kalafateli --- .../src/autocomplete/autocomplete.test.ts | 12 +++--------- .../src/autocomplete/autocomplete.ts | 4 ++-- .../src/definitions/commands.ts | 10 ++++------ .../src/definitions/helpers.ts | 2 +- .../src/definitions/types.ts | 4 ++-- .../src/validation/esql_validation_meta_tests.json | 4 ++-- .../src/validation/validation.test.ts | 5 ++--- .../src/validation/validation.ts | 13 ++++++++----- 8 files changed, 24 insertions(+), 30 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index dfae9d76a73afc..bfb8c8e2b16bf9 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -269,11 +269,7 @@ describe('autocomplete', () => { `dissect keywordField ${constantPattern} |`, ]; for (const subExpression of subExpressions) { - // Unskip once https://github.com/elastic/kibana/issues/190070 is fixed - testSuggestions.skip( - `from a | ${subExpression} grok /`, - getFieldNamesByType(ESQL_STRING_TYPES) - ); + testSuggestions(`from a | ${subExpression} grok /`, getFieldNamesByType(ESQL_STRING_TYPES)); testSuggestions(`from a | ${subExpression} grok keywordField /`, [constantPattern], ' '); testSuggestions(`from a | ${subExpression} grok keywordField ${constantPattern} /`, ['| ']); } @@ -1024,8 +1020,7 @@ describe('autocomplete', () => { ]); // DISSECT field - // enable once https://github.com/elastic/kibana/issues/190070 is fixed - testSuggestions.skip('FROM index1 | DISSECT b/', getFieldNamesByType(ESQL_STRING_TYPES)); + testSuggestions('FROM index1 | DISSECT b/', getFieldNamesByType(ESQL_STRING_TYPES)); // DROP (first field) testSuggestions('FROM index1 | DROP f/', getFieldNamesByType('any')); @@ -1057,8 +1052,7 @@ describe('autocomplete', () => { ]); // GROK field - // enable once https://github.com/elastic/kibana/issues/190070 - testSuggestions.skip('FROM index1 | GROK f/', getFieldNamesByType(ESQL_STRING_TYPES)); + testSuggestions('FROM index1 | GROK f/', getFieldNamesByType(ESQL_STRING_TYPES), undefined); // KEEP (first field) testSuggestions('FROM index1 | KEEP f/', getFieldNamesByType('any')); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index e775c3f05fe5f4..5afdcb8bccfb72 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -660,7 +660,7 @@ async function getExpressionSuggestionsByType( if ((!nodeArg || isNewExpression) && !endsWithNot) { suggestions.push( ...(await getFieldsOrFunctionsSuggestions( - [argDef.innerType || 'any'], + argDef.innerTypes ?? ['any'], command.name, option?.name, getFieldsByType, @@ -906,7 +906,7 @@ async function getExpressionSuggestionsByType( } } if (argDef.type === 'source') { - if (argDef.innerType === 'policy') { + if (argDef.innerTypes?.includes('policy')) { // ... | ENRICH const policies = await getPolicies(); suggestions.push(...(policies.length ? policies : [buildNoPoliciesAvailableDefinition()])); diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts index 17188417116020..2e67461f073c28 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/commands.ts @@ -415,8 +415,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ - // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) - { name: 'column', type: 'column', innerType: 'string' }, + { name: 'column', type: 'column', innerTypes: ['keyword', 'text'] }, { name: 'pattern', type: 'string', constantOnly: true }, ], }, @@ -433,8 +432,7 @@ export const commandDefinitions: CommandDefinition[] = [ signature: { multipleParams: false, params: [ - // innerType: 'string' is interpreted as keyword and text (see columnParamsWithInnerTypes) - { name: 'column', type: 'column', innerType: 'string' }, + { name: 'column', type: 'column', innerTypes: ['keyword', 'text'] }, { name: 'pattern', type: 'string', constantOnly: true }, ], }, @@ -449,7 +447,7 @@ export const commandDefinitions: CommandDefinition[] = [ modes: [], signature: { multipleParams: false, - params: [{ name: 'column', type: 'column', innerType: 'any' }], + params: [{ name: 'column', type: 'column', innerTypes: ['any'] }], }, }, { @@ -467,7 +465,7 @@ export const commandDefinitions: CommandDefinition[] = [ modes: [ENRICH_MODES], signature: { multipleParams: false, - params: [{ name: 'policyName', type: 'source', innerType: 'policy' }], + params: [{ name: 'policyName', type: 'source', innerTypes: ['policy'] }], }, }, ]; diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts index 3773a7c30e3d1a..9b673cc2d4e6e5 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts @@ -93,7 +93,7 @@ function printCommandArgument( return param.name || ''; } return `${param.name}${param.optional ? ':?' : ':'} ${param.type}${ - param.innerType ? `{${param.innerType}}` : '' + param.innerTypes ? `{${param.innerTypes}}` : '' }`; } diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index d41a18ba99cfe4..043fb77eb262bb 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -154,13 +154,13 @@ export interface CommandBaseDefinition { hidden?: boolean; signature: { multipleParams: boolean; - // innerType here is useful to drill down the type in case of "column" + // innerTypes here is useful to drill down the type in case of "column" // i.e. column of type string params: Array<{ name: string; type: string; optional?: boolean; - innerType?: string; + innerTypes?: string[]; values?: string[]; valueDescriptions?: string[]; constantOnly?: boolean; diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 9eecf5156a8927..21af463f8edeb1 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -2685,7 +2685,7 @@ { "query": "from a_index | dissect doubleField \"%{firstWord}\"", "error": [ - "DISSECT only supports string type values, found [doubleField] of type [double]" + "DISSECT only supports keyword, text types values, found [doubleField] of type [double]" ], "warning": [] }, @@ -2779,7 +2779,7 @@ { "query": "from a_index | grok doubleField \"%{firstWord}\"", "error": [ - "GROK only supports string type values, found [doubleField] of type [double]" + "GROK only supports keyword, text types values, found [doubleField] of type [double]" ], "warning": [] }, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index ab5a7ec61329ef..1b8097cac54409 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -701,7 +701,7 @@ describe('validation logic', () => { // Do not try to validate the dissect pattern string testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}"', []); testErrorsAndWarnings('from a_index | dissect doubleField "%{firstWord}"', [ - 'DISSECT only supports string type values, found [doubleField] of type [double]', + 'DISSECT only supports keyword, text types values, found [doubleField] of type [double]', ]); testErrorsAndWarnings('from a_index | dissect textField "%{firstWord}" option ', [ "SyntaxError: mismatched input '' expecting '='", @@ -748,11 +748,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | grok textField %a', [ "SyntaxError: mismatched input '%' expecting QUOTED_STRING", ]); - // @TODO: investigate // Do not try to validate the grok pattern string testErrorsAndWarnings('from a_index | grok textField "%{firstWord}"', []); testErrorsAndWarnings('from a_index | grok doubleField "%{firstWord}"', [ - 'GROK only supports string type values, found [doubleField] of type [double]', + 'GROK only supports keyword, text types values, found [doubleField] of type [double]', ]); testErrorsAndWarnings('from a_index | grok textField "%{firstWord}" | keep firstWord', []); // testErrorsAndWarnings('from a_index | grok s* "%{a}"', [ diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index 4de1adf4a31533..aedefb08e73877 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -873,18 +873,21 @@ function validateColumnForCommand( if (getColumnExists(column, references)) { const commandDef = getCommandDefinition(commandName); const columnParamsWithInnerTypes = commandDef.signature.params.filter( - ({ type, innerType }) => type === 'column' && innerType + ({ type, innerTypes }) => type === 'column' && innerTypes ); // this should be guaranteed by the columnCheck above const columnRef = lookupColumn(column, references)!; if (columnParamsWithInnerTypes.length) { - const hasSomeWrongInnerTypes = columnParamsWithInnerTypes.every(({ innerType }) => { - if (innerType === 'string' && isStringType(columnRef.type)) return false; - return innerType !== 'any' && innerType !== columnRef.type; + const hasSomeWrongInnerTypes = columnParamsWithInnerTypes.every(({ innerTypes }) => { + if (innerTypes?.includes('string') && isStringType(columnRef.type)) return false; + return innerTypes && !innerTypes.includes('any') && !innerTypes.includes(columnRef.type); }); if (hasSomeWrongInnerTypes) { - const supportedTypes = columnParamsWithInnerTypes.map(({ innerType }) => innerType); + const supportedTypes: string[] = columnParamsWithInnerTypes + .map(({ innerTypes }) => innerTypes) + .flat() + .filter((type) => type !== undefined) as string[]; messages.push( getMessageFromId({ From 96eb1f258de4fc945b4109c94881eff6421aef47 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 14 Aug 2024 21:02:35 +0100 Subject: [PATCH 62/92] skip flaky suite (#175841) --- .../plugins/cases/public/components/files/file_type.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 6a96870f14cf97..242fb2fa6af09a 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,7 +17,8 @@ import { basicCase, basicFileMock } from '../../containers/mock'; import { getFileType } from './file_type'; import { FILE_ATTACHMENT_TYPE } from '../../../common/constants'; -describe('getFileType', () => { +// FLAKY: https://github.com/elastic/kibana/issues/175841 +describe.skip('getFileType', () => { const fileType = getFileType(); it('invalid props return blank FileAttachmentViewObject', () => { From 2077468c376009e1d65deb78076d85585ef7bbe7 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 14 Aug 2024 15:08:30 -0500 Subject: [PATCH 63/92] [renovate] Add launchdarkly github action (#190535) Adds the GitHub action `launchdarkly/find-code-references` to the LaunchDarkly group of dependencies. A pull request will be opened shortly after introducing sha pinning to the dependency. --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index c75d1336c2e0fe..5145552ed64207 100644 --- a/renovate.json +++ b/renovate.json @@ -68,7 +68,7 @@ }, { "groupName": "LaunchDarkly", - "matchDepNames": ["launchdarkly-js-client-sdk", "@launchdarkly/node-server-sdk"], + "matchDepNames": ["launchdarkly-js-client-sdk", "@launchdarkly/node-server-sdk", "launchdarkly/find-code-references"], "reviewers": ["team:kibana-security", "team:kibana-core"], "matchBaseBranches": ["main"], "labels": ["release_note:skip", "Team:Security", "Team:Core", "backport:prev-minor"], From 708fcd20dfe7a153bc9ba98ff9417f7c1b5a3585 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Wed, 14 Aug 2024 17:22:01 -0400 Subject: [PATCH 64/92] [Fleet] Use multiple saved object type for agent and package policies with opt-in migration (#189387) --- .../current_fields.json | 60 +++- .../current_mappings.json | 182 ++++++++++ .../kbn_client/kbn_client_saved_objects.ts | 3 + .../check_registered_types.test.ts | 4 +- .../group3/type_registrations.test.ts | 2 + .../fleet/common/constants/agent_policy.ts | 4 +- .../fleet/common/constants/package_policy.ts | 4 +- x-pack/plugins/fleet/common/index.ts | 3 +- .../fleet/common/types/models/settings.ts | 3 + .../common/types/rest_spec/fleet_setup.ts | 1 + .../fleet/components/search_bar.test.tsx | 330 +++++++++--------- .../fleet/components/search_bar.tsx | 3 + .../agent_policy_advanced_fields/index.tsx | 4 +- .../sections/agent_policy/list_page/index.tsx | 15 +- .../hooks/use_fetch_agents_data.tsx | 4 +- .../components/preconfiguration_debugger.tsx | 4 +- .../components/saved_object_debugger.tsx | 8 +- .../services/get_count.tsx | 6 +- .../services/agent_and_policies_count.tsx | 6 +- .../plugins/fleet/public/constants/index.ts | 3 +- .../fleet/public/hooks/use_fleet_status.tsx | 2 + .../fleet/server/collectors/agent_policies.ts | 10 +- .../plugins/fleet/server/constants/index.ts | 3 +- .../enable_space_awareness.test.ts | 228 ++++++++++++ ...pgrade_agent_policy_schema_version.test.ts | 13 +- x-pack/plugins/fleet/server/mocks/index.ts | 8 +- x-pack/plugins/fleet/server/plugin.ts | 4 +- .../fleet/server/routes/agent/handlers.ts | 10 +- .../plugins/fleet/server/routes/app/index.ts | 43 ++- .../routes/enrollment_api_key/handler.ts | 8 +- x-pack/plugins/fleet/server/routes/index.ts | 2 +- .../server/routes/setup/handlers.test.ts | 3 + .../fleet/server/routes/setup/handlers.ts | 13 +- .../server/routes/uninstall_token/handlers.ts | 4 +- .../utils/filter_utils_real_queries.test.ts | 40 +-- .../fleet/server/saved_objects/index.ts | 126 ++++++- .../server/services/agent_policy.test.ts | 154 +++++--- .../fleet/server/services/agent_policy.ts | 145 +++++--- .../services/agent_policy_watch.test.ts | 26 +- .../server/services/agent_policy_watch.ts | 8 +- .../server/services/agents/action_status.ts | 4 +- .../fleet/server/services/agents/crud.test.ts | 1 + .../fleet/server/services/agents/crud.ts | 5 +- .../fleet/server/services/agents/status.ts | 6 +- .../services/agents/update_agent_tags.test.ts | 10 +- .../services/agents/update_agent_tags.ts | 4 +- .../api_keys/enrollment_api_key.test.ts | 1 + .../services/api_keys/enrollment_api_key.ts | 3 +- .../fleet/server/services/app_context.ts | 10 +- .../services/epm/packages/_install_package.ts | 4 +- .../fleet/server/services/epm/packages/get.ts | 13 +- .../server/services/fleet_server/index.ts | 7 +- .../plugins/fleet/server/services/output.ts | 8 +- .../server/services/package_policy.test.ts | 98 ++++-- .../fleet/server/services/package_policy.ts | 182 +++++++--- .../server/services/package_policy_service.ts | 4 +- .../server/services/preconfiguration.test.ts | 4 +- .../services/preconfiguration/outputs.test.ts | 12 +- .../preconfiguration/reset_agent_policies.ts | 9 +- .../server/services/security/fleet_router.ts | 19 +- .../uninstall_token_service/index.test.ts | 8 +- .../security/uninstall_token_service/index.ts | 16 +- .../plugins/fleet/server/services/settings.ts | 13 +- .../services/spaces/agent_namespaces.test.ts | 91 +++-- .../services/spaces/agent_namespaces.ts | 12 +- .../spaces/enable_space_awareness.test.ts | 203 +++++++++++ .../services/spaces/enable_space_awareness.ts | 128 +++++++ .../server/services/spaces/helper.test.ts | 131 +++++++ .../fleet/server/services/spaces/helpers.ts | 44 +++ .../spaces/query_namespaces_filtering.test.ts | 53 ++- .../spaces/query_namespaces_filtering.ts | 6 +- .../server/types/rest_spec/agent_policy.ts | 4 +- .../osquery/server/lib/fleet_integration.ts | 4 +- .../osquery/server/lib/telemetry/helpers.ts | 5 +- .../osquery/server/lib/update_global_packs.ts | 4 +- .../server/routes/pack/create_pack_route.ts | 4 +- .../server/routes/pack/find_pack_route.ts | 4 +- .../server/routes/pack/read_pack_route.ts | 7 +- .../server/routes/pack/update_pack_route.ts | 8 +- .../routes/status/create_status_route.ts | 4 +- .../scripts/endpoint/common/fleet_services.ts | 4 +- .../manifest_manager/manifest_manager.test.ts | 16 +- .../manifest_manager/manifest_manager.ts | 6 +- .../lib/telemetry_helpers.ts | 4 +- .../apis/outputs/crud.ts | 8 +- .../apis/policy_secrets.ts | 4 +- .../apis/space_awareness/actions.ts | 2 + .../apis/space_awareness/agent_policies.ts | 2 + .../apis/space_awareness/agents.ts | 2 + .../apis/space_awareness/api_helper.ts | 19 + .../space_awareness/enrollment_api_keys.ts | 2 + .../space_awareness/enrollment_settings.ts | 3 + .../apis/space_awareness/index.js | 1 + .../space_awareness_migration.ts | 140 ++++++++ .../apis/space_awareness/uninstall_tokens.ts | 1 + x-pack/test/fleet_api_integration/helpers.ts | 32 +- 96 files changed, 2243 insertions(+), 655 deletions(-) create mode 100644 x-pack/plugins/fleet/server/integration_tests/enable_space_awareness.test.ts create mode 100644 x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.test.ts create mode 100644 x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.ts create mode 100644 x-pack/plugins/fleet/server/services/spaces/helper.test.ts create mode 100644 x-pack/plugins/fleet/server/services/spaces/helpers.ts create mode 100644 x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index 211777a5274a5b..aa84c709c655bc 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -460,6 +460,36 @@ "token", "valid_until" ], + "fleet-agent-policies": [ + "advanced_settings", + "agent_features", + "agent_features.enabled", + "agent_features.name", + "data_output_id", + "description", + "download_source_id", + "fleet_server_host_id", + "global_data_tags", + "inactivity_timeout", + "is_default", + "is_default_fleet_server", + "is_managed", + "is_preconfigured", + "is_protected", + "keep_monitoring_alive", + "monitoring_enabled", + "monitoring_output_id", + "name", + "namespace", + "overrides", + "revision", + "schema_version", + "status", + "supports_agentless", + "unenroll_timeout", + "updated_at", + "updated_by" + ], "fleet-fleet-server-host": [ "host_urls", "is_default", @@ -469,6 +499,32 @@ "proxy_id" ], "fleet-message-signing-keys": [], + "fleet-package-policies": [ + "created_at", + "created_by", + "description", + "elasticsearch", + "enabled", + "inputs", + "is_managed", + "name", + "namespace", + "output_id", + "overrides", + "package", + "package.name", + "package.requires_root", + "package.title", + "package.version", + "policy_id", + "policy_ids", + "revision", + "secret_references", + "secret_references.id", + "updated_at", + "updated_by", + "vars" + ], "fleet-preconfiguration-deletion-record": [ "id" ], @@ -651,7 +707,9 @@ "has_seen_add_data_notice", "output_secret_storage_requirements_met", "prerelease_integrations_enabled", - "secret_storage_requirements_met" + "secret_storage_requirements_met", + "use_space_awareness_migration_started_at", + "use_space_awareness_migration_status" ], "inventory-view": [], "kql-telemetry": [], diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index e6e1fef63ee85a..97e34c9b293410 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -1553,6 +1553,99 @@ } } }, + "fleet-agent-policies": { + "properties": { + "advanced_settings": { + "index": false, + "type": "flattened" + }, + "agent_features": { + "properties": { + "enabled": { + "type": "boolean" + }, + "name": { + "type": "keyword" + } + } + }, + "data_output_id": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "download_source_id": { + "type": "keyword" + }, + "fleet_server_host_id": { + "type": "keyword" + }, + "global_data_tags": { + "index": false, + "type": "flattened" + }, + "inactivity_timeout": { + "type": "integer" + }, + "is_default": { + "type": "boolean" + }, + "is_default_fleet_server": { + "type": "boolean" + }, + "is_managed": { + "type": "boolean" + }, + "is_preconfigured": { + "type": "keyword" + }, + "is_protected": { + "type": "boolean" + }, + "keep_monitoring_alive": { + "type": "boolean" + }, + "monitoring_enabled": { + "index": false, + "type": "keyword" + }, + "monitoring_output_id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "overrides": { + "index": false, + "type": "flattened" + }, + "revision": { + "type": "integer" + }, + "schema_version": { + "type": "version" + }, + "status": { + "type": "keyword" + }, + "supports_agentless": { + "type": "boolean" + }, + "unenroll_timeout": { + "type": "integer" + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + } + } + }, "fleet-fleet-server-host": { "properties": { "host_urls": { @@ -1581,6 +1674,87 @@ "dynamic": false, "properties": {} }, + "fleet-package-policies": { + "properties": { + "created_at": { + "type": "date" + }, + "created_by": { + "type": "keyword" + }, + "description": { + "type": "text" + }, + "elasticsearch": { + "dynamic": false, + "properties": {} + }, + "enabled": { + "type": "boolean" + }, + "inputs": { + "dynamic": false, + "properties": {} + }, + "is_managed": { + "type": "boolean" + }, + "name": { + "type": "keyword" + }, + "namespace": { + "type": "keyword" + }, + "output_id": { + "type": "keyword" + }, + "overrides": { + "index": false, + "type": "flattened" + }, + "package": { + "properties": { + "name": { + "type": "keyword" + }, + "requires_root": { + "type": "boolean" + }, + "title": { + "type": "keyword" + }, + "version": { + "type": "keyword" + } + } + }, + "policy_id": { + "type": "keyword" + }, + "policy_ids": { + "type": "keyword" + }, + "revision": { + "type": "integer" + }, + "secret_references": { + "properties": { + "id": { + "type": "keyword" + } + } + }, + "updated_at": { + "type": "date" + }, + "updated_by": { + "type": "keyword" + }, + "vars": { + "type": "flattened" + } + } + }, "fleet-preconfiguration-deletion-record": { "properties": { "id": { @@ -2168,6 +2342,14 @@ }, "secret_storage_requirements_met": { "type": "boolean" + }, + "use_space_awareness_migration_started_at": { + "index": false, + "type": "date" + }, + "use_space_awareness_migration_status": { + "index": false, + "type": "keyword" } } }, diff --git a/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts b/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts index f15fb0035d6709..3f498eb5f46068 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_saved_objects.ts @@ -118,10 +118,13 @@ const STANDARD_LIST_TYPES = [ 'infrastructure-monitoring-log-view', 'apm-indices', // Fleet saved object types + 'ingest_manager_settings', 'ingest-outputs', 'ingest-download-sources', 'ingest-agent-policies', + 'fleet-agent-policies', 'ingest-package-policies', + 'fleet-package-policies', 'epm-packages', 'epm-packages-assets', 'fleet-preconfiguration-deletion-record', 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 6d978b2d33ca45..b965b48762879e 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 @@ -102,8 +102,10 @@ describe('checking migration metadata changes on all registered SO types', () => "file": "6b65ae5899b60ebe08656fd163ea532e557d3c98", "file-upload-usage-collection-telemetry": "06e0a8c04f991e744e09d03ab2bd7f86b2088200", "fileShare": "5be52de1747d249a221b5241af2838264e19aaa1", + "fleet-agent-policies": "f57d3b70e4175a19a18f18ee72a379ceec82e1fc", "fleet-fleet-server-host": "69be15f6b6f2a2875ad3c7050ddea7a87f505417", "fleet-message-signing-keys": "93421f43fed2526b59092a4e3c65d64bc2266c0f", + "fleet-package-policies": "2f4d524adb49a5281d3af0b66bb3003ba0ff2e44", "fleet-preconfiguration-deletion-record": "c52ea1e13c919afe8a5e8e3adbb7080980ecc08e", "fleet-proxy": "6cb688f0d2dd856400c1dbc998b28704ff70363d", "fleet-setup-lock": "0dc784792c79b5af5a6e6b5dcac06b0dbaa90bde", @@ -120,7 +122,7 @@ describe('checking migration metadata changes on all registered SO types', () => "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "daafff49255ab700e07491376fe89f04fc998b91", "ingest-package-policies": "53a94064674835fdb35e5186233bcd7052eabd22", - "ingest_manager_settings": "91445219e7115ff0c45d1dabd5d614a80b421797", + "ingest_manager_settings": "e794576a05d19dd5306a1e23cbb82c09bffabd65", "inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83", "kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad", "legacy-url-alias": "9b8cca3fbb2da46fd12823d3cd38fdf1c9f24bc8", diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts index fff7d32d78af50..e7c1034ba4a1e5 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/type_registrations.test.ts @@ -67,6 +67,8 @@ const previouslyRegisteredTypes = [ 'file-upload-usage-collection-telemetry', 'fleet-agent-actions', 'fleet-agent-events', + 'fleet-agent-policies', + 'fleet-package-policies', 'fleet-agents', 'fleet-enrollment-api-keys', 'fleet-fleet-server-host', diff --git a/x-pack/plugins/fleet/common/constants/agent_policy.ts b/x-pack/plugins/fleet/common/constants/agent_policy.ts index b6e32f86ac5142..b89577ed7c3655 100644 --- a/x-pack/plugins/fleet/common/constants/agent_policy.ts +++ b/x-pack/plugins/fleet/common/constants/agent_policy.ts @@ -5,7 +5,9 @@ * 2.0. */ -export const AGENT_POLICY_SAVED_OBJECT_TYPE = 'ingest-agent-policies'; +export const LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE = 'ingest-agent-policies'; +export const AGENT_POLICY_SAVED_OBJECT_TYPE = 'fleet-agent-policies'; + export const AGENT_POLICY_INDEX = '.fleet-policies'; export const agentPolicyStatuses = { Active: 'active', diff --git a/x-pack/plugins/fleet/common/constants/package_policy.ts b/x-pack/plugins/fleet/common/constants/package_policy.ts index 00b41a8a29de2f..9ff84c65ad22b8 100644 --- a/x-pack/plugins/fleet/common/constants/package_policy.ts +++ b/x-pack/plugins/fleet/common/constants/package_policy.ts @@ -5,7 +5,9 @@ * 2.0. */ -export const PACKAGE_POLICY_SAVED_OBJECT_TYPE = 'ingest-package-policies'; +export const LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE = 'ingest-package-policies'; + +export const PACKAGE_POLICY_SAVED_OBJECT_TYPE = 'fleet-package-policies'; export const PACKAGE_POLICY_DEFAULT_INDEX_PRIVILEGES = ['auto_configure', 'create_doc']; diff --git a/x-pack/plugins/fleet/common/index.ts b/x-pack/plugins/fleet/common/index.ts index 9b50a140a7e939..5b88793b3e6f28 100644 --- a/x-pack/plugins/fleet/common/index.ts +++ b/x-pack/plugins/fleet/common/index.ts @@ -24,8 +24,9 @@ export { FLEET_ENDPOINT_PACKAGE, // Saved object type AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE as PACKAGE_POLICY_SAVED_OBJECT_TYPE, OUTPUT_SAVED_OBJECT_TYPE, PRECONFIGURATION_DELETION_RECORD_SAVED_OBJECT_TYPE, ASSETS_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/fleet/common/types/models/settings.ts b/x-pack/plugins/fleet/common/types/models/settings.ts index bb44724d5c54e8..9a5166e41df962 100644 --- a/x-pack/plugins/fleet/common/types/models/settings.ts +++ b/x-pack/plugins/fleet/common/types/models/settings.ts @@ -13,7 +13,10 @@ export interface BaseSettings { export interface Settings extends BaseSettings { id: string; + version?: string; preconfigured_fields?: Array<'fleet_server_hosts'>; secret_storage_requirements_met?: boolean; output_secret_storage_requirements_met?: boolean; + use_space_awareness_migration_status?: 'pending' | 'success' | 'error'; + use_space_awareness_migration_started_at?: string | null; } diff --git a/x-pack/plugins/fleet/common/types/rest_spec/fleet_setup.ts b/x-pack/plugins/fleet/common/types/rest_spec/fleet_setup.ts index df308458e30498..61180ba5094d14 100644 --- a/x-pack/plugins/fleet/common/types/rest_spec/fleet_setup.ts +++ b/x-pack/plugins/fleet/common/types/rest_spec/fleet_setup.ts @@ -17,5 +17,6 @@ export interface GetFleetStatusResponse { >; missing_optional_features: Array<'encrypted_saved_object_encryption_key_required'>; package_verification_key_id?: string; + is_space_awareness_enabled?: boolean; is_secrets_storage_enabled?: boolean; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx index 22f81b125015e5..d426cd754b6190 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.test.tsx @@ -15,7 +15,7 @@ import { createFleetTestRendererMock } from '../../../mock'; import { AGENTS_PREFIX, FLEET_ENROLLMENT_API_PREFIX, - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENTS_INDEX, ENROLLMENT_API_KEYS_INDEX, INGEST_SAVED_OBJECT_INDEX, @@ -238,169 +238,171 @@ describe('getFieldSpecs', () => { }); it('returns fieldSpecs for Fleet agent policies', () => { - expect(getFieldSpecs(INGEST_SAVED_OBJECT_INDEX, AGENT_POLICY_SAVED_OBJECT_TYPE)).toEqual([ - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.agent_features.name', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['boolean'], - name: 'ingest-agent-policies.agent_features.enabled', - searchable: true, - type: 'boolean', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.data_output_id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['text'], - name: 'ingest-agent-policies.description', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.download_source_id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.fleet_server_host_id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['integer'], - name: 'ingest-agent-policies.inactivity_timeout', - searchable: true, - type: 'number', - }, - { - aggregatable: true, - esTypes: ['boolean'], - name: 'ingest-agent-policies.is_default', - searchable: true, - type: 'boolean', - }, - { - aggregatable: true, - esTypes: ['boolean'], - name: 'ingest-agent-policies.is_default_fleet_server', - searchable: true, - type: 'boolean', - }, - { - aggregatable: true, - esTypes: ['boolean'], - name: 'ingest-agent-policies.is_managed', - searchable: true, - type: 'boolean', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.is_preconfigured', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['boolean'], - name: 'ingest-agent-policies.is_protected', - searchable: true, - type: 'boolean', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.monitoring_enabled', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['false'], - name: 'ingest-agent-policies.monitoring_enabled.index', - searchable: true, - type: 'false', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.monitoring_output_id', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.name', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.namespace', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['integer'], - name: 'ingest-agent-policies.revision', - searchable: true, - type: 'number', - }, - { - aggregatable: true, - esTypes: ['version'], - name: 'ingest-agent-policies.schema_version', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.status', - searchable: true, - type: 'string', - }, - { - aggregatable: true, - esTypes: ['integer'], - name: 'ingest-agent-policies.unenroll_timeout', - searchable: true, - type: 'number', - }, - { - aggregatable: true, - esTypes: ['date'], - name: 'ingest-agent-policies.updated_at', - searchable: true, - type: 'date', - }, - { - aggregatable: true, - esTypes: ['keyword'], - name: 'ingest-agent-policies.updated_by', - searchable: true, - type: 'string', - }, - ]); + expect(getFieldSpecs(INGEST_SAVED_OBJECT_INDEX, LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE)).toEqual( + [ + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.agent_features.name', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['boolean'], + name: 'ingest-agent-policies.agent_features.enabled', + searchable: true, + type: 'boolean', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.data_output_id', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['text'], + name: 'ingest-agent-policies.description', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.download_source_id', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.fleet_server_host_id', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['integer'], + name: 'ingest-agent-policies.inactivity_timeout', + searchable: true, + type: 'number', + }, + { + aggregatable: true, + esTypes: ['boolean'], + name: 'ingest-agent-policies.is_default', + searchable: true, + type: 'boolean', + }, + { + aggregatable: true, + esTypes: ['boolean'], + name: 'ingest-agent-policies.is_default_fleet_server', + searchable: true, + type: 'boolean', + }, + { + aggregatable: true, + esTypes: ['boolean'], + name: 'ingest-agent-policies.is_managed', + searchable: true, + type: 'boolean', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.is_preconfigured', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['boolean'], + name: 'ingest-agent-policies.is_protected', + searchable: true, + type: 'boolean', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.monitoring_enabled', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['false'], + name: 'ingest-agent-policies.monitoring_enabled.index', + searchable: true, + type: 'false', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.monitoring_output_id', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.name', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.namespace', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['integer'], + name: 'ingest-agent-policies.revision', + searchable: true, + type: 'number', + }, + { + aggregatable: true, + esTypes: ['version'], + name: 'ingest-agent-policies.schema_version', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.status', + searchable: true, + type: 'string', + }, + { + aggregatable: true, + esTypes: ['integer'], + name: 'ingest-agent-policies.unenroll_timeout', + searchable: true, + type: 'number', + }, + { + aggregatable: true, + esTypes: ['date'], + name: 'ingest-agent-policies.updated_at', + searchable: true, + type: 'date', + }, + { + aggregatable: true, + esTypes: ['keyword'], + name: 'ingest-agent-policies.updated_by', + searchable: true, + type: 'string', + }, + ] + ); }); it('returns empty array if indexPattern is not one of the previous', async () => { diff --git a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx index 3e47a3a7955b32..1a7074e2f885a9 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/components/search_bar.tsx @@ -23,6 +23,7 @@ import { AGENTS_INDEX, ENROLLMENT_API_KEYS_INDEX, AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, INGEST_SAVED_OBJECT_INDEX, } from '../constants'; @@ -51,6 +52,8 @@ const getMappings = (indexPattern: string, fieldPrefix: string) => { switch (fieldPrefix) { case AGENT_POLICY_SAVED_OBJECT_TYPE: return AGENT_POLICY_MAPPINGS; + case LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE: + return AGENT_POLICY_MAPPINGS; default: return {}; } diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx index c17e3345bfd1da..f7886d2d5e0ce7 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/components/agent_policy_advanced_fields/index.tsx @@ -30,7 +30,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, dataTypes, DEFAULT_MAX_AGENT_POLICIES_WITH_INACTIVITY_TIMEOUT, } from '../../../../../../../common/constants'; @@ -95,7 +95,7 @@ export const AgentPolicyAdvancedOptionsContent: React.FunctionComponent = const { data: agentPoliciesData } = useGetAgentPolicies({ page: 1, perPage: 0, - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.inactivity_timeout:*`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.inactivity_timeout:*`, }); const totalAgentPoliciesWithInactivityTimeout = agentPoliciesData?.total ?? 0; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx index 40f057b56551cf..6ab01d06f52ddd 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/list_page/index.tsx @@ -25,7 +25,11 @@ import { useHistory } from 'react-router-dom'; import type { AgentPolicy } from '../../../types'; import { getRootIntegrations } from '../../../../../../common/services'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, INGEST_SAVED_OBJECT_INDEX } from '../../../constants'; +import { + AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + INGEST_SAVED_OBJECT_INDEX, +} from '../../../constants'; import { useAuthz, usePagination, @@ -35,6 +39,7 @@ import { useUrlParams, useBreadcrumbs, useGetAgentPoliciesQuery, + useFleetStatus, } from '../../../hooks'; import { SearchBar } from '../../../components'; import { AgentPolicySummaryLine } from '../../../../../components'; @@ -43,6 +48,7 @@ import { LinkedAgentCount, AgentPolicyActionMenu } from '../components'; import { CreateAgentPolicyFlyout } from './components'; export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { + const { isSpaceAwarenessEnabled } = useFleetStatus(); useBreadcrumbs('policies_list'); const { getPath } = useLink(); const hasFleetAllAgentPoliciesPrivileges = useAuthz().fleet.allAgentPolicies; @@ -321,7 +327,11 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { { setPagination({ ...pagination, @@ -342,7 +352,6 @@ export const AgentPolicyListPage: React.FunctionComponent<{}> = () => { {createAgentPolicyButton} - loading={isLoading} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_fetch_agents_data.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_fetch_agents_data.tsx index 95041d7c089d1f..e67d0e83c28e08 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_fetch_agents_data.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/hooks/use_fetch_agents_data.tsx @@ -25,7 +25,7 @@ import { sendGetActionStatus, } from '../../../../hooks'; import { AgentStatusKueryHelper, ExperimentalFeaturesService } from '../../../../services'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../../constants'; import { getKuery } from '../utils/get_kuery'; @@ -166,7 +166,7 @@ export function useFetchAgentsData() { kuery: AgentStatusKueryHelper.buildKueryForInactiveAgents(), }), sendGetAgentPolicies({ - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.is_managed:true`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.is_managed:true`, perPage: SO_SEARCH_LIMIT, full: false, }), diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx index 7642589bc1d6cb..f140e4068d0406 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/preconfiguration_debugger.tsx @@ -29,13 +29,13 @@ import { useLink, useStartServices, } from '../../../hooks'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; import { queryClient } from '..'; import { CodeBlock } from './code_block'; const fetchPreconfiguredPolicies = async () => { - const kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.is_preconfigured:true`; + const kuery = `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.is_preconfigured:true`; const response = await sendGetAgentPolicies({ kuery, perPage: SO_SEARCH_LIMIT, full: true }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx index cf41612a0d5fdd..4c4cdddd1f1063 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/debug/components/saved_object_debugger.tsx @@ -26,8 +26,8 @@ import { debugRoutesService } from '../../../../../../common/services'; import { OUTPUT_SAVED_OBJECT_TYPE, - AGENT_POLICY_SAVED_OBJECT_TYPE, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE, DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, @@ -60,13 +60,13 @@ const fetchSavedObjects = async (type?: string, name?: string) => { export const SavedObjectDebugger: React.FunctionComponent = () => { const types = [ { - value: `${AGENT_POLICY_SAVED_OBJECT_TYPE}`, + value: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}`, text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.agentPolicyLabel', { defaultMessage: 'Agent policy', }), }, { - value: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}`, + value: `${LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE}`, text: i18n.translate('xpack.fleet.debug.savedObjectDebugger.packagePolicyLabel', { defaultMessage: 'Integration policy', }), diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx index ce9428771c0e4f..23acf9e8c43cdc 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/components/download_source_flyout/services/get_count.tsx @@ -7,12 +7,12 @@ import { sendGetAgentPolicies, sendGetAgents } from '../../../../../hooks'; import type { DownloadSource } from '../../../../../types'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../../../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../../../constants'; export async function getCountsForDownloadSource(downloadSource: DownloadSource) { - let kuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:"${downloadSource.id}"`; + let kuery = `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:"${downloadSource.id}"`; if (downloadSource.is_default) { - kuery += ` or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)`; + kuery += ` or (not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)`; } const agentPolicies = await sendGetAgentPolicies({ kuery, diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx index 8720ede4f04b8f..9ea3db4e148516 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/settings/services/agent_and_policies_count.tsx @@ -8,17 +8,17 @@ import { sendGetAgentPolicies, sendGetPackagePolicies, sendGetAgents } from '../../../hooks'; import type { Output } from '../../../types'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, } from '../../../constants'; export async function getAgentAndPolicyCountForOutput(output: Output) { - let agentPolicyKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${output.id}" or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id:"${output.id}"`; + let agentPolicyKuery = `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${output.id}" or ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id:"${output.id}"`; const packagePolicyKuery = `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.output_id:"${output.id}"`; if (output.is_default) { - agentPolicyKuery += ` or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)`; + agentPolicyKuery += ` or (not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)`; } const agentPolicies = await sendGetAgentPolicies({ diff --git a/x-pack/plugins/fleet/public/constants/index.ts b/x-pack/plugins/fleet/public/constants/index.ts index 1c0a04b9cb8a71..4fbe799aa73372 100644 --- a/x-pack/plugins/fleet/public/constants/index.ts +++ b/x-pack/plugins/fleet/public/constants/index.ts @@ -14,10 +14,11 @@ export { AGENT_API_ROUTES, SO_SEARCH_LIMIT, AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENTS_PREFIX, UNPRIVILEGED_AGENT_KUERY, PRIVILEGED_AGENT_KUERY, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE as PACKAGE_POLICY_SAVED_OBJECT_TYPE, FLEET_SERVER_PACKAGE, // Fleet Server index AGENTS_INDEX, diff --git a/x-pack/plugins/fleet/public/hooks/use_fleet_status.tsx b/x-pack/plugins/fleet/public/hooks/use_fleet_status.tsx index b05b3a1abc049d..019940dc922380 100644 --- a/x-pack/plugins/fleet/public/hooks/use_fleet_status.tsx +++ b/x-pack/plugins/fleet/public/hooks/use_fleet_status.tsx @@ -21,6 +21,7 @@ export interface FleetStatusProviderProps { missingRequirements?: GetFleetStatusResponse['missing_requirements']; missingOptionalFeatures?: GetFleetStatusResponse['missing_optional_features']; isSecretsStorageEnabled?: GetFleetStatusResponse['is_secrets_storage_enabled']; + isSpaceAwarenessEnabled?: GetFleetStatusResponse['is_space_awareness_enabled']; spaceId?: string; } @@ -64,6 +65,7 @@ export const FleetStatusProvider: React.FC<{ missingRequirements: data?.missing_requirements, missingOptionalFeatures: data?.missing_optional_features, isSecretsStorageEnabled: data?.is_secrets_storage_enabled, + isSpaceAwarenessEnabled: data?.is_space_awareness_enabled, spaceId, }; diff --git a/x-pack/plugins/fleet/server/collectors/agent_policies.ts b/x-pack/plugins/fleet/server/collectors/agent_policies.ts index 190c43f341ff8a..3412e5f7f3c6e1 100644 --- a/x-pack/plugins/fleet/server/collectors/agent_policies.ts +++ b/x-pack/plugins/fleet/server/collectors/agent_policies.ts @@ -8,12 +8,9 @@ import type { SavedObjectsClientContract } from '@kbn/core/server'; import _ from 'lodash'; -import { - AGENT_POLICY_SAVED_OBJECT_TYPE, - OUTPUT_SAVED_OBJECT_TYPE, - SO_SEARCH_LIMIT, -} from '../../common'; +import { OUTPUT_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../common'; import type { OutputSOAttributes, AgentPolicy } from '../types'; +import { getAgentPolicySavedObjectType } from '../services/agent_policy'; export interface AgentPoliciesUsage { count: number; @@ -35,9 +32,10 @@ export const getAgentPoliciesUsage = async ( const outputsById = _.keyBy(outputs, 'id'); + const agentPolicySavedObjectType = await getAgentPolicySavedObjectType(); const { saved_objects: agentPolicies, total: totalAgentPolicies } = await soClient.find({ - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: agentPolicySavedObjectType, page: 1, perPage: SO_SEARCH_LIMIT, }); diff --git a/x-pack/plugins/fleet/server/constants/index.ts b/x-pack/plugins/fleet/server/constants/index.ts index 8ea5297ecd59bc..7751a8f23a59b6 100644 --- a/x-pack/plugins/fleet/server/constants/index.ts +++ b/x-pack/plugins/fleet/server/constants/index.ts @@ -45,8 +45,9 @@ export { // Saved object types SO_SEARCH_LIMIT, AGENTS_PREFIX, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_SAVED_OBJECT_TYPE, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE as PACKAGE_POLICY_SAVED_OBJECT_TYPE, OUTPUT_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE, ASSETS_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/fleet/server/integration_tests/enable_space_awareness.test.ts b/x-pack/plugins/fleet/server/integration_tests/enable_space_awareness.test.ts new file mode 100644 index 00000000000000..0af9026bf8fa23 --- /dev/null +++ b/x-pack/plugins/fleet/server/integration_tests/enable_space_awareness.test.ts @@ -0,0 +1,228 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import Path from 'path'; + +import type { KibanaRequest, SavedObjectsClientContract } from '@kbn/core/server'; +import { type MockedLogger, loggerMock } from '@kbn/logging-mocks'; + +import { + type TestElasticsearchUtils, + type TestKibanaUtils, + createRootWithCorePlugins, + createTestServers, +} from '@kbn/core-test-helpers-kbn-server'; +import { SECURITY_EXTENSION_ID } from '@kbn/core-saved-objects-server'; + +import { + AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '../../common/constants'; + +import { appContextService } from '../services/app_context'; +import { enableSpaceAwarenessMigration } from '../services/spaces/enable_space_awareness'; + +import { + FLEET_AGENT_POLICIES_SCHEMA_VERSION, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, +} from '../constants'; + +import { useDockerRegistry, waitForFleetSetup } from './helpers'; + +const logFilePath = Path.join(__dirname, 'logs.log'); + +const fakeRequest = { + headers: {}, + getBasePath: () => '', + path: '/', + route: { settings: {} }, + url: { + href: '/', + }, + raw: { + req: { + url: '/', + }, + }, +} as unknown as KibanaRequest; + +describe('enableSpaceAwareness', () => { + let esServer: TestElasticsearchUtils; + let kbnServer: TestKibanaUtils; + + const registryUrl = useDockerRegistry(); + + const startServers = async () => { + const { startES } = createTestServers({ + adjustTimeout: (t) => jest.setTimeout(t), + settings: { + es: { + license: 'trial', + }, + kbn: {}, + }, + }); + + esServer = await startES(); + const startKibana = async () => { + const root = createRootWithCorePlugins( + { + xpack: { + fleet: { + registryUrl, + packages: [ + { + name: 'nginx', + version: 'latest', + }, + ], + }, + }, + logging: { + appenders: { + file: { + type: 'file', + fileName: logFilePath, + layout: { + type: 'json', + }, + }, + }, + loggers: [ + { + name: 'root', + appenders: ['file'], + }, + { + name: 'plugins.fleet', + level: 'all', + }, + ], + }, + }, + { oss: false } + ); + + await root.preboot(); + const coreSetup = await root.setup(); + const coreStart = await root.start(); + + return { + root, + coreSetup, + coreStart, + stop: async () => await root.shutdown(), + }; + }; + kbnServer = await startKibana(); + + await waitForFleetSetup(kbnServer.root); + }; + + const stopServers = async () => { + if (kbnServer) { + await kbnServer.stop(); + } + + if (esServer) { + await esServer.stop(); + } + + await new Promise((res) => setTimeout(res, 10000)); + }; + + // Share the same servers for all the test to make test a lot faster (but test are not isolated anymore) + beforeAll(async () => { + await startServers(); + }); + + afterAll(async () => { + await stopServers(); + }); + + let soClient: SavedObjectsClientContract; + + let logger: MockedLogger; + + beforeAll(async () => { + soClient = kbnServer.coreStart.savedObjects.getScopedClient(fakeRequest, { + excludedExtensions: [SECURITY_EXTENSION_ID], + }); + logger = loggerMock.create(); + appContextService.getLogger = () => logger; + + const RANGES = Array.from({ length: 5000 }, (value, index) => index); + + await soClient.bulkCreate( + RANGES.map((i) => ({ + id: `agent-policy-${i}`, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + attributes: { + name: `agent-policy-${i}`, + schema_version: FLEET_AGENT_POLICIES_SCHEMA_VERSION, + revision: 1, + updated_at: new Date().toISOString(), + }, + })), + { + refresh: 'wait_for', + } + ); + + await soClient.bulkCreate( + RANGES.map((i) => ({ + id: `package-policy-${i}`, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + attributes: { + name: `package-policy-${i}`, + created_at: new Date().toISOString(), + updated_at: new Date().toISOString(), + }, + })), + { + refresh: 'wait_for', + } + ); + }); + it('should support concurrent calls', async () => { + const res = await Promise.allSettled([ + enableSpaceAwarenessMigration(), + enableSpaceAwarenessMigration(), + enableSpaceAwarenessMigration(), + enableSpaceAwarenessMigration(), + enableSpaceAwarenessMigration(), + ]); + + const logs = loggerMock.collect(logger); + expect(res.filter((p) => p.status === 'fulfilled')).toHaveLength(1); + // It should start and complete the migration only once + expect( + logs.info.filter((m) => m[0] === 'Starting Fleet space awareness migration') + ).toHaveLength(1); + expect( + logs.info.filter((m) => m[0] === 'Fleet space awareness migration is complete') + ).toHaveLength(1); + // + expect( + logs.info.filter((m) => m[0] === 'Fleet space awareness migration is pending') + ).toHaveLength(4); + + // Check saved object are migrated + const resAgentPolicies = await soClient.find({ + type: AGENT_POLICY_SAVED_OBJECT_TYPE, + perPage: 0, + }); + expect(resAgentPolicies.total).toBe(5000); + + const resPackagePolicies = await soClient.find({ + type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + perPage: 0, + }); + expect(resPackagePolicies.total).toBe(5000); + }); +}); diff --git a/x-pack/plugins/fleet/server/integration_tests/upgrade_agent_policy_schema_version.test.ts b/x-pack/plugins/fleet/server/integration_tests/upgrade_agent_policy_schema_version.test.ts index dd4e925a7f17aa..57e42a842a02c7 100644 --- a/x-pack/plugins/fleet/server/integration_tests/upgrade_agent_policy_schema_version.test.ts +++ b/x-pack/plugins/fleet/server/integration_tests/upgrade_agent_policy_schema_version.test.ts @@ -23,7 +23,10 @@ import { createRootWithCorePlugins, } from '@kbn/core-test-helpers-kbn-server'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, FLEET_AGENT_POLICIES_SCHEMA_VERSION } from '../constants'; +import { + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + FLEET_AGENT_POLICIES_SCHEMA_VERSION, +} from '../constants'; import { upgradeAgentPolicySchemaVersion } from '../services/setup/upgrade_agent_policy_schema_version'; import { AGENT_POLICY_INDEX } from '../../common'; import { agentPolicyService } from '../services'; @@ -141,7 +144,7 @@ describe('upgrade agent policy schema version', () => { await soClient.bulkCreate([ // up-to-date schema_version { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, id: uuidv4(), attributes: { schema_version: FLEET_AGENT_POLICIES_SCHEMA_VERSION, @@ -150,7 +153,7 @@ describe('upgrade agent policy schema version', () => { }, // out-of-date schema_version { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, id: uuidv4(), attributes: { schema_version: '0.0.1', @@ -159,7 +162,7 @@ describe('upgrade agent policy schema version', () => { }, // missing schema_version { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, id: uuidv4(), attributes: { revision: 1, @@ -170,7 +173,7 @@ describe('upgrade agent policy schema version', () => { await upgradeAgentPolicySchemaVersion(soClient); const policies = await agentPolicyService.list(soClient, { - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.schema_version:${FLEET_AGENT_POLICIES_SCHEMA_VERSION}`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.schema_version:${FLEET_AGENT_POLICIES_SCHEMA_VERSION}`, }); // all 3 should be up-to-date after upgrade expect(policies.total).toBe(3); diff --git a/x-pack/plugins/fleet/server/mocks/index.ts b/x-pack/plugins/fleet/server/mocks/index.ts index 9dfb920251e76e..200bd6270f6a6a 100644 --- a/x-pack/plugins/fleet/server/mocks/index.ts +++ b/x-pack/plugins/fleet/server/mocks/index.ts @@ -167,20 +167,20 @@ export const createPackagePolicyServiceMock = (): jest.Mocked { - return { + return Promise.resolve({ async *[Symbol.asyncIterator]() { yield Promise.resolve([PackagePolicyMocks.generatePackagePolicy({ id: '111' })]); yield Promise.resolve([PackagePolicyMocks.generatePackagePolicy({ id: '222' })]); }, - }; + }); }), fetchAllItemIds: jest.fn((..._) => { - return { + return Promise.resolve({ async *[Symbol.asyncIterator]() { yield Promise.resolve(['111']); yield Promise.resolve(['222']); }, - }; + }); }), removeOutputFromAll: jest.fn(), }; diff --git a/x-pack/plugins/fleet/server/plugin.ts b/x-pack/plugins/fleet/server/plugin.ts index ae65f94238bfa9..98ab5630cad801 100644 --- a/x-pack/plugins/fleet/server/plugin.ts +++ b/x-pack/plugins/fleet/server/plugin.ts @@ -78,7 +78,7 @@ import { } from './services/security'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, ASSETS_SAVED_OBJECT_TYPE, DOWNLOAD_SOURCE_SAVED_OBJECT_TYPE, FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, @@ -183,7 +183,7 @@ export type FleetSetupContract = void; const allSavedObjectTypes = [ OUTPUT_SAVED_OBJECT_TYPE, - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE, ASSETS_SAVED_OBJECT_TYPE, diff --git a/x-pack/plugins/fleet/server/routes/agent/handlers.ts b/x-pack/plugins/fleet/server/routes/agent/handlers.ts index 8ff3f82b7e6c67..350eb24847d855 100644 --- a/x-pack/plugins/fleet/server/routes/agent/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/agent/handlers.ts @@ -47,8 +47,8 @@ import { getAgentStatusForAgentPolicy } from '../../services/agents'; import { isAgentInNamespace } from '../../services/spaces/agent_namespaces'; import { getCurrentNamespace } from '../../services/spaces/get_current_namespace'; -function verifyNamespace(agent: Agent, namespace?: string) { - if (!isAgentInNamespace(agent, namespace)) { +async function verifyNamespace(agent: Agent, namespace?: string) { + if (!(await isAgentInNamespace(agent, namespace))) { throw new FleetNotFoundError(`${agent.id} not found in namespace`); } } @@ -62,7 +62,7 @@ export const getAgentHandler: FleetRequestHandler< const esClientCurrentUser = coreContext.elasticsearch.client.asCurrentUser; let agent = await fleetContext.agentClient.asCurrentUser.getAgent(request.params.agentId); - verifyNamespace(agent, getCurrentNamespace(coreContext.savedObjects.client)); + await verifyNamespace(agent, getCurrentNamespace(coreContext.savedObjects.client)); if (request.query.withMetrics) { agent = (await fetchAndAssignAgentMetrics(esClientCurrentUser, [agent]))[0]; @@ -92,7 +92,7 @@ export const deleteAgentHandler: FleetRequestHandler< try { const agent = await fleetContext.agentClient.asCurrentUser.getAgent(request.params.agentId); - verifyNamespace(agent, getCurrentNamespace(coreContext.savedObjects.client)); + await verifyNamespace(agent, getCurrentNamespace(coreContext.savedObjects.client)); await AgentService.deleteAgent(esClient, request.params.agentId); @@ -132,7 +132,7 @@ export const updateAgentHandler: FleetRequestHandler< try { const agent = await fleetContext.agentClient.asCurrentUser.getAgent(request.params.agentId); - verifyNamespace(agent, getCurrentNamespace(soClient)); + await verifyNamespace(agent, getCurrentNamespace(soClient)); await AgentService.updateAgent(esClient, request.params.agentId, partialAgent); const body = { diff --git a/x-pack/plugins/fleet/server/routes/app/index.ts b/x-pack/plugins/fleet/server/routes/app/index.ts index db1b86c12243b8..981cbdad8f5a71 100644 --- a/x-pack/plugins/fleet/server/routes/app/index.ts +++ b/x-pack/plugins/fleet/server/routes/app/index.ts @@ -8,16 +8,17 @@ import type { RequestHandler, RouteValidationResultFactory } from '@kbn/core/server'; import type { TypeOf } from '@kbn/config-schema'; +import { parseExperimentalConfigValue } from '../../../common/experimental_features'; import type { FleetAuthzRouter } from '../../services/security'; - import { APP_API_ROUTES } from '../../constants'; import { API_VERSIONS } from '../../../common/constants'; - import { appContextService } from '../../services'; import type { CheckPermissionsResponse, GenerateServiceTokenResponse } from '../../../common/types'; import { defaultFleetErrorHandler, GenerateServiceTokenError } from '../../errors'; import type { FleetRequestHandler, GenerateServiceTokenRequestSchema } from '../../types'; import { CheckPermissionsRequestSchema } from '../../types'; +import { enableSpaceAwarenessMigration } from '../../services/spaces/enable_space_awareness'; +import { type FleetConfigType } from '../../config'; export const getCheckPermissionsHandler: FleetRequestHandler< unknown, @@ -98,6 +99,23 @@ export const getCheckPermissionsHandler: FleetRequestHandler< } }; +export const postEnableSpaceAwarenessHandler: FleetRequestHandler = async ( + context, + request, + response +) => { + try { + await enableSpaceAwarenessMigration(); + + return response.ok({ + body: {}, + }); + } catch (e) { + const error = new GenerateServiceTokenError(e); + return defaultFleetErrorHandler({ error, response }); + } +}; + export const generateServiceTokenHandler: RequestHandler< null, null, @@ -142,7 +160,26 @@ const serviceTokenBodyValidation = (data: any, validationResult: RouteValidation return ok({ remote }); }; -export const registerRoutes = (router: FleetAuthzRouter) => { +export const registerRoutes = (router: FleetAuthzRouter, config: FleetConfigType) => { + const experimentalFeatures = parseExperimentalConfigValue(config.enableExperimental); + + if (experimentalFeatures.useSpaceAwareness) { + router.versioned + .post({ + path: '/internal/fleet/enable_space_awareness', + access: 'internal', + fleetAuthz: { + fleet: { all: true }, + }, + }) + .addVersion( + { + version: API_VERSIONS.internal.v1, + validate: {}, + }, + postEnableSpaceAwarenessHandler + ); + } router.versioned .get({ path: APP_API_ROUTES.CHECK_PERMISSIONS_PATTERN, diff --git a/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts b/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts index 4edea93176de4a..a38f5bdadc6173 100644 --- a/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts +++ b/x-pack/plugins/fleet/server/routes/enrollment_api_key/handler.ts @@ -23,19 +23,19 @@ import type { import * as APIKeyService from '../../services/api_keys'; import { agentPolicyService } from '../../services/agent_policy'; import { defaultFleetErrorHandler, AgentPolicyNotFoundError } from '../../errors'; -import { appContextService } from '../../services'; import { getCurrentNamespace } from '../../services/spaces/get_current_namespace'; +import { isSpaceAwarenessEnabled } from '../../services/spaces/helpers'; export const getEnrollmentApiKeysHandler: RequestHandler< undefined, TypeOf > = async (context, request, response) => { - const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); // Use kibana_system and depend on authz checks on HTTP layer to prevent abuse const esClient = (await context.core).elasticsearch.client.asInternalUser; const soClient = (await context.core).savedObjects.client; try { + const useSpaceAwareness = await isSpaceAwarenessEnabled(); const { items, total, page, perPage } = await APIKeyService.listEnrollmentApiKeys(esClient, { page: request.query.page, perPage: request.query.perPage, @@ -91,7 +91,7 @@ export const deleteEnrollmentApiKeyHandler: RequestHandler< TypeOf > = async (context, request, response) => { try { - const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); + const useSpaceAwareness = await isSpaceAwarenessEnabled(); const coreContext = await context.core; const esClient = coreContext.elasticsearch.client.asInternalUser; const currentNamespace = getCurrentNamespace(coreContext.savedObjects.client); @@ -124,7 +124,7 @@ export const getOneEnrollmentApiKeyHandler: RequestHandler< const coreContext = await context.core; const esClient = coreContext.elasticsearch.client.asInternalUser; const currentNamespace = getCurrentNamespace(coreContext.savedObjects.client); - const { useSpaceAwareness } = appContextService.getExperimentalFeatures(); + const useSpaceAwareness = await isSpaceAwarenessEnabled(); const apiKey = await APIKeyService.getEnrollmentAPIKey( esClient, diff --git a/x-pack/plugins/fleet/server/routes/index.ts b/x-pack/plugins/fleet/server/routes/index.ts index 9257d672848a70..41ce57e85de2b4 100644 --- a/x-pack/plugins/fleet/server/routes/index.ts +++ b/x-pack/plugins/fleet/server/routes/index.ts @@ -31,7 +31,7 @@ import { registerRoutes as registerDebugRoutes } from './debug'; export function registerRoutes(fleetAuthzRouter: FleetAuthzRouter, config: FleetConfigType) { // Always register app routes for permissions checking - registerAppRoutes(fleetAuthzRouter); + registerAppRoutes(fleetAuthzRouter, config); // The upload package route is only authorized for the superuser registerEPMRoutes(fleetAuthzRouter, config); diff --git a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts index bb9bf0b507ca9e..d5a49bdb28e0f4 100644 --- a/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts +++ b/x-pack/plugins/fleet/server/routes/setup/handlers.test.ts @@ -179,6 +179,7 @@ describe('FleetStatusHandler', () => { const expectedBody = { isReady: true, is_secrets_storage_enabled: false, + is_space_awareness_enabled: false, missing_optional_features: [], missing_requirements: [], }; @@ -200,6 +201,7 @@ describe('FleetStatusHandler', () => { const expectedBody = { isReady: false, is_secrets_storage_enabled: false, + is_space_awareness_enabled: false, missing_optional_features: [], missing_requirements: ['api_keys', 'fleet_server'], }; @@ -228,6 +230,7 @@ describe('FleetStatusHandler', () => { const expectedBody = { isReady: true, is_secrets_storage_enabled: false, + is_space_awareness_enabled: false, missing_optional_features: [], missing_requirements: [], }; diff --git a/x-pack/plugins/fleet/server/routes/setup/handlers.ts b/x-pack/plugins/fleet/server/routes/setup/handlers.ts index 019fb2af5276b8..05ee55320d445c 100644 --- a/x-pack/plugins/fleet/server/routes/setup/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/setup/handlers.ts @@ -13,6 +13,7 @@ import { defaultFleetErrorHandler } from '../../errors'; import type { FleetRequestHandler } from '../../types'; import { getGpgKeyIdOrUndefined } from '../../services/epm/packages/package_verification'; import { isSecretStorageEnabled } from '../../services/secrets'; +import { isSpaceAwarenessEnabled } from '../../services/spaces/helpers'; export const getFleetStatusHandler: FleetRequestHandler = async (context, request, response) => { const coreContext = await context.core; @@ -24,7 +25,14 @@ export const getFleetStatusHandler: FleetRequestHandler = async (context, reques const isApiKeysEnabled = await appContextService .getSecurity() .authc.apiKeys.areAPIKeysEnabled(); - const isFleetServerMissing = !(await hasFleetServers(esClient, soClient)); + + const [hasFleetServersRes, useSecretsStorage, isSpaceAwarenessEnabledRes] = await Promise.all([ + hasFleetServers(esClient, soClient), + isSecretStorageEnabled(esClient, soClient), + isSpaceAwarenessEnabled(), + ]); + + const isFleetServerMissing = !hasFleetServersRes; const isFleetServerStandalone = appContextService.getConfig()?.internal?.fleetServerStandalone ?? false; @@ -43,13 +51,12 @@ export const getFleetStatusHandler: FleetRequestHandler = async (context, reques missingOptionalFeatures.push('encrypted_saved_object_encryption_key_required'); } - const useSecretsStorage = await isSecretStorageEnabled(esClient, soClient); - const body: GetFleetStatusResponse = { isReady: missingRequirements.length === 0, missing_requirements: missingRequirements, missing_optional_features: missingOptionalFeatures, is_secrets_storage_enabled: useSecretsStorage, + is_space_awareness_enabled: isSpaceAwarenessEnabledRes, }; const packageVerificationKeyId = await getGpgKeyIdOrUndefined(); diff --git a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts index 5e61d5b9b01a2d..24d85b8d142500 100644 --- a/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts +++ b/x-pack/plugins/fleet/server/routes/uninstall_token/handlers.ts @@ -15,7 +15,7 @@ import type { } from '../../types/rest_spec/uninstall_token'; import { defaultFleetErrorHandler } from '../../errors'; import type { GetUninstallTokenResponse } from '../../../common/types/rest_spec/uninstall_token'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../constants'; export const getUninstallTokensMetadataHandler: FleetRequestHandler< unknown, @@ -40,7 +40,7 @@ export const getUninstallTokensMetadataHandler: FleetRequestHandler< const { items: managedPolicies } = await agentPolicyService.list(soClient, { fields: ['id'], perPage: SO_SEARCH_LIMIT, - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.is_managed:true`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.is_managed:true`, }); const managedPolicyIds = managedPolicies.map((policy) => policy.id); diff --git a/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts b/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts index a8765dc87327be..0c81462dd197b6 100644 --- a/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts +++ b/x-pack/plugins/fleet/server/routes/utils/filter_utils_real_queries.test.ts @@ -8,7 +8,7 @@ import * as esKuery from '@kbn/es-query'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, AGENTS_PREFIX, AGENT_POLICY_MAPPINGS, @@ -30,11 +30,11 @@ describe('ValidateFilterKueryNode validates real kueries through KueryNode', () describe('Agent policies', () => { it('Search by data_output_id', async () => { const astFilter = esKuery.fromKueryExpression( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id` ); const validationObject = validateFilterKueryNode({ astFilter, - types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + types: [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], indexMapping: AGENT_POLICY_MAPPINGS, storeValue: true, }); @@ -51,11 +51,11 @@ describe('ValidateFilterKueryNode validates real kueries through KueryNode', () it('Search by inactivity timeout', async () => { const astFilter = esKuery.fromKueryExpression( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.inactivity_timeout:*` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.inactivity_timeout:*` ); const validationObject = validateFilterKueryNode({ astFilter, - types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + types: [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], indexMapping: AGENT_POLICY_MAPPINGS, storeValue: true, }); @@ -73,9 +73,9 @@ describe('ValidateFilterKueryNode validates real kueries through KueryNode', () it('Complex query', async () => { const validationObject = validateFilterKueryNode({ astFilter: esKuery.fromKueryExpression( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:some_id or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:some_id or (not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.download_source_id:*)` ), - types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + types: [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], indexMapping: AGENT_POLICY_MAPPINGS, storeValue: true, }); @@ -100,11 +100,11 @@ describe('ValidateFilterKueryNode validates real kueries through KueryNode', () it('Test another complex query', async () => { const astFilter = esKuery.fromKueryExpression( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id: test_id or (not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id or ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.monitoring_output_id: test_id or (not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*)` ); const validationObject = validateFilterKueryNode({ astFilter, - types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + types: [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], indexMapping: AGENT_POLICY_MAPPINGS, storeValue: true, }); @@ -136,11 +136,11 @@ describe('ValidateFilterKueryNode validates real kueries through KueryNode', () it('Returns error if the attribute does not exist', async () => { const astFilter = esKuery.fromKueryExpression( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_1 or ${AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_2` + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_1 or ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.package_policies:test_id_2` ); const validationObject = validateFilterKueryNode({ astFilter, - types: [AGENT_POLICY_SAVED_OBJECT_TYPE], + types: [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], indexMapping: AGENT_POLICY_MAPPINGS, storeValue: true, }); @@ -523,8 +523,8 @@ describe('validateKuery validates real kueries', () => { describe('Agent policies', () => { it('Search by data_output_id', async () => { const validationObj = validateKuery( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); @@ -533,8 +533,8 @@ describe('validateKuery validates real kueries', () => { it('Search by data_output_id without SO wrapping', async () => { const validationObj = validateKuery( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id: test_id`, + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); @@ -543,8 +543,8 @@ describe('validateKuery validates real kueries', () => { it('Search by name', async () => { const validationObj = validateKuery( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.name: test_id`, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.name: test_id`, + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); @@ -553,8 +553,8 @@ describe('validateKuery validates real kueries', () => { it('Kuery with non existent parameter wrapped by SO', async () => { const validationObj = validateKuery( - `${AGENT_POLICY_SAVED_OBJECT_TYPE}.non_existent_parameter: 'test_id'`, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.non_existent_parameter: 'test_id'`, + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); @@ -567,7 +567,7 @@ describe('validateKuery validates real kueries', () => { it('Invalid search by non existent parameter', async () => { const validationObj = validateKuery( `non_existent_parameter: 'test_id'`, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index f6fcae4de6505c..d955b100315364 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -9,10 +9,15 @@ import type { SavedObjectsServiceSetup, SavedObjectsType } from '@kbn/core/serve import type { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; +import { + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '../../common/constants'; + import { OUTPUT_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_SAVED_OBJECT_TYPE, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, PACKAGES_SAVED_OBJECT_TYPE, ASSETS_SAVED_OBJECT_TYPE, GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, @@ -134,10 +139,7 @@ export const getSavedObjectTypes = ( }, mappings: { dynamic: false, - properties: { - // allowed_namespace_prefixes: { enabled: false }, - // managed_by: { type: 'keyword', index: false }, - }, + properties: {}, }, }, // Deprecated @@ -156,6 +158,8 @@ export const getSavedObjectTypes = ( prerelease_integrations_enabled: { type: 'boolean' }, secret_storage_requirements_met: { type: 'boolean' }, output_secret_storage_requirements_met: { type: 'boolean' }, + use_space_awareness_migration_status: { type: 'keyword', index: false }, + use_space_awareness_migration_started_at: { type: 'date', index: false }, }, }, migrations: { @@ -165,13 +169,24 @@ export const getSavedObjectTypes = ( }, modelVersions: { 1: settingsV1, + 2: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + use_space_awareness_migration_status: { type: 'keyword', index: false }, + use_space_awareness_migration_started_at: { type: 'date', index: false }, + }, + }, + ], + }, }, }, - [AGENT_POLICY_SAVED_OBJECT_TYPE]: { - name: AGENT_POLICY_SAVED_OBJECT_TYPE, + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]: { + name: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, hidden: false, - namespaceType: useSpaceAwareness ? 'single' : 'agnostic', + namespaceType: 'agnostic', management: { importableAndExportable: false, }, @@ -250,6 +265,50 @@ export const getSavedObjectTypes = ( }, }, }, + [AGENT_POLICY_SAVED_OBJECT_TYPE]: { + name: AGENT_POLICY_SAVED_OBJECT_TYPE, + indexPattern: INGEST_SAVED_OBJECT_INDEX, + hidden: false, + namespaceType: 'multiple', + management: { + importableAndExportable: false, + }, + mappings: { + properties: { + name: { type: 'keyword' }, + schema_version: { type: 'version' }, + description: { type: 'text' }, + namespace: { type: 'keyword' }, + is_managed: { type: 'boolean' }, + is_default: { type: 'boolean' }, + is_default_fleet_server: { type: 'boolean' }, + status: { type: 'keyword' }, + unenroll_timeout: { type: 'integer' }, + inactivity_timeout: { type: 'integer' }, + updated_at: { type: 'date' }, + updated_by: { type: 'keyword' }, + revision: { type: 'integer' }, + monitoring_enabled: { type: 'keyword', index: false }, + is_preconfigured: { type: 'keyword' }, + data_output_id: { type: 'keyword' }, + monitoring_output_id: { type: 'keyword' }, + download_source_id: { type: 'keyword' }, + fleet_server_host_id: { type: 'keyword' }, + agent_features: { + properties: { + name: { type: 'keyword' }, + enabled: { type: 'boolean' }, + }, + }, + is_protected: { type: 'boolean' }, + overrides: { type: 'flattened', index: false }, + keep_monitoring_alive: { type: 'boolean' }, + advanced_settings: { type: 'flattened', index: false }, + supports_agentless: { type: 'boolean' }, + global_data_tags: { type: 'flattened', index: false }, + }, + }, + }, [OUTPUT_SAVED_OBJECT_TYPE]: { name: OUTPUT_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, @@ -464,11 +523,11 @@ export const getSavedObjectTypes = ( '8.0.0': migrateOutputToV800, }, }, - [PACKAGE_POLICY_SAVED_OBJECT_TYPE]: { - name: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + [LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE]: { + name: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, hidden: false, - namespaceType: useSpaceAwareness ? 'single' : 'agnostic', + namespaceType: 'agnostic', management: { importableAndExportable: false, }, @@ -668,6 +727,51 @@ export const getSavedObjectTypes = ( '8.8.0': migratePackagePolicyToV880, }, }, + [PACKAGE_POLICY_SAVED_OBJECT_TYPE]: { + name: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + indexPattern: INGEST_SAVED_OBJECT_INDEX, + hidden: false, + namespaceType: 'multiple', + management: { + importableAndExportable: false, + }, + mappings: { + properties: { + name: { type: 'keyword' }, + description: { type: 'text' }, + namespace: { type: 'keyword' }, + enabled: { type: 'boolean' }, + is_managed: { type: 'boolean' }, + policy_id: { type: 'keyword' }, + policy_ids: { type: 'keyword' }, + output_id: { type: 'keyword' }, + package: { + properties: { + name: { type: 'keyword' }, + title: { type: 'keyword' }, + version: { type: 'keyword' }, + requires_root: { type: 'boolean' }, + }, + }, + elasticsearch: { + dynamic: false, + properties: {}, + }, + vars: { type: 'flattened' }, + inputs: { + dynamic: false, + properties: {}, + }, + secret_references: { properties: { id: { type: 'keyword' } } }, + overrides: { type: 'flattened', index: false }, + revision: { type: 'integer' }, + updated_at: { type: 'date' }, + updated_by: { type: 'keyword' }, + created_at: { type: 'date' }, + created_by: { type: 'keyword' }, + }, + }, + }, [PACKAGES_SAVED_OBJECT_TYPE]: { name: PACKAGES_SAVED_OBJECT_TYPE, indexPattern: INGEST_SAVED_OBJECT_INDEX, diff --git a/x-pack/plugins/fleet/server/services/agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policy.test.ts index 628be3ec2b2d57..0ff710b11fac85 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.test.ts @@ -11,6 +11,8 @@ import { loggerMock } from '@kbn/logging-mocks'; import type { Logger } from '@kbn/core/server'; import type { SavedObjectError } from '@kbn/core-saved-objects-common'; +import { LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../../common/constants'; + import { PackagePolicyRestrictionRelatedError, FleetUnauthorizedError, @@ -23,7 +25,10 @@ import type { NewAgentPolicy, PreconfiguredAgentPolicy, } from '../types'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../constants'; +import { + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + AGENT_POLICY_SAVED_OBJECT_TYPE, +} from '../constants'; import { AGENT_POLICY_INDEX, SO_SEARCH_LIMIT } from '../../common'; @@ -31,7 +36,7 @@ import { agentPolicyService } from './agent_policy'; import { agentPolicyUpdateEventHandler } from './agent_policy_update'; import { getAgentsByKuery } from './agents'; -import { packagePolicyService } from './package_policy'; +import { getPackagePolicySavedObjectType, packagePolicyService } from './package_policy'; import { appContextService } from './app_context'; import { outputService } from './output'; import { downloadSourceService } from './download_source'; @@ -40,11 +45,14 @@ import * as outputsHelpers from './agent_policies/outputs_helpers'; import { auditLoggingService } from './audit_logging'; import { licenseService } from './license'; import type { UninstallTokenServiceInterface } from './security/uninstall_token_service'; +import { isSpaceAwarenessEnabled } from './spaces/helpers'; + +jest.mock('./spaces/helpers'); function getSavedObjectMock(agentPolicyAttributes: any) { const mock = savedObjectsClientMock.create(); const mockPolicy = { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, references: [], attributes: agentPolicyAttributes as AgentPolicy, }; @@ -61,7 +69,7 @@ function getSavedObjectMock(agentPolicyAttributes: any) { }); mock.find.mockImplementation(async (options) => { switch (options.type) { - case AGENT_POLICY_SAVED_OBJECT_TYPE: + case LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE: return { saved_objects: [ { @@ -74,7 +82,7 @@ function getSavedObjectMock(agentPolicyAttributes: any) { page: 1, per_page: 1, }; - case PACKAGE_POLICY_SAVED_OBJECT_TYPE: + case LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE: return { saved_objects: [], total: 0, @@ -150,6 +158,10 @@ describe('Agent policy', () => { mockedLogger = loggerMock.create(); mockedAppContextService.getLogger.mockReturnValue(mockedLogger); mockedAppContextService.getExperimentalFeatures.mockReturnValue({ agentless: false } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); + jest + .mocked(getPackagePolicySavedObjectType) + .mockResolvedValue(LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE); }); afterEach(() => { @@ -204,7 +216,7 @@ describe('Agent policy', () => { soClient.create.mockResolvedValueOnce({ id: 'test-agent-policy', - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, attributes: {}, references: [], }); @@ -221,6 +233,48 @@ describe('Agent policy', () => { { id: 'test-agent-policy' } ); + expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ + action: 'create', + id: 'test-agent-policy', + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + }); + }); + + it('should write to the correct saved object-type if user opt-in for space awerness', async () => { + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + const soClient = savedObjectsClientMock.create(); + + soClient.find.mockResolvedValueOnce({ + total: 0, + saved_objects: [], + per_page: 0, + page: 1, + }); + + soClient.create.mockResolvedValueOnce({ + id: 'test-agent-policy', + type: AGENT_POLICY_SAVED_OBJECT_TYPE, + attributes: {}, + references: [], + }); + + mockOutputsHelpers.validateOutputForPolicy.mockResolvedValueOnce(undefined); + + await agentPolicyService.create( + soClient, + esClient, + { + name: 'test', + namespace: 'default', + }, + { id: 'test-agent-policy' } + ); + expect(soClient.create).toBeCalledWith( + AGENT_POLICY_SAVED_OBJECT_TYPE, + expect.anything(), + expect.anything() + ); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'create', id: 'test-agent-policy', @@ -443,7 +497,7 @@ describe('Agent policy', () => { id: 'test-agent-policy', attributes: {}, references: [], - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); await agentPolicyService.get(soClient, 'test-agent-policy', false); @@ -451,7 +505,7 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toBeCalledWith({ action: 'get', id: 'test-agent-policy', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -466,13 +520,13 @@ describe('Agent policy', () => { id: 'test-agent-policy-1', attributes: {}, references: [], - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }, { id: 'test-agent-policy-2', attributes: {}, references: [], - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }, ], }); @@ -482,13 +536,13 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(1, { action: 'get', id: 'test-agent-policy-1', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(2, { action: 'get', id: 'test-agent-policy-2', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -504,14 +558,14 @@ describe('Agent policy', () => { id: 'test-agent-policy-1', attributes: {}, references: [], - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, score: 0, }, { id: 'test-agent-policy-2', attributes: {}, references: [], - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, score: 0, }, ], @@ -528,13 +582,13 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(1, { action: 'find', id: 'test-agent-policy-1', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(2, { action: 'find', id: 'test-agent-policy-2', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -608,7 +662,7 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'delete', id: 'mocked', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); @@ -708,7 +762,7 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'delete', id: 'mocked', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); @@ -1055,7 +1109,7 @@ describe('Agent policy', () => { attributes: {}, references: [], id: 'test-agent-policy', - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); await agentPolicyService.update(soClient, esClient, 'test-agent-policy', { @@ -1067,7 +1121,7 @@ describe('Agent policy', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'update', id: 'test-agent-policy', - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }); }); @@ -1370,7 +1424,7 @@ describe('Agent policy', () => { attributes: {}, references: [], id: 'test-agent-policy', - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, }, ], }); @@ -1407,7 +1461,7 @@ describe('Agent policy', () => { soClient.create.mockResolvedValueOnce({ id: 'my-unique-id', - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, attributes: {}, references: [], }); @@ -1419,7 +1473,7 @@ describe('Agent policy', () => { ); expect(soClient.create).toHaveBeenCalledWith( - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, expect.anything(), expect.objectContaining({ id: 'my-unique-id' }) ); @@ -1429,7 +1483,7 @@ describe('Agent policy', () => { describe('getInactivityTimeouts', () => { const createPolicySO = (id: string, inactivityTimeout: number) => ({ id, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, attributes: { inactivity_timeout: inactivityTimeout }, references: [], score: 1, @@ -1493,7 +1547,7 @@ describe('Agent policy', () => { return { score: 1, id: 'so-123', - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, version: 'abc', updated_at: soAttributes.updated_at, attributes: soAttributes, @@ -1522,13 +1576,13 @@ describe('Agent policy', () => { }); it('should return an iterator', async () => { - expect(agentPolicyService.fetchAllAgentPolicyIds(soClientMock)).toEqual({ + expect(await agentPolicyService.fetchAllAgentPolicyIds(soClientMock)).toEqual({ [Symbol.asyncIterator]: expect.any(Function), }); }); it('should provide item ids on every iteration', async () => { - for await (const ids of agentPolicyService.fetchAllAgentPolicyIds(soClientMock)) { + for await (const ids of await agentPolicyService.fetchAllAgentPolicyIds(soClientMock)) { expect(ids).toEqual(['so-123', 'so-123']); } @@ -1536,13 +1590,13 @@ describe('Agent policy', () => { }); it('should use default options', async () => { - for await (const ids of agentPolicyService.fetchAllAgentPolicyIds(soClientMock)) { + for await (const ids of await agentPolicyService.fetchAllAgentPolicyIds(soClientMock)) { expect(ids); } expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, perPage: 1000, sortField: 'created_at', sortOrder: 'asc', @@ -1553,7 +1607,7 @@ describe('Agent policy', () => { }); it('should use custom options when defined', async () => { - for await (const ids of agentPolicyService.fetchAllAgentPolicyIds(soClientMock, { + for await (const ids of await agentPolicyService.fetchAllAgentPolicyIds(soClientMock, { perPage: 13, kuery: 'one=two', })) { @@ -1562,7 +1616,7 @@ describe('Agent policy', () => { expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, perPage: 13, sortField: 'created_at', sortOrder: 'asc', @@ -1586,13 +1640,13 @@ describe('Agent policy', () => { }); it('should return an iterator', async () => { - expect(agentPolicyService.fetchAllAgentPolicies(soClientMock)).toEqual({ + expect(await agentPolicyService.fetchAllAgentPolicies(soClientMock)).toEqual({ [Symbol.asyncIterator]: expect.any(Function), }); }); it('should provide items on every iteration', async () => { - for await (const items of agentPolicyService.fetchAllAgentPolicies(soClientMock)) { + for await (const items of await agentPolicyService.fetchAllAgentPolicies(soClientMock)) { expect(items.map((item) => item.id)).toEqual(soList.map((_so) => 'so-123')); } @@ -1600,7 +1654,25 @@ describe('Agent policy', () => { }); it('should use default options', async () => { - for await (const ids of agentPolicyService.fetchAllAgentPolicies(soClientMock)) { + for await (const ids of await agentPolicyService.fetchAllAgentPolicies(soClientMock)) { + expect(ids); + } + + expect(soClientMock.find).toHaveBeenCalledWith( + expect.objectContaining({ + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + perPage: 1000, + sortField: 'created_at', + sortOrder: 'asc', + fields: [], + filter: undefined, + }) + ); + }); + + it('should use new saved object if user opt-in for space awareness', async () => { + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); + for await (const ids of await agentPolicyService.fetchAllAgentPolicies(soClientMock)) { expect(ids); } @@ -1617,7 +1689,7 @@ describe('Agent policy', () => { }); it('should use custom options when defined', async () => { - for await (const ids of agentPolicyService.fetchAllAgentPolicies(soClientMock, { + for await (const ids of await agentPolicyService.fetchAllAgentPolicies(soClientMock, { kuery: 'one=two', perPage: 12, sortOrder: 'desc', @@ -1628,7 +1700,7 @@ describe('Agent policy', () => { expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, perPage: 12, sortField: 'updated_by', sortOrder: 'desc', @@ -1642,7 +1714,7 @@ describe('Agent policy', () => { describe('turnOffAgentTamperProtections', () => { const createPolicySO = (id: string, isProtected: boolean, error?: SavedObjectError) => ({ id, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, attributes: { is_protected: isProtected, }, @@ -1664,9 +1736,11 @@ describe('Agent policy', () => { }); const getMockAgentPolicyFetchAllAgentPolicies = (items: AgentPolicy[]) => - jest.fn(async function* () { - yield items; - }); + jest.fn().mockResolvedValue( + jest.fn(async function* () { + yield items; + })() + ); it('should return if all policies are compliant', async () => { const mockSoClient = savedObjectsClientMock.create(); diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index a7176083a718f7..aceb494687f527 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -41,8 +41,7 @@ import { import type { HTTPAuthorizationHeader } from '../../common/http_authorization_header'; import { - PACKAGE_POLICY_SAVED_OBJECT_TYPE, - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENTS_PREFIX, FLEET_AGENT_POLICIES_SCHEMA_VERSION, PRECONFIGURATION_DELETION_RECORD_SAVED_OBJECT_TYPE, @@ -67,6 +66,7 @@ import { agentPolicyStatuses, FLEET_ELASTIC_AGENT_PACKAGE, UUID_V5_NAMESPACE, + AGENT_POLICY_SAVED_OBJECT_TYPE, } from '../../common/constants'; import type { DeleteAgentPolicyResponse, @@ -100,22 +100,47 @@ import { import { bulkInstallPackages } from './epm/packages'; import { getAgentsByKuery } from './agents'; -import { packagePolicyService } from './package_policy'; +import { getPackagePolicySavedObjectType, packagePolicyService } from './package_policy'; import { incrementPackagePolicyCopyName } from './package_policies'; import { outputService } from './output'; import { agentPolicyUpdateEventHandler } from './agent_policy_update'; -import { escapeSearchQueryPhrase, normalizeKuery } from './saved_object'; +import { escapeSearchQueryPhrase, normalizeKuery as _normalizeKuery } from './saved_object'; import { getFullAgentPolicy, validateOutputForPolicy } from './agent_policies'; import { auditLoggingService } from './audit_logging'; import { licenseService } from './license'; import { createSoFindIterable } from './utils/create_so_find_iterable'; import { isAgentlessEnabled } from './utils/agentless'; import { validatePolicyNamespaceForSpace } from './spaces/policy_namespaces'; - -const SAVED_OBJECT_TYPE = AGENT_POLICY_SAVED_OBJECT_TYPE; +import { isSpaceAwarenessEnabled } from './spaces/helpers'; const KEY_EDITABLE_FOR_MANAGED_POLICIES = ['namespace']; +function normalizeKuery(savedObjectType: string, kuery: string) { + if (savedObjectType === LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE) { + return _normalizeKuery( + savedObjectType, + kuery.replace( + new RegExp(`${AGENT_POLICY_SAVED_OBJECT_TYPE}\\.`, 'g'), + `${savedObjectType}.attributes.` + ) + ); + } else { + return _normalizeKuery( + savedObjectType, + kuery.replace( + new RegExp(`${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}\\.`, 'g'), + `${savedObjectType}.attributes.` + ) + ); + } +} + +export async function getAgentPolicySavedObjectType() { + return (await isSpaceAwarenessEnabled()) + ? AGENT_POLICY_SAVED_OBJECT_TYPE + : LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE; +} + class AgentPolicyService { private triggerAgentPolicyUpdatedEvent = async ( esClient: ElasticsearchClient, @@ -144,10 +169,11 @@ class AgentPolicyService { returnUpdatedPolicy: true, } ): Promise { + const savedObjectType = await getAgentPolicySavedObjectType(); auditLoggingService.writeCustomSoAuditLog({ action: 'update', id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); const logger = appContextService.getLogger(); logger.debug(`Starting update of agent policy ${id}`); @@ -179,8 +205,7 @@ class AgentPolicyService { getAllowedOutputTypeForPolicy(existingAgentPolicy) ); } - - await soClient.update(SAVED_OBJECT_TYPE, id, { + await soClient.update(savedObjectType, id, { ...agentPolicy, ...(options.bumpRevision ? { revision: existingAgentPolicy.revision + 1 } : {}), ...(options.removeProtection @@ -323,6 +348,7 @@ class AgentPolicyService { skipDeploy?: boolean; } = {} ): Promise { + const savedObjectType = await getAgentPolicySavedObjectType(); // Ensure an ID is provided, so we can include it in the audit logs below if (!options.id) { options.id = SavedObjectsUtils.generateId(); @@ -331,7 +357,7 @@ class AgentPolicyService { auditLoggingService.writeCustomSoAuditLog({ action: 'create', id: options.id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); await this.runExternalCallbacks('agentPolicyCreate', agentPolicy); this.checkTamperProtectionLicense(agentPolicy); @@ -355,7 +381,7 @@ class AgentPolicyService { await validateOutputForPolicy(soClient, agentPolicy); const newSo = await soClient.create( - SAVED_OBJECT_TYPE, + savedObjectType, { ...agentPolicy, status: 'active', @@ -385,8 +411,10 @@ class AgentPolicyService { soClient: SavedObjectsClientContract, givenPolicy: { id?: string; name: string } ) { + const savedObjectType = await getAgentPolicySavedObjectType(); + const results = await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, searchFields: ['name'], search: escapeSearchQueryPhrase(givenPolicy.name), }); @@ -409,7 +437,9 @@ class AgentPolicyService { id: string, withPackagePolicies: boolean = true ): Promise { - const agentPolicySO = await soClient.get(SAVED_OBJECT_TYPE, id); + const savedObjectType = await getAgentPolicySavedObjectType(); + + const agentPolicySO = await soClient.get(savedObjectType, id); if (!agentPolicySO) { return null; } @@ -428,7 +458,7 @@ class AgentPolicyService { auditLoggingService.writeCustomSoAuditLog({ action: 'get', id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); return agentPolicy; @@ -439,15 +469,17 @@ class AgentPolicyService { ids: Array, options: { fields?: string[]; withPackagePolicies?: boolean; ignoreMissing?: boolean } = {} ): Promise { + const savedObjectType = await getAgentPolicySavedObjectType(); + const objects = ids.map((id) => { if (typeof id === 'string') { - return { ...options, id, type: SAVED_OBJECT_TYPE }; + return { ...options, id, type: savedObjectType }; } return { ...options, id: id.id, namespaces: id.spaceId ? [id.spaceId] : undefined, - type: SAVED_OBJECT_TYPE, + type: savedObjectType, }; }); const bulkGetResponse = await soClient.bulkGet(objects); @@ -488,7 +520,7 @@ class AgentPolicyService { auditLoggingService.writeCustomSoAuditLog({ action: 'get', id: agentPolicy.id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -509,6 +541,8 @@ class AgentPolicyService { page: number; perPage: number; }> { + const savedObjectType = await getAgentPolicySavedObjectType(); + const { page = 1, perPage = 20, @@ -520,14 +554,14 @@ class AgentPolicyService { } = options; const baseFindParams = { - type: SAVED_OBJECT_TYPE, + type: savedObjectType, sortField, sortOrder, page, perPage, ...(fields ? { fields } : {}), }; - const filter = kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined; + const filter = kuery ? normalizeKuery(savedObjectType, kuery) : undefined; let agentPoliciesSO; try { agentPoliciesSO = await soClient.find({ @@ -580,7 +614,7 @@ class AgentPolicyService { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: agentPolicy.id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -807,9 +841,10 @@ class AgentPolicyService { esClient: ElasticsearchClient, outputId: string ) { + const savedObjectType = await getAgentPolicySavedObjectType(); const agentPolicies = ( await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'data_output_id', 'monitoring_output_id'], searchFields: ['data_output_id', 'monitoring_output_id'], search: escapeSearchQueryPhrase(outputId), @@ -865,9 +900,10 @@ class AgentPolicyService { esClient: ElasticsearchClient, fleetServerHostId: string ) { + const savedObjectType = await getAgentPolicySavedObjectType(); const agentPolicies = ( await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'fleet_server_host_id'], searchFields: ['fleet_server_host_id'], search: escapeSearchQueryPhrase(fleetServerHostId), @@ -958,10 +994,11 @@ class AgentPolicyService { const internalSoClientWithoutSpaceExtension = appContextService.getInternalUserSOClientWithoutSpaceExtension(); + const savedObjectType = await getAgentPolicySavedObjectType(); // All agent policies directly using output const agentPoliciesUsingOutput = await internalSoClientWithoutSpaceExtension.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'data_output_id', 'monitoring_output_id', 'namespaces'], searchFields: ['data_output_id', 'monitoring_output_id'], search: escapeSearchQueryPhrase(outputId), @@ -972,7 +1009,7 @@ class AgentPolicyService { // All package policies directly using output const packagePoliciesUsingOutput = await internalSoClientWithoutSpaceExtension.find({ - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: await getPackagePolicySavedObjectType(), fields: ['output_id', 'namespaces', 'policy_ids'], searchFields: ['output_id'], search: escapeSearchQueryPhrase(outputId), @@ -995,7 +1032,7 @@ class AgentPolicyService { const agentPoliciesOfPackagePoliciesUsingOutput = await internalSoClientWithoutSpaceExtension.bulkGet( [...agentPolicyIdsOfPackagePoliciesUsingOutput].map((id) => ({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, id, fields: ['revision', 'data_output_id', 'monitoring_output_id', 'namespaces'], ...(useSpaceAwareness ? { namespaces: ['*'] } : {}), @@ -1019,10 +1056,10 @@ class AgentPolicyService { ): Promise> { const internalSoClientWithoutSpaceExtension = appContextService.getInternalUserSOClientWithoutSpaceExtension(); - + const savedObjectType = await getAgentPolicySavedObjectType(); const currentPolicies = await internalSoClientWithoutSpaceExtension.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['name', 'revision', 'namespaces'], perPage: SO_SEARCH_LIMIT, namespaces: ['*'], @@ -1044,11 +1081,11 @@ class AgentPolicyService { ): Promise { const logger = appContextService.getLogger(); logger.debug(`Deleting agent policy ${id}`); - + const savedObjectType = await getAgentPolicySavedObjectType(); auditLoggingService.writeCustomSoAuditLog({ action: 'delete', id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); const agentPolicy = await this.get(soClient, id, false); @@ -1131,7 +1168,7 @@ class AgentPolicyService { }); } - await soClient.delete(SAVED_OBJECT_TYPE, id); + await soClient.delete(savedObjectType, id); await this.triggerAgentPolicyUpdatedEvent(esClient, 'deleted', id, { spaceId: soClient.getCurrentNamespace(), }); @@ -1400,9 +1437,10 @@ class AgentPolicyService { esClient: ElasticsearchClient, downloadSourceId: string ) { + const savedObjectType = await getAgentPolicySavedObjectType(); const agentPolicies = ( await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'download_source_id'], searchFields: ['download_source_id'], search: escapeSearchQueryPhrase(downloadSourceId), @@ -1437,9 +1475,10 @@ class AgentPolicyService { ): Promise> { const internalSoClientWithoutSpaceExtension = appContextService.getInternalUserSOClientWithoutSpaceExtension(); + const savedObjectType = await getAgentPolicySavedObjectType(); const currentPolicies = await internalSoClientWithoutSpaceExtension.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'download_source_id', 'namespaces'], searchFields: ['download_source_id'], search: escapeSearchQueryPhrase(downloadSourceId), @@ -1462,9 +1501,10 @@ class AgentPolicyService { ): Promise> { const internalSoClientWithoutSpaceExtension = appContextService.getInternalUserSOClientWithoutSpaceExtension(); + const savedObjectType = await getAgentPolicySavedObjectType(); const currentPolicies = await internalSoClientWithoutSpaceExtension.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['revision', 'fleet_server_host_id', 'namespaces'], searchFields: ['fleet_server_host_id'], search: escapeSearchQueryPhrase(fleetServerHostId), @@ -1482,11 +1522,12 @@ class AgentPolicyService { public async getInactivityTimeouts( soClient: SavedObjectsClientContract ): Promise> { + const savedObjectType = await getAgentPolicySavedObjectType(); const findRes = await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, page: 1, perPage: SO_SEARCH_LIMIT, - filter: `${SAVED_OBJECT_TYPE}.attributes.inactivity_timeout > 0`, + filter: `${savedObjectType}.attributes.inactivity_timeout > 0`, fields: [`inactivity_timeout`], }); @@ -1502,8 +1543,9 @@ class AgentPolicyService { updatedPolicies: Array> | null; failedPolicies: Array<{ id: string; error: Error | SavedObjectError }>; }> { - const agentPolicyFetcher = this.fetchAllAgentPolicies(soClient, { - kuery: 'ingest-agent-policies.is_protected: true', + const savedObjectType = await getAgentPolicySavedObjectType(); + const agentPolicyFetcher = await this.fetchAllAgentPolicies(soClient, { + kuery: `${savedObjectType}.is_protected: true`, }); const updatedAgentPolicies: Array> = []; @@ -1515,7 +1557,7 @@ class AgentPolicyService { const { id, revision } = agentPolicy; return { id, - type: SAVED_OBJECT_TYPE, + type: savedObjectType, attributes: { is_protected: false, revision: revision + 1, @@ -1562,36 +1604,38 @@ class AgentPolicyService { } public async getAllManagedAgentPolicies(soClient: SavedObjectsClientContract) { + const savedObjectType = await getAgentPolicySavedObjectType(); const { saved_objects: agentPolicies } = await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, page: 1, perPage: SO_SEARCH_LIMIT, - filter: normalizeKuery(SAVED_OBJECT_TYPE, 'ingest-agent-policies.is_managed: true'), + filter: normalizeKuery(savedObjectType, 'ingest-agent-policies.is_managed: true'), }); return agentPolicies; } - public fetchAllAgentPolicyIds( + public async fetchAllAgentPolicyIds( soClient: SavedObjectsClientContract, { perPage = 1000, kuery = undefined }: FetchAllAgentPolicyIdsOptions = {} - ): AsyncIterable { + ): Promise> { + const savedObjectType = await getAgentPolicySavedObjectType(); return createSoFindIterable<{}>({ soClient, findRequest: { - type: SAVED_OBJECT_TYPE, + type: savedObjectType, perPage, sortField: 'created_at', sortOrder: 'asc', fields: ['id'], - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, }, resultsMapper: (data) => { return data.saved_objects.map((agentPolicySO) => { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: agentPolicySO.id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); return agentPolicySO.id; }); @@ -1599,7 +1643,7 @@ class AgentPolicyService { }); } - public fetchAllAgentPolicies( + public async fetchAllAgentPolicies( soClient: SavedObjectsClientContract, { perPage = 1000, @@ -1608,23 +1652,24 @@ class AgentPolicyService { sortField = 'created_at', fields = [], }: FetchAllAgentPoliciesOptions = {} - ): AsyncIterable { + ): Promise> { + const savedObjectType = await getAgentPolicySavedObjectType(); return createSoFindIterable({ soClient, findRequest: { - type: SAVED_OBJECT_TYPE, + type: savedObjectType, sortField, sortOrder, perPage, fields, - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, }, resultsMapper(data) { return data.saved_objects.map((agentPolicySO) => { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: agentPolicySO.id, - savedObjectType: AGENT_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); return mapAgentPolicySavedObjectToAgentPolicy(agentPolicySO); }); diff --git a/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts b/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts index 0c848703fa7a31..e2aab90b2b34a9 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy_watch.test.ts @@ -21,7 +21,7 @@ import type { SavedObjectError } from '@kbn/core-saved-objects-common'; import type { SavedObjectsServiceStart } from '@kbn/core-saved-objects-server'; import type { AgentPolicy } from '../../common'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../common'; import { LicenseService } from '../../common/services'; @@ -52,7 +52,7 @@ describe('Agent Policy-Changing license watcher', () => { const createPolicySO = (id: string, isProtected: boolean, error?: SavedObjectError) => ({ id, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, attributes: { is_protected: isProtected, }, @@ -101,12 +101,14 @@ describe('Agent Policy-Changing license watcher', () => { it('should bulk update policies that are not compliant', async () => { const getMockAgentPolicyFetchAllAgentPolicies = (items: AgentPolicy[]) => - jest.fn(async function* (soClient: SavedObjectsClientContract) { - const chunkSize = 1000; // Emulate paginated response - for (let i = 0; i < items.length; i += chunkSize) { - yield items.slice(i, i + chunkSize); - } - }); + jest.fn().mockResolvedValue( + jest.fn(async function* () { + const chunkSize = 1000; // Emulate paginated response + for (let i = 0; i < items.length; i += chunkSize) { + yield items.slice(i, i + chunkSize); + } + })() + ); const policiesToUpdate = Array.from({ length: 2001 }, (_, i) => createAgentPolicyMock({ id: `policy${i}`, is_protected: true }) @@ -159,9 +161,11 @@ describe('Agent Policy-Changing license watcher', () => { it('should return failed policies if bulk update fails', async () => { const getMockAgentPolicyFetchAllAgentPolicies = (items: AgentPolicy[]) => - jest.fn(async function* (soClient: SavedObjectsClientContract) { - yield items; - }); + jest.fn().mockResolvedValue( + jest.fn(async function* () { + yield items; + })() + ); agentPolicySvcMock.fetchAllAgentPolicies = getMockAgentPolicyFetchAllAgentPolicies([ createAgentPolicyMock({ is_protected: true }), diff --git a/x-pack/plugins/fleet/server/services/agent_policy_watch.ts b/x-pack/plugins/fleet/server/services/agent_policy_watch.ts index 37df623f4f8bb2..bb8304bd41fa9d 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy_watch.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy_watch.ts @@ -23,13 +23,12 @@ import type { AgentPolicySOAttributes } from '../types'; import type { LicenseService } from '../../common/services/license'; import type { AgentPolicy } from '../../common'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../common'; import { isAgentPolicyValidForLicense, unsetAgentPolicyAccordingToLicenseLevel, } from '../../common/services/agent_policy_config'; -import { agentPolicyService } from './agent_policy'; +import { agentPolicyService, getAgentPolicySavedObjectType } from './agent_policy'; export class PolicyWatcher { private logger: Logger; @@ -72,7 +71,7 @@ export class PolicyWatcher { public async watch(license: ILicense) { const log = this.logger.get('endpoint', 'agentPolicyLicenseWatch'); - const agentPolicyFetcher = agentPolicyService.fetchAllAgentPolicies( + const agentPolicyFetcher = await agentPolicyService.fetchAllAgentPolicies( this.makeInternalSOClient(this.soStart), { fields: ['is_protected', 'id', 'revision'] } // Don't forget to extend this to include all fields that are used in the `isAgentPolicyValidForLicense` function ); @@ -92,6 +91,7 @@ export class PolicyWatcher { if (policiesToUpdate.length === 0) { break; } + const savedObjectType = await getAgentPolicySavedObjectType(); const { saved_objects: bulkUpdateSavedObjects } = await this.makeInternalSOClient( this.soStart @@ -99,7 +99,7 @@ export class PolicyWatcher { policiesToUpdate.map((policy) => { const { id, revision, ...policyContent } = policy; return { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: savedObjectType, id, attributes: { ...policyContent, diff --git a/x-pack/plugins/fleet/server/services/agents/action_status.ts b/x-pack/plugins/fleet/server/services/agents/action_status.ts index 5c93c5eaa3c2f0..d078620c30321b 100644 --- a/x-pack/plugins/fleet/server/services/agents/action_status.ts +++ b/x-pack/plugins/fleet/server/services/agents/action_status.ts @@ -239,7 +239,7 @@ async function getActions( ignore_unavailable: true, from: 0, size: getPerPage(options), - query: addNamespaceFilteringToQuery(query, namespace), + query: await addNamespaceFilteringToQuery(query, namespace), body: { sort: [{ '@timestamp': 'desc' }], }, @@ -390,7 +390,7 @@ async function getPolicyChangeActions( index: AGENT_POLICY_INDEX, ignore_unavailable: true, size: getPerPage(options), - query: addNamespaceFilteringToQuery(query, namespace), + query: await addNamespaceFilteringToQuery(query, namespace), sort: [ { '@timestamp': { diff --git a/x-pack/plugins/fleet/server/services/agents/crud.test.ts b/x-pack/plugins/fleet/server/services/agents/crud.test.ts index d51b0d52d4d7cf..ac5f1a282d8da4 100644 --- a/x-pack/plugins/fleet/server/services/agents/crud.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/crud.test.ts @@ -38,6 +38,7 @@ jest.mock('./versions', () => { getLatestAvailableAgentVersion: jest.fn().mockResolvedValue('8.8.0'), }; }); +jest.mock('../spaces/helpers'); const mockedAuditLoggingService = auditLoggingService as jest.Mocked; diff --git a/x-pack/plugins/fleet/server/services/agents/crud.ts b/x-pack/plugins/fleet/server/services/agents/crud.ts index 64c20cbbc4d6bf..7fdf76c76992b0 100644 --- a/x-pack/plugins/fleet/server/services/agents/crud.ts +++ b/x-pack/plugins/fleet/server/services/agents/crud.ts @@ -29,6 +29,7 @@ import { import { auditLoggingService } from '../audit_logging'; import { isAgentInNamespace } from '../spaces/agent_namespaces'; import { getCurrentNamespace } from '../spaces/get_current_namespace'; +import { isSpaceAwarenessEnabled } from '../spaces/helpers'; import { searchHitToAgent, agentSOAttributesToFleetServerAgentDoc } from './helpers'; import { buildAgentStatusRuntimeField } from './build_status_runtime_field'; @@ -228,7 +229,7 @@ export async function getAgentsByKuery( } = options; const filters = []; - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (useSpaceAwareness && spaceId) { if (spaceId === DEFAULT_SPACE_ID) { filters.push(`namespaces:"${DEFAULT_SPACE_ID}" or not namespaces:*`); @@ -406,7 +407,7 @@ export async function getAgentById( throw new AgentNotFoundError(`Agent ${agentId} not found`); } - if (!isAgentInNamespace(agentHit, getCurrentNamespace(soClient))) { + if ((await isAgentInNamespace(agentHit, getCurrentNamespace(soClient))) !== true) { throw new AgentNotFoundError(`${agentHit.id} not found in namespace`); } diff --git a/x-pack/plugins/fleet/server/services/agents/status.ts b/x-pack/plugins/fleet/server/services/agents/status.ts index 1940a816dd2d7f..99d2d25b139c84 100644 --- a/x-pack/plugins/fleet/server/services/agents/status.ts +++ b/x-pack/plugins/fleet/server/services/agents/status.ts @@ -16,13 +16,11 @@ import type { } from '@elastic/elasticsearch/lib/api/types'; import { agentStatusesToSummary } from '../../../common/services'; - import { AGENTS_INDEX } from '../../constants'; import type { AgentStatus } from '../../types'; import { FleetError, FleetUnauthorizedError } from '../../errors'; - import { appContextService } from '../app_context'; - +import { isSpaceAwarenessEnabled } from '../spaces/helpers'; import { retryTransientEsErrors } from '../epm/elasticsearch/retry'; import { getAgentById, removeSOAttributes } from './crud'; @@ -54,7 +52,7 @@ export async function getAgentStatusForAgentPolicy( const clauses: QueryDslQueryContainer[] = []; - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (useSpaceAwareness && spaceId) { if (spaceId === DEFAULT_SPACE_ID) { clauses.push( diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts index 35163288e97dc4..efeb5649cd5763 100644 --- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.test.ts @@ -8,8 +8,7 @@ import type { SavedObjectsClientContract } from '@kbn/core/server'; import type { ElasticsearchClientMock } from '@kbn/core/server/mocks'; import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { appContextService } from '../app_context'; - +import { isSpaceAwarenessEnabled } from '../spaces/helpers'; import type { Agent } from '../../types'; import { createClientMock } from './action.mock'; @@ -17,6 +16,7 @@ import { MAX_RETRY_COUNT } from './retry_helper'; import { updateAgentTags } from './update_agent_tags'; import { UpdateAgentTagsActionRunner, updateTagsBatch } from './update_agent_tags_action_runner'; +jest.mock('../spaces/helpers'); jest.mock('../app_context', () => { const { loggerMock } = jest.requireActual('@kbn/logging-mocks'); return { @@ -418,11 +418,9 @@ describe('update_agent_tags', () => { ); }); - describe('with the useSpaceAwareness feature flag enabled', () => { + describe('with isSpaceAwarenessEnabled return true', () => { beforeEach(() => { - jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ - useSpaceAwareness: true, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); }); it('should not update tags for agents in another space', async () => { diff --git a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.ts b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.ts index f3443458249b72..7d37581cef997c 100644 --- a/x-pack/plugins/fleet/server/services/agents/update_agent_tags.ts +++ b/x-pack/plugins/fleet/server/services/agents/update_agent_tags.ts @@ -38,7 +38,7 @@ export async function updateAgentTags( outgoingErrors[maybeAgent.id] = new AgentReassignmentError( `Cannot find agent ${maybeAgent.id}` ); - } else if (!isAgentInNamespace(maybeAgent, currentNameSpace)) { + } else if ((await isAgentInNamespace(maybeAgent, currentNameSpace)) !== true) { outgoingErrors[maybeAgent.id] = new AgentReassignmentError( `Agent ${maybeAgent.id} is not in the current space` ); @@ -49,7 +49,7 @@ export async function updateAgentTags( } else if ('kuery' in options) { const batchSize = options.batchSize ?? SO_SEARCH_LIMIT; - const namespaceFilter = agentsKueryNamespaceFilter(currentNameSpace); + const namespaceFilter = await agentsKueryNamespaceFilter(currentNameSpace); const filters = namespaceFilter ? [namespaceFilter] : []; if (options.kuery !== '') { filters.push(options.kuery); diff --git a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts index 6d37dd44a7f5ef..7ad62121950d3b 100644 --- a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts +++ b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.test.ts @@ -26,6 +26,7 @@ import { jest.mock('../audit_logging'); jest.mock('../agent_policy'); jest.mock('../app_context'); +jest.mock('../spaces/helpers'); jest.mock('uuid', () => { return { diff --git a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts index e89917143732f2..d6b94875b6ed19 100644 --- a/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts +++ b/x-pack/plugins/fleet/server/services/api_keys/enrollment_api_key.ts @@ -23,6 +23,7 @@ import { escapeSearchQueryPhrase } from '../saved_object'; import { auditLoggingService } from '../audit_logging'; import { _joinFilters } from '../agents'; import { appContextService } from '../app_context'; +import { isSpaceAwarenessEnabled } from '../spaces/helpers'; import { invalidateAPIKeys } from './security'; @@ -54,7 +55,7 @@ export async function listEnrollmentApiKeys( filters.push(kuery); } - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (useSpaceAwareness && spaceId) { if (spaceId === DEFAULT_SPACE_ID) { // TODO use constant diff --git a/x-pack/plugins/fleet/server/services/app_context.ts b/x-pack/plugins/fleet/server/services/app_context.ts index 970291bf7d552d..f2965025d45d19 100644 --- a/x-pack/plugins/fleet/server/services/app_context.ts +++ b/x-pack/plugins/fleet/server/services/app_context.ts @@ -35,7 +35,10 @@ import type { SavedObjectTaggingStart } from '@kbn/saved-objects-tagging-plugin/ import { SECURITY_EXTENSION_ID, SPACES_EXTENSION_ID } from '@kbn/core-saved-objects-server'; import type { FleetConfigType } from '../../common/types'; -import type { ExperimentalFeatures } from '../../common/experimental_features'; +import { + allowedExperimentalValues, + type ExperimentalFeatures, +} from '../../common/experimental_features'; import type { ExternalCallback, ExternalCallbacksStorage, @@ -61,7 +64,7 @@ class AppContextService { private encryptedSavedObjectsStart: EncryptedSavedObjectsPluginStart | undefined; private data: DataPluginStart | undefined; private esClient: ElasticsearchClient | undefined; - private experimentalFeatures?: ExperimentalFeatures; + private experimentalFeatures: ExperimentalFeatures = allowedExperimentalValues; private securityCoreStart: SecurityServiceStart | undefined; private securitySetup: SecurityPluginSetup | undefined; private securityStart: SecurityPluginStart | undefined; @@ -168,9 +171,6 @@ class AppContextService { } public getExperimentalFeatures() { - if (!this.experimentalFeatures) { - throw new Error('experimentalFeatures not set.'); - } return this.experimentalFeatures; } diff --git a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts index 97b0eeb823e022..c8c7a8d9e3d037 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/_install_package.ts @@ -20,7 +20,7 @@ import { getNormalizedDataStreams } from '../../../../common/services'; import { MAX_TIME_COMPLETE_INSTALL, ASSETS_SAVED_OBJECT_TYPE, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, } from '../../../../common/constants'; import { PACKAGES_SAVED_OBJECT_TYPE, FLEET_INSTALL_FORMAT_VERSION } from '../../../constants'; @@ -361,7 +361,7 @@ export async function _installPackage({ const policyIdsToUpgrade = await packagePolicyService.listIds(savedObjectsClient, { page: 1, perPage: SO_SEARCH_LIMIT, - kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${pkgName}`, + kuery: `${LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${pkgName}`, }); logger.debug( `Package install - Package is flagged with keep_policies_up_to_date, upgrading its associated package policies ${policyIdsToUpgrade}` diff --git a/x-pack/plugins/fleet/server/services/epm/packages/get.ts b/x-pack/plugins/fleet/server/services/epm/packages/get.ts index ce0bbeb4f6d2c8..b3f0d28438d547 100644 --- a/x-pack/plugins/fleet/server/services/epm/packages/get.ts +++ b/x-pack/plugins/fleet/server/services/epm/packages/get.ts @@ -22,7 +22,6 @@ import { buildNode as buildWildcardNode } from '@kbn/es-query/src/kuery/node_typ import { ASSETS_SAVED_OBJECT_TYPE, installationStatuses, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, } from '../../../../common/constants'; import { isPackageLimited } from '../../../../common/services'; @@ -55,7 +54,7 @@ import * as Registry from '../registry'; import type { PackageAsset } from '../archive/storage'; import { getEsPackage } from '../archive/storage'; import { normalizeKuery } from '../../saved_object'; - +import { getPackagePolicySavedObjectType } from '../../package_policy'; import { auditLoggingService } from '../../audit_logging'; import { getFilteredSearchPackages } from '../filtered_packages'; @@ -479,9 +478,11 @@ export const getPackageUsageStats = async ({ savedObjectsClient: SavedObjectsClientContract; pkgName: string; }): Promise => { + const packagePolicySavedObjectType = await getPackagePolicySavedObjectType(); + const filter = normalizeKuery( - PACKAGE_POLICY_SAVED_OBJECT_TYPE, - `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name: ${pkgName}` + packagePolicySavedObjectType, + `${packagePolicySavedObjectType}.package.name: ${pkgName}` ); const agentPolicyCount = new Set(); let page = 1; @@ -491,7 +492,7 @@ export const getPackageUsageStats = async ({ // using saved Objects client directly, instead of the `list()` method of `package_policy` service // in order to not cause a circular dependency (package policy service imports from this module) const packagePolicies = await savedObjectsClient.find({ - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: packagePolicySavedObjectType, perPage: 1000, page: page++, filter, @@ -501,7 +502,7 @@ export const getPackageUsageStats = async ({ auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: packagePolicySavedObjectType, }); } diff --git a/x-pack/plugins/fleet/server/services/fleet_server/index.ts b/x-pack/plugins/fleet/server/services/fleet_server/index.ts index 7a5c4a48695d6b..8248797e7963a1 100644 --- a/x-pack/plugins/fleet/server/services/fleet_server/index.ts +++ b/x-pack/plugins/fleet/server/services/fleet_server/index.ts @@ -12,7 +12,10 @@ import semverCoerce from 'semver/functions/coerce'; import { uniqBy } from 'lodash'; import type { AgentPolicy } from '../../../common/types'; -import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, FLEET_SERVER_PACKAGE } from '../../../common/constants'; +import { + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + FLEET_SERVER_PACKAGE, +} from '../../../common/constants'; import { SO_SEARCH_LIMIT } from '../../constants'; import { getAgentsByKuery, getAgentStatusById } from '../agents'; import { packagePolicyService } from '../package_policy'; @@ -27,7 +30,7 @@ export const getFleetServerPolicies = async ( soClient: SavedObjectsClientContract ): Promise => { const fleetServerPackagePolicies = await packagePolicyService.list(soClient, { - kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${FLEET_SERVER_PACKAGE}`, + kuery: `${LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${FLEET_SERVER_PACKAGE}`, spaceId: '*', }); diff --git a/x-pack/plugins/fleet/server/services/output.ts b/x-pack/plugins/fleet/server/services/output.ts index 2748ad78e765b9..57a641ed44d6fe 100644 --- a/x-pack/plugins/fleet/server/services/output.ts +++ b/x-pack/plugins/fleet/server/services/output.ts @@ -37,7 +37,7 @@ import type { PolicySecretReference, } from '../types'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, DEFAULT_OUTPUT, DEFAULT_OUTPUT_ID, @@ -133,13 +133,13 @@ async function getAgentPoliciesPerOutput(outputId?: string, isDefault?: boolean) const packagePoliciesKuery: string = `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.output_id:"${outputId}"`; if (outputId) { if (isDefault) { - agentPoliciesKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}" or not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; + agentPoliciesKuery = `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}" or not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; } else { - agentPoliciesKuery = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}"`; + agentPoliciesKuery = `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:"${outputId}"`; } } else { if (isDefault) { - agentPoliciesKuery = `not ${AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; + agentPoliciesKuery = `not ${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.data_output_id:*`; } else { return; } diff --git a/x-pack/plugins/fleet/server/services/package_policy.test.ts b/x-pack/plugins/fleet/server/services/package_policy.test.ts index 9505edd3556cb3..08a2ef507fe20f 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.test.ts @@ -19,6 +19,10 @@ import type { } from '@kbn/core/server'; import { SavedObjectsErrorHelpers } from '@kbn/core/server'; +import { + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '../../common/constants'; import { PackagePolicyMocks } from '../mocks/package_policy.mocks'; import type { @@ -53,8 +57,6 @@ import { PackagePolicyValidationError, } from '../errors'; -import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../constants'; - import { mapPackagePolicySavedObjectToPackagePolicy } from './package_policies'; import { @@ -71,6 +73,9 @@ import { getPackageInfo } from './epm/packages'; import { sendTelemetryEvents } from './upgrade_sender'; import { auditLoggingService } from './audit_logging'; import { agentPolicyService } from './agent_policy'; +import { isSpaceAwarenessEnabled } from './spaces/helpers'; + +jest.mock('./spaces/helpers'); const mockedSendTelemetryEvents = sendTelemetryEvents as jest.MockedFunction< typeof sendTelemetryEvents @@ -221,6 +226,7 @@ const mockAgentPolicyGet = () => { describe('Package policy service', () => { beforeEach(() => { appContextService.start(createAppContextStartContractMock()); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); }); afterEach(() => { @@ -240,7 +246,7 @@ describe('Package policy service', () => { id: 'test-package-policy', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); mockAgentPolicyGet(); @@ -268,7 +274,7 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toBeCalledWith({ action: 'create', id: 'test-package-policy', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -281,7 +287,7 @@ describe('Package policy service', () => { id: 'test-package-policy', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); mockAgentPolicyGet(); @@ -334,13 +340,13 @@ describe('Package policy service', () => { id: 'test-package-policy-1', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }, { id: 'test-package-policy-2', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }, ], }); @@ -371,13 +377,13 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(1, { action: 'create', id: 'test-package-policy-1', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(2, { action: 'create', id: 'test-package-policy-2', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -389,7 +395,7 @@ describe('Package policy service', () => { id: 'test-package-policy', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); await packagePolicyService.get(soClient, 'test-package-policy'); @@ -397,7 +403,7 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toBeCalledWith({ action: 'get', id: 'test-package-policy', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -411,13 +417,13 @@ describe('Package policy service', () => { id: 'test-package-policy-1', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }, { id: 'test-package-policy-2', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }, ], }); @@ -430,13 +436,13 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(1, { action: 'get', id: 'test-package-policy-1', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(2, { action: 'get', id: 'test-package-policy-2', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -453,14 +459,14 @@ describe('Package policy service', () => { id: 'test-package-policy-1', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, score: 0, }, { id: 'test-package-policy-2', attributes: {}, references: [], - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, score: 0, }, ], @@ -475,13 +481,13 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(1, { action: 'find', id: 'test-package-policy-1', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenNthCalledWith(2, { action: 'find', id: 'test-package-policy-2', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -1686,14 +1692,14 @@ describe('Package policy service', () => { soClient.get.mockResolvedValue({ id: 'test-package-policy', - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, references: [], attributes, }); soClient.update.mockResolvedValue({ id: 'test-package-policy', - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, references: [], attributes, }); @@ -1706,7 +1712,7 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'update', id: 'test-package-policy', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -2474,13 +2480,13 @@ describe('Package policy service', () => { const mockPackagePolicies = [ { id: 'test-package-policy-1', - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, attributes: {}, references: [], }, { id: 'test-package-policy-2', - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, attributes: {}, references: [], }, @@ -2527,7 +2533,7 @@ describe('Package policy service', () => { const mockPackagePolicy = { id: 'test-package-policy', - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, attributes: {}, references: [], }; @@ -2545,7 +2551,7 @@ describe('Package policy service', () => { expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ action: 'delete', id: 'test-package-policy', - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, }); }); }); @@ -4972,13 +4978,13 @@ describe('Package policy service', () => { }); it('should return an iterator', async () => { - expect(packagePolicyService.fetchAllItemIds(soClientMock)).toEqual({ + expect(await packagePolicyService.fetchAllItemIds(soClientMock)).toEqual({ [Symbol.asyncIterator]: expect.any(Function), }); }); it('should provide item ids on every iteration', async () => { - for await (const ids of packagePolicyService.fetchAllItemIds(soClientMock)) { + for await (const ids of await packagePolicyService.fetchAllItemIds(soClientMock)) { expect(ids).toEqual(['so-123', 'so-123']); } @@ -4986,13 +4992,13 @@ describe('Package policy service', () => { }); it('should use default options', async () => { - for await (const ids of packagePolicyService.fetchAllItemIds(soClientMock)) { + for await (const ids of await packagePolicyService.fetchAllItemIds(soClientMock)) { expect(ids); } expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, perPage: 1000, sortField: 'created_at', sortOrder: 'asc', @@ -5003,7 +5009,7 @@ describe('Package policy service', () => { }); it('should use custom options when defined', async () => { - for await (const ids of packagePolicyService.fetchAllItemIds(soClientMock, { + for await (const ids of await packagePolicyService.fetchAllItemIds(soClientMock, { perPage: 13, kuery: 'one=two', })) { @@ -5012,7 +5018,7 @@ describe('Package policy service', () => { expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, perPage: 13, sortField: 'created_at', sortOrder: 'asc', @@ -5040,13 +5046,13 @@ describe('Package policy service', () => { }); it('should return an iterator', async () => { - expect(packagePolicyService.fetchAllItems(soClientMock)).toEqual({ + expect(await packagePolicyService.fetchAllItems(soClientMock)).toEqual({ [Symbol.asyncIterator]: expect.any(Function), }); }); it('should provide items on every iteration', async () => { - for await (const items of packagePolicyService.fetchAllItems(soClientMock)) { + for await (const items of await packagePolicyService.fetchAllItems(soClientMock)) { expect(items).toEqual( PackagePolicyMocks.generatePackagePolicySavedObjectFindResponse().saved_objects.map( (soItem) => { @@ -5060,7 +5066,25 @@ describe('Package policy service', () => { }); it('should use default options', async () => { - for await (const ids of packagePolicyService.fetchAllItemIds(soClientMock)) { + for await (const ids of await packagePolicyService.fetchAllItemIds(soClientMock)) { + expect(ids); + } + + expect(soClientMock.find).toHaveBeenCalledWith( + expect.objectContaining({ + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + perPage: 1000, + sortField: 'created_at', + sortOrder: 'asc', + fields: [], + filter: undefined, + }) + ); + }); + + it('should use space aware saved object type if user opt-in for space awareness', async () => { + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); + for await (const ids of await packagePolicyService.fetchAllItemIds(soClientMock)) { expect(ids); } @@ -5077,7 +5101,7 @@ describe('Package policy service', () => { }); it('should use custom options when defined', async () => { - for await (const ids of packagePolicyService.fetchAllItems(soClientMock, { + for await (const ids of await packagePolicyService.fetchAllItems(soClientMock, { kuery: 'one=two', perPage: 12, sortOrder: 'desc', @@ -5088,7 +5112,7 @@ describe('Package policy service', () => { expect(soClientMock.find).toHaveBeenCalledWith( expect.objectContaining({ - type: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, perPage: 12, sortField: 'updated_by', sortOrder: 'desc', diff --git a/x-pack/plugins/fleet/server/services/package_policy.ts b/x-pack/plugins/fleet/server/services/package_policy.ts index cafb7e85d9d32a..b189d5dbcf2787 100644 --- a/x-pack/plugins/fleet/server/services/package_policy.ts +++ b/x-pack/plugins/fleet/server/services/package_policy.ts @@ -48,6 +48,8 @@ import { SO_SEARCH_LIMIT, PACKAGES_SAVED_OBJECT_TYPE, DATASET_VAR_NAME, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, } from '../../common/constants'; import type { PostDeletePackagePoliciesResponse, @@ -69,7 +71,6 @@ import type { AssetsMap, AgentPolicy, } from '../../common/types'; -import { PACKAGE_POLICY_SAVED_OBJECT_TYPE } from '../constants'; import { FleetError, fleetErrorToResponseOptions, @@ -107,7 +108,7 @@ import { agentPolicyService } from './agent_policy'; import { getPackageInfo, getInstallation, ensureInstalledPackage } from './epm/packages'; import { getAssetsDataFromAssetsMap } from './epm/packages/assets'; import { compileTemplate } from './epm/agent/agent'; -import { escapeSearchQueryPhrase, normalizeKuery } from './saved_object'; +import { escapeSearchQueryPhrase, normalizeKuery as _normalizeKuery } from './saved_object'; import { appContextService } from '.'; import { removeOldAssets } from './epm/packages/cleanup'; import type { PackageUpdateEvent, UpdateEventType } from './upgrade_sender'; @@ -135,13 +136,12 @@ import { getPackageAssetsMap } from './epm/packages/get'; import { validateAgentPolicyOutputForIntegration } from './agent_policies/outputs_helpers'; import type { PackagePolicyClientFetchAllItemIdsOptions } from './package_policy_service'; import { validatePolicyNamespaceForSpace } from './spaces/policy_namespaces'; +import { isSpaceAwarenessEnabled, isSpaceAwarenessMigrationPending } from './spaces/helpers'; export type InputsOverride = Partial & { vars?: Array; }; -const SAVED_OBJECT_TYPE = PACKAGE_POLICY_SAVED_OBJECT_TYPE; - async function getPkgInfoAssetsMap({ savedObjectsClient, packageInfos, @@ -174,6 +174,32 @@ async function getPkgInfoAssetsMap({ return packageInfosandAssetsMap; } +export async function getPackagePolicySavedObjectType() { + return (await isSpaceAwarenessEnabled()) + ? PACKAGE_POLICY_SAVED_OBJECT_TYPE + : LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE; +} + +function normalizeKuery(savedObjectType: string, kuery: string) { + if (savedObjectType === LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE) { + return _normalizeKuery( + savedObjectType, + kuery.replace( + new RegExp(`${PACKAGE_POLICY_SAVED_OBJECT_TYPE}\\.`, 'g'), + `${savedObjectType}.attributes.` + ) + ); + } else { + return _normalizeKuery( + savedObjectType, + kuery.replace( + new RegExp(`${LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE}\\.`, 'g'), + `${savedObjectType}.attributes.` + ) + ); + } +} + class PackagePolicyClientImpl implements PackagePolicyClient { public async create( soClient: SavedObjectsClientContract, @@ -202,10 +228,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { authorizationHeader = HTTPAuthorizationHeader.parseFromRequest(request); } + const savedObjectType = await getPackagePolicySavedObjectType(); + auditLoggingService.writeCustomSoAuditLog({ action: 'create', id: packagePolicyId, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); const logger = appContextService.getLogger(); @@ -348,7 +376,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const isoDate = new Date().toISOString(); const newSo = await soClient.create( - SAVED_OBJECT_TYPE, + savedObjectType, { ...enrichedPackagePolicy, ...(enrichedPackagePolicy.package @@ -407,6 +435,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { created: PackagePolicy[]; failed: Array<{ packagePolicy: NewPackagePolicy; error?: Error | SavedObjectError }>; }> { + const savedObjectType = await getPackagePolicySavedObjectType(); for (const packagePolicy of packagePolicies) { if (!packagePolicy.id) { packagePolicy.id = SavedObjectsUtils.generateId(); @@ -414,7 +443,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { auditLoggingService.writeCustomSoAuditLog({ action: 'create', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); this.keepPolicyIdInSync(packagePolicy); @@ -497,7 +526,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { } policiesToCreate.push({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, id: packagePolicyId, attributes: { ...pkgPolicyWithoutId, @@ -615,7 +644,8 @@ class PackagePolicyClientImpl implements PackagePolicyClient { soClient: SavedObjectsClientContract, id: string ): Promise { - const packagePolicySO = await soClient.get(SAVED_OBJECT_TYPE, id); + const savedObjectType = await getPackagePolicySavedObjectType(); + const packagePolicySO = await soClient.get(savedObjectType, id); if (!packagePolicySO) { return null; } @@ -651,7 +681,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { auditLoggingService.writeCustomSoAuditLog({ action: 'get', id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); return response; @@ -661,11 +691,10 @@ class PackagePolicyClientImpl implements PackagePolicyClient { soClient: SavedObjectsClientContract, agentPolicyId: string ): Promise { + const savedObjectType = await getPackagePolicySavedObjectType(); const packagePolicySO = await soClient.find({ - type: SAVED_OBJECT_TYPE, - filter: `${SAVED_OBJECT_TYPE}.attributes.policy_ids:${escapeSearchQueryPhrase( - agentPolicyId - )}`, + type: savedObjectType, + filter: `${savedObjectType}.attributes.policy_ids:${escapeSearchQueryPhrase(agentPolicyId)}`, perPage: SO_SEARCH_LIMIT, }); if (!packagePolicySO) { @@ -682,7 +711,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -694,10 +723,11 @@ class PackagePolicyClientImpl implements PackagePolicyClient { ids: string[], options: { ignoreMissing?: boolean } = {} ): Promise { + const savedObjectType = await getPackagePolicySavedObjectType(); const packagePolicySO = await soClient.bulkGet( ids.map((id) => ({ id, - type: SAVED_OBJECT_TYPE, + type: savedObjectType, })) ); if (!packagePolicySO) { @@ -728,7 +758,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { auditLoggingService.writeCustomSoAuditLog({ action: 'get', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -739,6 +769,8 @@ class PackagePolicyClientImpl implements PackagePolicyClient { soClient: SavedObjectsClientContract, options: ListWithKuery & { spaceId?: string } ): Promise> { + const savedObjectType = await getPackagePolicySavedObjectType(); + const { page = 1, perPage = 20, @@ -749,13 +781,13 @@ class PackagePolicyClientImpl implements PackagePolicyClient { } = options; const packagePolicies = await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, sortField, sortOrder, page, perPage, fields, - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, namespaces: options.spaceId ? [options.spaceId] : undefined, }); @@ -763,7 +795,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -785,22 +817,22 @@ class PackagePolicyClientImpl implements PackagePolicyClient { options: ListWithKuery ): Promise> { const { page = 1, perPage = 20, sortField = 'updated_at', sortOrder = 'desc', kuery } = options; - + const savedObjectType = await getPackagePolicySavedObjectType(); const packagePolicies = await soClient.find<{}>({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, sortField, sortOrder, page, perPage, fields: [], - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, }); for (const packagePolicy of packagePolicies.saved_objects) { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -819,10 +851,11 @@ class PackagePolicyClientImpl implements PackagePolicyClient { packagePolicyUpdate: UpdatePackagePolicy, options?: { user?: AuthenticatedUser; force?: boolean; skipUniqueNameVerification?: boolean } ): Promise { + const savedObjectType = await getPackagePolicySavedObjectType(); auditLoggingService.writeCustomSoAuditLog({ action: 'update', id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); const logger = appContextService.getLogger(); @@ -939,7 +972,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { logger.debug(`Updating SO with revision ${oldPackagePolicy.revision + 1}`); await soClient.update( - SAVED_OBJECT_TYPE, + savedObjectType, id, { ...restOfPackagePolicy, @@ -1027,11 +1060,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { error: Error | SavedObjectError; }>; }> { + const savedObjectType = await getPackagePolicySavedObjectType(); for (const packagePolicy of packagePolicyUpdates) { auditLoggingService.writeCustomSoAuditLog({ action: 'update', id: packagePolicy.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } const oldPackagePolicies = await this.getByIDs( @@ -1127,7 +1161,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { await handleExperimentalDatastreamFeatureOptIn({ soClient, esClient, packagePolicy }); policiesToUpdate.push({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, id, attributes: { ...restOfPackagePolicy, @@ -1230,11 +1264,12 @@ class PackagePolicyClientImpl implements PackagePolicyClient { context?: RequestHandlerContext, request?: KibanaRequest ): Promise { + const savedObjectType = await getPackagePolicySavedObjectType(); for (const id of ids) { auditLoggingService.writeCustomSoAuditLog({ action: 'delete', id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); } @@ -1291,9 +1326,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const packagePolicy = packagePolicies.find((p) => p.id === id); if (!packagePolicy) { - throw new PackagePolicyNotFoundError( - `Saved object [ingest-package-policies/${id}] not found` - ); + throw new PackagePolicyNotFoundError(`Saved object [${savedObjectType}/${id}] not found`); } if (packagePolicy.is_managed && !options?.force) { @@ -1319,7 +1352,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { const secretsToDelete: string[] = []; if (idsToDelete.length > 0) { const { statuses } = await soClient.bulkDelete( - idsToDelete.map((id) => ({ id, type: SAVED_OBJECT_TYPE })) + idsToDelete.map((id) => ({ id, type: savedObjectType })) ); statuses.forEach(({ id, success, error }) => { @@ -2002,9 +2035,10 @@ class PackagePolicyClientImpl implements PackagePolicyClient { esClient: ElasticsearchClient, outputId: string ) { + const savedObjectType = await getPackagePolicySavedObjectType(); const packagePolicies = ( await soClient.find({ - type: SAVED_OBJECT_TYPE, + type: savedObjectType, fields: ['name', 'enabled', 'policy_ids', 'inputs', 'output_id'], searchFields: ['output_id'], search: escapeSearchQueryPhrase(outputId), @@ -2067,21 +2101,22 @@ class PackagePolicyClientImpl implements PackagePolicyClient { } } - fetchAllItemIds( + async fetchAllItemIds( soClient: SavedObjectsClientContract, { perPage = 1000, kuery }: PackagePolicyClientFetchAllItemIdsOptions = {} - ): AsyncIterable { + ): Promise> { // TODO:PT Question for fleet team: do I need to `auditLoggingService.writeCustomSoAuditLog()` here? Its only IDs + const savedObjectType = await getPackagePolicySavedObjectType(); return createSoFindIterable<{}>({ soClient, findRequest: { - type: SAVED_OBJECT_TYPE, + type: savedObjectType, perPage, sortField: 'created_at', sortOrder: 'asc', fields: [], - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, }, resultsMapper: (data) => { return data.saved_objects.map((packagePolicySO) => packagePolicySO.id); @@ -2089,7 +2124,7 @@ class PackagePolicyClientImpl implements PackagePolicyClient { }); } - fetchAllItems( + async fetchAllItems( soClient: SavedObjectsClientContract, { perPage = 1000, @@ -2097,22 +2132,24 @@ class PackagePolicyClientImpl implements PackagePolicyClient { sortOrder = 'asc', sortField = 'created_at', }: PackagePolicyClientFetchAllItemsOptions = {} - ): AsyncIterable { + ): Promise> { + const savedObjectType = await getPackagePolicySavedObjectType(); + return createSoFindIterable({ soClient, findRequest: { - type: SAVED_OBJECT_TYPE, + type: savedObjectType, sortField, sortOrder, perPage, - filter: kuery ? normalizeKuery(SAVED_OBJECT_TYPE, kuery) : undefined, + filter: kuery ? normalizeKuery(savedObjectType, kuery) : undefined, }, resultsMapper(data) { return data.saved_objects.map((packagePolicySO) => { auditLoggingService.writeCustomSoAuditLog({ action: 'find', id: packagePolicySO.id, - savedObjectType: PACKAGE_POLICY_SAVED_OBJECT_TYPE, + savedObjectType, }); return mapPackagePolicySavedObjectToPackagePolicy(packagePolicySO); @@ -2133,13 +2170,22 @@ export class PackagePolicyServiceImpl if (doesNotHaveRequiredFleetAuthz(authz, fleetRequiredAuthz)) { throw new FleetUnauthorizedError('Not authorized to this action on integration policies'); } + + if ((await isSpaceAwarenessMigrationPending()) === true) { + throw new FleetError('Migration to space awareness is pending'); + } }; return new PackagePolicyClientWithAuthz(preflightCheck); } public get asInternalUser() { - return new PackagePolicyClientWithAuthz(); + const preflightCheck = async () => { + if ((await isSpaceAwarenessMigrationPending()) === true) { + throw new FleetError('Migration to space awareness is pending'); + } + }; + return new PackagePolicyClientWithAuthz(preflightCheck); } } @@ -2158,6 +2204,51 @@ class PackagePolicyClientWithAuthz extends PackagePolicyClientImpl { } }; + async bulkCreate( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + packagePolicies: NewPackagePolicyWithId[], + options?: + | { + user?: AuthenticatedUser | undefined; + bumpRevision?: boolean | undefined; + force?: true | undefined; + } + | undefined + ): Promise<{ + created: PackagePolicy[]; + failed: Array<{ packagePolicy: NewPackagePolicy; error?: Error | SavedObjectError }>; + }> { + await this.#runPreflight({ + fleetAuthz: { + integrations: { writeIntegrationPolicies: true }, + }, + }); + return super.bulkCreate(soClient, esClient, packagePolicies, options); + } + + async update( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + id: string, + packagePolicyUpdate: UpdatePackagePolicy, + options?: + | { + user?: AuthenticatedUser | undefined; + force?: boolean | undefined; + skipUniqueNameVerification?: boolean | undefined; + } + | undefined + ): Promise { + await this.#runPreflight({ + fleetAuthz: { + integrations: { writeIntegrationPolicies: true }, + }, + }); + + return super.update(soClient, esClient, id, packagePolicyUpdate, options); + } + async create( soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, @@ -2939,9 +3030,10 @@ async function requireUniqueName( packagePolicy: UpdatePackagePolicy | NewPackagePolicy, id?: string ) { + const savedObjectType = await getPackagePolicySavedObjectType(); const existingPoliciesWithName = await packagePolicyService.list(soClient, { perPage: SO_SEARCH_LIMIT, - kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.name:"${packagePolicy.name}"`, + kuery: `${savedObjectType}.name:"${packagePolicy.name}"`, }); const policiesToCheck = id diff --git a/x-pack/plugins/fleet/server/services/package_policy_service.ts b/x-pack/plugins/fleet/server/services/package_policy_service.ts index fed46872ab6cba..8b47f42380935d 100644 --- a/x-pack/plugins/fleet/server/services/package_policy_service.ts +++ b/x-pack/plugins/fleet/server/services/package_policy_service.ts @@ -239,7 +239,7 @@ export interface PackagePolicyClient { fetchAllItemIds( soClient: SavedObjectsClientContract, options?: PackagePolicyClientFetchAllItemIdsOptions - ): AsyncIterable; + ): Promise>; /** * Returns an `AsyncIterable` for retrieving all integration policies @@ -249,7 +249,7 @@ export interface PackagePolicyClient { fetchAllItems( soClient: SavedObjectsClientContract, options?: PackagePolicyClientFetchAllItemsOptions - ): AsyncIterable; + ): Promise>; } export type PackagePolicyClientFetchAllItemIdsOptions = Pick; diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index 21caf5088f457c..802edd93e05435 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -20,7 +20,7 @@ import type { } from '../../common/types'; import type { AgentPolicy, NewPackagePolicy, Output, DownloadSource } from '../types'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '../constants'; import { appContextService } from './app_context'; @@ -67,7 +67,7 @@ const mockDefaultDownloadService: DownloadSource = { function getPutPreconfiguredPackagesMock() { const soClient = savedObjectsClientMock.create(); soClient.find.mockImplementation(async ({ type, search }) => { - if (type === AGENT_POLICY_SAVED_OBJECT_TYPE) { + if (type === LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE) { const id = search!.replace(/"/g, ''); const attributes = mockConfiguredPolicies.get(id); if (attributes) { diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts index 3088814c8f8a32..e21ae1e06dc783 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/outputs.test.ts @@ -7,11 +7,9 @@ import { elasticsearchServiceMock, savedObjectsClientMock } from '@kbn/core/server/mocks'; -import { appContextService } from '..'; - +import { appContextService } from '../app_context'; import type { PreconfiguredOutput } from '../../../common/types'; import type { Output } from '../../types'; - import * as agentPolicy from '../agent_policy'; import { outputService } from '../output'; @@ -26,15 +24,17 @@ jest.mock('../agent_policy_update'); jest.mock('../output'); jest.mock('../epm/packages/bundled_packages'); jest.mock('../epm/archive'); +jest.mock('../settings'); const mockedOutputService = outputService as jest.Mocked; jest.mock('../app_context', () => ({ appContextService: { - getInternalUserSOClientWithoutSpaceExtension: jest.fn(), - getExperimentalFeatures: () => ({ - useSpaceAwareness: true, + getExperimentalFeatures: jest.fn().mockReturnValue({ + useSpaceAwareness: false, }), + getInternalUserSOClient: jest.fn(), + getInternalUserSOClientWithoutSpaceExtension: jest.fn(), getLogger: () => new Proxy( {}, diff --git a/x-pack/plugins/fleet/server/services/preconfiguration/reset_agent_policies.ts b/x-pack/plugins/fleet/server/services/preconfiguration/reset_agent_policies.ts index 79ea65c04980e7..7e65dd665d0bdb 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration/reset_agent_policies.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration/reset_agent_policies.ts @@ -12,12 +12,12 @@ import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { appContextService } from '../app_context'; import { setupFleet } from '../setup'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT, PACKAGE_POLICY_SAVED_OBJECT_TYPE, PRECONFIGURATION_DELETION_RECORD_SAVED_OBJECT_TYPE, } from '../../constants'; -import { agentPolicyService } from '../agent_policy'; +import { agentPolicyService, getAgentPolicySavedObjectType } from '../agent_policy'; import { packagePolicyService } from '../package_policy'; import { getAgentsByKuery, forceUnenrollAgent } from '../agents'; import { listEnrollmentApiKeys, deleteEnrollmentApiKey } from '../api_keys'; @@ -61,7 +61,8 @@ async function _deleteGhostPackagePolicies( return; } - const objects = policyIds.map((id) => ({ id, type: AGENT_POLICY_SAVED_OBJECT_TYPE })); + const savedObjectType = await getAgentPolicySavedObjectType(); + const objects = policyIds.map((id) => ({ id, type: savedObjectType })); const agentPolicyExistsMap = (await soClient.bulkGet(objects)).saved_objects.reduce((acc, so) => { if (so.error && so.error.statusCode === 404) { acc.set(so.id, false); @@ -146,7 +147,7 @@ async function _deleteExistingData( existingPolicies = ( await agentPolicyService.list(soClient, { perPage: SO_SEARCH_LIMIT, - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.is_preconfigured:true`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.is_preconfigured:true`, }) ).items; } diff --git a/x-pack/plugins/fleet/server/services/security/fleet_router.ts b/x-pack/plugins/fleet/server/services/security/fleet_router.ts index f8e374c458344f..11a4b084d48073 100644 --- a/x-pack/plugins/fleet/server/services/security/fleet_router.ts +++ b/x-pack/plugins/fleet/server/services/security/fleet_router.ts @@ -5,21 +5,19 @@ * 2.0. */ -import type { - IKibanaResponse, - IRouter, - KibanaRequest, - KibanaResponseFactory, - Logger, - RequestHandler, - RouteMethod, +import { + type IKibanaResponse, + type IRouter, + type KibanaRequest, + type KibanaResponseFactory, + type Logger, + type RequestHandler, + type RouteMethod, } from '@kbn/core/server'; import type { VersionedRouteConfig } from '@kbn/core-http-server'; import { PUBLIC_API_ACCESS } from '../../../common/constants'; - import type { FleetRequestHandlerContext } from '../..'; - import { getRequestStore } from '../request_store'; import type { FleetVersionedRouteConfig } from './types'; @@ -82,6 +80,7 @@ export function makeRouterWithFleetAuthz { const so = getDefaultSO(canEncrypt); const so2 = getDefaultSO2(canEncrypt); - agentPolicyService.fetchAllAgentPolicyIds = jest.fn(async function* () { - yield items || [so.attributes.policy_id, so2.attributes.policy_id]; - }); + agentPolicyService.fetchAllAgentPolicyIds = jest.fn().mockResolvedValue( + jest.fn(async function* () { + yield items || [so.attributes.policy_id, so2.attributes.policy_id]; + })() + ); } function setupMocks(canEncrypt: boolean = true) { diff --git a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts index 4cb5aa1221db77..0abad8961e47e6 100644 --- a/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts +++ b/x-pack/plugins/fleet/server/services/security/uninstall_token_service/index.ts @@ -42,13 +42,9 @@ import type { UninstallTokenMetadata, } from '../../../../common/types/models/uninstall_token'; -import { - UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, - SO_SEARCH_LIMIT, - AGENT_POLICY_SAVED_OBJECT_TYPE, -} from '../../../constants'; +import { UNINSTALL_TOKENS_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../../../constants'; import { appContextService } from '../../app_context'; -import { agentPolicyService } from '../../agent_policy'; +import { agentPolicyService, getAgentPolicySavedObjectType } from '../../agent_policy'; interface UninstallTokenSOAttributes { policy_id: string; @@ -231,10 +227,12 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { } private async searchPoliciesByName(policyNameSearchString: string): Promise { - const policyNameFilter = `${AGENT_POLICY_SAVED_OBJECT_TYPE}.attributes.name:${policyNameSearchString}`; + const agentPolicySavedObjectType = await getAgentPolicySavedObjectType(); + + const policyNameFilter = `${agentPolicySavedObjectType}.attributes.name:${policyNameSearchString}`; const agentPoliciesSOs = await this.soClient.find({ - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: agentPolicySavedObjectType, filter: policyNameFilter, }); @@ -576,7 +574,7 @@ export class UninstallTokenService implements UninstallTokenServiceInterface { } private async getAllPolicyIds(): Promise { - const agentPolicyIdsFetcher = agentPolicyService.fetchAllAgentPolicyIds(this.soClient); + const agentPolicyIdsFetcher = await agentPolicyService.fetchAllAgentPolicyIds(this.soClient); const policyIds: string[] = []; for await (const agentPolicyId of agentPolicyIdsFetcher) { policyIds.push(...agentPolicyId); diff --git a/x-pack/plugins/fleet/server/services/settings.ts b/x-pack/plugins/fleet/server/services/settings.ts index 6e248d7817a5fc..68829b734eeaf9 100644 --- a/x-pack/plugins/fleet/server/services/settings.ts +++ b/x-pack/plugins/fleet/server/services/settings.ts @@ -6,7 +6,7 @@ */ import Boom from '@hapi/boom'; -import type { SavedObjectsClientContract } from '@kbn/core/server'; +import type { SavedObjectsClientContract, SavedObjectsUpdateOptions } from '@kbn/core/server'; import { normalizeHostsForAgents } from '../../common/services'; import { GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, GLOBAL_SETTINGS_ID } from '../../common/constants'; @@ -35,6 +35,7 @@ export async function getSettings(soClient: SavedObjectsClientContract): Promise return { id: settingsSo.id, + version: settingsSo.version, ...settingsSo.attributes, fleet_server_hosts: fleetServerHosts.items.flatMap((item) => item.host_urls), preconfigured_fields: getConfigFleetServerHosts() ? ['fleet_server_hosts'] : [], @@ -70,12 +71,14 @@ export async function settingsSetup(soClient: SavedObjectsClientContract) { export async function saveSettings( soClient: SavedObjectsClientContract, - newData: Partial> + newData: Partial>, + options?: SavedObjectsUpdateOptions & { createWithOverwrite?: boolean } ): Promise & Pick> { const data = { ...newData }; if (data.fleet_server_hosts) { data.fleet_server_hosts = data.fleet_server_hosts.map(normalizeHostsForAgents); } + const { createWithOverwrite, ...updateOptions } = options ?? {}; try { const settings = await getSettings(soClient); @@ -89,7 +92,8 @@ export async function saveSettings( const res = await soClient.update( GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, settings.id, - data + data, + updateOptions ); return { @@ -114,7 +118,8 @@ export async function saveSettings( }, { id: GLOBAL_SETTINGS_ID, - overwrite: true, + // Do not overwrite if version is passed + overwrite: typeof createWithOverwrite === 'undefined' ? true : createWithOverwrite, } ); diff --git a/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.test.ts b/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.test.ts index 3cf070ab8fea39..7ced6a3fcddb97 100644 --- a/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.test.ts +++ b/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.test.ts @@ -5,125 +5,114 @@ * 2.0. */ -import { appContextService } from '../app_context'; - import type { Agent } from '../../types'; import { agentsKueryNamespaceFilter, isAgentInNamespace } from './agent_namespaces'; +import { isSpaceAwarenessEnabled } from './helpers'; -jest.mock('../app_context'); - -const mockedAppContextService = appContextService as jest.Mocked; +jest.mock('./helpers'); describe('isAgentInNamespace', () => { - describe('with the useSpaceAwareness feature flag disabled', () => { + describe('with isSpaceAwarenessEnabled is false', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: false, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); }); - it('returns true even if the agent is in a different space', () => { + it('returns true even if the agent is in a different space', async () => { const agent = { id: '123', namespaces: ['default', 'space1'] } as Agent; - expect(isAgentInNamespace(agent, 'space2')).toEqual(true); + expect(await isAgentInNamespace(agent, 'space2')).toEqual(true); }); }); - describe('with the useSpaceAwareness feature flag enabled', () => { + describe('with the isSpaceAwarenessEnabled return true', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: true, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); }); describe('when the namespace is defined', () => { - it('returns true in a custom space if the agent namespaces include the namespace', () => { + it('returns true in a custom space if the agent namespaces include the namespace', async () => { const agent = { id: '123', namespaces: ['default', 'space1'] } as Agent; - expect(isAgentInNamespace(agent, 'space1')).toEqual(true); + expect(await isAgentInNamespace(agent, 'space1')).toEqual(true); }); - it('returns false in a custom space if the agent namespaces do not include the namespace', () => { + it('returns false in a custom space if the agent namespaces do not include the namespace', async () => { const agent = { id: '123', namespaces: ['default', 'space1'] } as Agent; - expect(isAgentInNamespace(agent, 'space2')).toEqual(false); + expect(await isAgentInNamespace(agent, 'space2')).toEqual(false); }); - it('returns true in the default space if the agent has zero length namespaces', () => { + it('returns true in the default space if the agent has zero length namespaces', async () => { const agent = { id: '123', namespaces: [] as string[] } as Agent; - expect(isAgentInNamespace(agent, 'default')).toEqual(true); + expect(await isAgentInNamespace(agent, 'default')).toEqual(true); }); - it('returns false in a custom space if the agent has zero length namespaces', () => { + it('returns false in a custom space if the agent has zero length namespaces', async () => { const agent = { id: '123', namespaces: [] as string[] } as Agent; - expect(isAgentInNamespace(agent, 'space1')).toEqual(false); + expect(await isAgentInNamespace(agent, 'space1')).toEqual(false); }); - it('returns true in the default space if the agent does not have namespaces', () => { + it('returns true in the default space if the agent does not have namespaces', async () => { const agent = { id: '123' } as Agent; - expect(isAgentInNamespace(agent, 'default')).toEqual(true); + expect(await isAgentInNamespace(agent, 'default')).toEqual(true); }); - it('returns false in a custom space if the agent does not have namespaces', () => { + it('returns false in a custom space if the agent does not have namespaces', async () => { const agent = { id: '123' } as Agent; - expect(isAgentInNamespace(agent, 'space1')).toEqual(false); + expect(await isAgentInNamespace(agent, 'space1')).toEqual(false); }); }); describe('when the namespace is undefined', () => { - it('returns true if the agent does not have namespaces', () => { + it('returns true if the agent does not have namespaces', async () => { const agent = { id: '123' } as Agent; - expect(isAgentInNamespace(agent)).toEqual(true); + expect(await isAgentInNamespace(agent)).toEqual(true); }); - it('returns true if the agent has zero length namespaces', () => { + it('returns true if the agent has zero length namespaces', async () => { const agent = { id: '123', namespaces: [] as string[] } as Agent; - expect(isAgentInNamespace(agent)).toEqual(true); + expect(await isAgentInNamespace(agent)).toEqual(true); }); - it('returns true if the agent namespaces include the default one', () => { + it('returns true if the agent namespaces include the default one', async () => { const agent = { id: '123', namespaces: ['default'] } as Agent; - expect(isAgentInNamespace(agent)).toEqual(true); + expect(await isAgentInNamespace(agent)).toEqual(true); }); - it('returns false if the agent namespaces include the default one', () => { + it('returns false if the agent namespaces include the default one', async () => { const agent = { id: '123', namespaces: ['space1'] } as Agent; - expect(isAgentInNamespace(agent)).toEqual(false); + expect(await isAgentInNamespace(agent)).toEqual(false); }); }); }); }); describe('agentsKueryNamespaceFilter', () => { - describe('with the useSpaceAwareness feature flag disabled', () => { + describe('with isSpaceAwarenessEnabled returning false', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: false, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); }); - it('returns undefined if the useSpaceAwareness feature flag disabled', () => { - expect(agentsKueryNamespaceFilter('space1')).toBeUndefined(); + it('returns undefined', async () => { + expect(await agentsKueryNamespaceFilter('space1')).toBeUndefined(); }); }); - describe('with the useSpaceAwareness feature flag enabled', () => { + describe('with isSpaceAwarenessEnabled returning true', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: true, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); }); - it('returns undefined if the namespace is undefined', () => { - expect(agentsKueryNamespaceFilter()).toBeUndefined(); + it('returns undefined if the namespace is undefined', async () => { + expect(await agentsKueryNamespaceFilter()).toBeUndefined(); }); - it('returns a kuery for the default space', () => { - expect(agentsKueryNamespaceFilter('default')).toEqual( + it('returns a kuery for the default space', async () => { + expect(await agentsKueryNamespaceFilter('default')).toEqual( 'namespaces:(default) or not namespaces:*' ); }); - it('returns a kuery for custom spaces', () => { - expect(agentsKueryNamespaceFilter('space1')).toEqual('namespaces:(space1)'); + it('returns a kuery for custom spaces', async () => { + expect(await agentsKueryNamespaceFilter('space1')).toEqual('namespaces:(space1)'); }); }); }); diff --git a/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.ts b/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.ts index 1a1834635662bc..49253ad9767eaa 100644 --- a/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.ts +++ b/x-pack/plugins/fleet/server/services/spaces/agent_namespaces.ts @@ -7,12 +7,12 @@ import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; -import { appContextService } from '../app_context'; - import type { Agent } from '../../types'; -export function isAgentInNamespace(agent: Agent, namespace?: string) { - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; +import { isSpaceAwarenessEnabled } from './helpers'; + +export async function isAgentInNamespace(agent: Agent, namespace?: string) { + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (!useSpaceAwareness) { return true; } @@ -31,8 +31,8 @@ export function isAgentInNamespace(agent: Agent, namespace?: string) { ); } -export function agentsKueryNamespaceFilter(namespace?: string) { - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; +export async function agentsKueryNamespaceFilter(namespace?: string) { + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (!useSpaceAwareness || !namespace) { return; } diff --git a/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.test.ts b/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.test.ts new file mode 100644 index 00000000000000..f8f4e95c78b451 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.test.ts @@ -0,0 +1,203 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { type MockedLogger, loggerMock } from '@kbn/logging-mocks'; +import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; + +import type { Settings } from '../../types'; +import { appContextService } from '../app_context'; +import { getSettingsOrUndefined, saveSettings } from '../settings'; + +import { enableSpaceAwarenessMigration } from './enable_space_awareness'; + +jest.mock('../app_context'); +jest.mock('../settings'); + +function mockGetSettingsOrUndefined(settings?: Partial) { + if (settings) { + jest.mocked(getSettingsOrUndefined).mockResolvedValue(settings as any); + } else { + jest.mocked(getSettingsOrUndefined).mockResolvedValue(undefined); + } +} + +describe('enableSpaceAwarenessMigration', () => { + let mockedLogger: MockedLogger; + let soClient: ReturnType; + beforeEach(() => { + mockedLogger = loggerMock.create(); + soClient = savedObjectsClientMock.create(); + jest.mocked(appContextService.getExperimentalFeatures).mockReset(); + jest.mocked(appContextService.getLogger).mockReturnValue(mockedLogger); + jest + .mocked(appContextService.getInternalUserSOClientWithoutSpaceExtension) + .mockReturnValue(soClient); + jest.mocked(getSettingsOrUndefined).mockReset(); + jest.mocked(saveSettings).mockReset(); + + jest.mocked(saveSettings).mockResolvedValue({} as any); + }); + it('should do nothing if migration is already done', async () => { + mockGetSettingsOrUndefined({ + use_space_awareness_migration_status: 'success', + }); + await enableSpaceAwarenessMigration(); + const logs = loggerMock.collect(mockedLogger); + expect(logs).toMatchInlineSnapshot(` + Object { + "debug": Array [], + "error": Array [], + "fatal": Array [], + "info": Array [], + "log": Array [], + "trace": Array [], + "warn": Array [], + } + `); + }); + + it('should do migration if migration is not pending', async () => { + mockGetSettingsOrUndefined({}); + + soClient.createPointInTimeFinder.mockReturnValueOnce({ + find: jest.fn().mockImplementation(async function* () { + yield { + saved_objects: [ + { id: 'agent-policy-1', attributes: {} }, + { id: 'agent-policy-2', attributes: {} }, + ], + }; + }), + close: jest.fn(), + }); + + soClient.createPointInTimeFinder.mockReturnValueOnce({ + find: jest.fn().mockImplementation(async function* () { + yield { + saved_objects: [ + { id: 'package-policy-1', attributes: {} }, + { id: 'package-policy-2', attributes: {} }, + ], + }; + }), + close: jest.fn(), + }); + + soClient.bulkCreate.mockImplementation((objects) => { + return { + saved_objects: objects.map(() => ({})), + } as any; + }); + + await enableSpaceAwarenessMigration(); + + const logs = loggerMock.collect(mockedLogger); + expect(logs).toMatchInlineSnapshot(` + Object { + "debug": Array [], + "error": Array [], + "fatal": Array [], + "info": Array [ + Array [ + "Starting Fleet space awareness migration", + ], + Array [ + "Fleet space awareness migration is complete", + ], + ], + "log": Array [], + "trace": Array [], + "warn": Array [], + } + `); + + expect(soClient.bulkCreate).toBeCalledWith( + [ + expect.objectContaining({ + id: 'agent-policy-1', + type: 'fleet-agent-policies', + }), + expect.objectContaining({ + id: 'agent-policy-2', + type: 'fleet-agent-policies', + }), + ], + { overwrite: true, refresh: 'wait_for' } + ); + expect(soClient.bulkCreate).toBeCalledWith( + [ + expect.objectContaining({ + id: 'package-policy-1', + type: 'fleet-package-policies', + }), + expect.objectContaining({ + id: 'package-policy-2', + type: 'fleet-package-policies', + }), + ], + { overwrite: true, refresh: 'wait_for' } + ); + + expect(saveSettings).toBeCalledWith( + expect.anything(), + expect.objectContaining({ + use_space_awareness_migration_status: 'success', + }) + ); + }); + + it('should set the status to error if an error happen', async () => { + mockGetSettingsOrUndefined({}); + + soClient.createPointInTimeFinder.mockImplementation(() => { + return { + async *find() { + throw new Error('unexpected error test'); + }, + close: jest.fn(), + } as any; + }); + + let error: Error | undefined; + await enableSpaceAwarenessMigration().catch((err) => { + error = err; + }); + + expect(error).toBeDefined(); + + const logs = loggerMock.collect(mockedLogger); + expect(logs).toMatchInlineSnapshot(` + Object { + "debug": Array [], + "error": Array [ + Array [ + "Fleet space awareness migration failed", + Object { + "error": [Error: unexpected error test], + }, + ], + ], + "fatal": Array [], + "info": Array [ + Array [ + "Starting Fleet space awareness migration", + ], + ], + "log": Array [], + "trace": Array [], + "warn": Array [], + } + `); + + expect(saveSettings).toBeCalledWith( + expect.anything(), + expect.objectContaining({ + use_space_awareness_migration_status: 'error', + }) + ); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.ts b/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.ts new file mode 100644 index 00000000000000..ba8b08dbc69147 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/spaces/enable_space_awareness.ts @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { SavedObjectsErrorHelpers, type Logger } from '@kbn/core/server'; + +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../../common'; +import { + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, +} from '../../../common/constants'; +import { appContextService } from '..'; +import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../../constants'; +import { getSettingsOrUndefined, saveSettings } from '../settings'; +import { FleetError } from '../../errors'; + +import { PENDING_MIGRATION_TIMEOUT } from './helpers'; + +export async function enableSpaceAwarenessMigration() { + const soClient = appContextService.getInternalUserSOClientWithoutSpaceExtension(); + const logger = appContextService.getLogger(); + + const existingSettings = await getSettingsOrUndefined(soClient); + if (existingSettings?.use_space_awareness_migration_status === 'success') { + return; + } + + if ( + existingSettings?.use_space_awareness_migration_started_at && + new Date(existingSettings?.use_space_awareness_migration_started_at).getTime() > + Date.now() - PENDING_MIGRATION_TIMEOUT + ) { + logger.info('Fleet space awareness migration is pending'); + throw new FleetError('Migration is pending.'); + } + + await saveSettings( + soClient, + { + use_space_awareness_migration_status: 'pending', + use_space_awareness_migration_started_at: new Date().toISOString(), + }, + { + createWithOverwrite: false, + version: existingSettings?.version, + } + ).catch((err) => { + if (SavedObjectsErrorHelpers.isConflictError(err)) { + logger.info('Fleet space awareness migration is pending'); + throw new FleetError('Migration is pending. (conflict acquiring the lock)'); + } + + throw err; + }); + + await runMigration(soClient, logger) + .then(async () => { + logger.info('Fleet space awareness migration is complete'); + // Update Settings SO + await saveSettings(soClient, { + use_space_awareness_migration_status: 'success', + use_space_awareness_migration_started_at: null, + }); + }) + .catch(async (error) => { + logger.error('Fleet space awareness migration failed', { error }); + await saveSettings(soClient, { + use_space_awareness_migration_status: 'error', + use_space_awareness_migration_started_at: null, + }); + throw error; + }); +} + +async function runMigration(soClient: SavedObjectsClientContract, logger: Logger) { + logger.info('Starting Fleet space awareness migration'); + // Agent Policy + await batchMigration( + soClient, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, + AGENT_POLICY_SAVED_OBJECT_TYPE + ); + // Package policu + await batchMigration( + soClient, + LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE, + PACKAGE_POLICY_SAVED_OBJECT_TYPE + ); +} + +const BATCH_SIZE = 1000; + +async function batchMigration( + soClient: SavedObjectsClientContract, + sourceSoType: string, + targetSoType: string +) { + const finder = soClient.createPointInTimeFinder({ + type: sourceSoType, + perPage: BATCH_SIZE, + }); + try { + for await (const result of finder.find()) { + const createRes = await soClient.bulkCreate( + result.saved_objects.map((so) => ({ + type: targetSoType, + id: so.id, + attributes: so.attributes, + })), + { + overwrite: true, + refresh: 'wait_for', + } + ); + for (const res of createRes.saved_objects) { + if (res.error) { + throw res.error; + } + } + } + } finally { + await finder.close(); + } +} diff --git a/x-pack/plugins/fleet/server/services/spaces/helper.test.ts b/x-pack/plugins/fleet/server/services/spaces/helper.test.ts new file mode 100644 index 00000000000000..76d9c8707fe0b9 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/spaces/helper.test.ts @@ -0,0 +1,131 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Settings } from '../../types'; +import { appContextService } from '../app_context'; +import { getSettingsOrUndefined } from '../settings'; + +import { isSpaceAwarenessEnabled, isSpaceAwarenessMigrationPending } from './helpers'; + +jest.mock('../app_context'); +jest.mock('../settings'); + +function mockFeatureFlag(val: boolean) { + jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ + useSpaceAwareness: val, + } as any); +} + +function mockGetSettings(settings?: Partial) { + if (settings) { + jest.mocked(getSettingsOrUndefined).mockResolvedValue(settings as any); + } else { + jest.mocked(getSettingsOrUndefined).mockResolvedValue(undefined); + } +} + +describe('isSpaceAwarenessEnabled', () => { + beforeEach(() => { + jest.mocked(appContextService.getExperimentalFeatures).mockReset(); + jest.mocked(getSettingsOrUndefined).mockReset(); + }); + it('should return false if feature flag is disabled', async () => { + mockFeatureFlag(false); + await expect(isSpaceAwarenessEnabled()).resolves.toBe(false); + }); + + it('should return false if feature flag is enabled but user did not optin', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: undefined, + }); + const res = await isSpaceAwarenessEnabled(); + + expect(res).toBe(false); + }); + + it('should return false if feature flag is enabled and settings do not exists', async () => { + mockFeatureFlag(true); + mockGetSettings(); + const res = await isSpaceAwarenessEnabled(); + + expect(res).toBe(false); + }); + + it('should return true if feature flag is enabled and user optin', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: 'success', + }); + const res = await isSpaceAwarenessEnabled(); + + expect(res).toBe(true); + }); +}); + +describe('isSpaceAwarenessMigrationPending', () => { + beforeEach(() => { + jest.mocked(appContextService.getExperimentalFeatures).mockReset(); + jest.mocked(getSettingsOrUndefined).mockReset(); + }); + it('should return false if feature flag is disabled', async () => { + mockFeatureFlag(false); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(false); + }); + + it('should return false if feature flag is enabled but user did not optin', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: undefined, + }); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(false); + }); + + it('should return false if feature flag is enabled and settings do not exists', async () => { + mockFeatureFlag(true); + mockGetSettings(); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(false); + }); + + it('should return false if feature flag is enabled and migration is complete', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: 'success', + }); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(false); + }); + + it('should return true if feature flag is enabled and migration is in progress', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: 'pending', + use_space_awareness_migration_started_at: new Date().toISOString(), + }); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(true); + }); + + it('should return false if feature flag is enabled and an old migration is in progress', async () => { + mockFeatureFlag(true); + mockGetSettings({ + use_space_awareness_migration_status: 'pending', + use_space_awareness_migration_started_at: new Date(Date.now() - 60 * 60 * 1000).toISOString(), + }); + const res = await isSpaceAwarenessMigrationPending(); + + expect(res).toBe(false); + }); +}); diff --git a/x-pack/plugins/fleet/server/services/spaces/helpers.ts b/x-pack/plugins/fleet/server/services/spaces/helpers.ts new file mode 100644 index 00000000000000..b9034acb178d24 --- /dev/null +++ b/x-pack/plugins/fleet/server/services/spaces/helpers.ts @@ -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 { appContextService } from '../app_context'; +import { getSettingsOrUndefined } from '../settings'; + +export const PENDING_MIGRATION_TIMEOUT = 60 * 60 * 1000; +/** + * Return true if user optin for the space awareness feature. + */ +export async function isSpaceAwarenessEnabled(): Promise { + if (!appContextService.getExperimentalFeatures().useSpaceAwareness) { + return false; + } + + const settings = await getSettingsOrUndefined(appContextService.getInternalUserSOClient()); + + return settings?.use_space_awareness_migration_status === 'success' ?? false; +} + +/** + * Return true if space awareness migration is currently running + */ +export async function isSpaceAwarenessMigrationPending(): Promise { + if (!appContextService.getExperimentalFeatures().useSpaceAwareness) { + return false; + } + + const settings = await getSettingsOrUndefined(appContextService.getInternalUserSOClient()); + + if ( + settings?.use_space_awareness_migration_status === 'pending' && + settings?.use_space_awareness_migration_started_at && + new Date(settings?.use_space_awareness_migration_started_at).getTime() > + Date.now() - PENDING_MIGRATION_TIMEOUT + ) { + return true; + } + return false; +} diff --git a/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.test.ts b/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.test.ts index 43713597e364a1..e9bdc4cb38e433 100644 --- a/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.test.ts +++ b/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.test.ts @@ -5,13 +5,10 @@ * 2.0. */ -import { appContextService } from '..'; - +import { isSpaceAwarenessEnabled } from './helpers'; import { addNamespaceFilteringToQuery } from './query_namespaces_filtering'; -const mockedAppContextService = appContextService as jest.Mocked; - -jest.mock('../app_context'); +jest.mock('./helpers'); describe('addNamespaceFilteringToQuery', () => { const baseActionQuery = { @@ -67,31 +64,29 @@ describe('addNamespaceFilteringToQuery', () => { }, }; - describe('with the useSpaceAwareness feature flag disabled', () => { + describe('with isSpaceAwarenessEnabled returning false', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: false, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(false); }); - it('should return the same query', () => { - expect(addNamespaceFilteringToQuery(baseActionQuery, 'mySpace')).toEqual(baseActionQuery); + it('should return the same query', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQuery, 'mySpace')).toEqual( + baseActionQuery + ); }); }); - describe('with the useSpaceAwareness feature flag enabled', () => { + describe('with isSpaceAwarenessEnabled returning true', () => { beforeEach(() => { - mockedAppContextService.getExperimentalFeatures.mockReturnValue({ - useSpaceAwareness: true, - } as any); + jest.mocked(isSpaceAwarenessEnabled).mockResolvedValue(true); }); - it('should return the same query if the current namespace is undefined', () => { - expect(addNamespaceFilteringToQuery(baseActionQuery)).toEqual(baseActionQuery); + it('should return the same query if the current namespace is undefined', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQuery)).toEqual(baseActionQuery); }); - it('should add a filter to the base action query in a custom space', () => { - expect(addNamespaceFilteringToQuery(baseActionQuery, 'mySpace')).toEqual({ + it('should add a filter to the base action query in a custom space', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQuery, 'mySpace')).toEqual({ bool: { must_not: [ { @@ -111,8 +106,8 @@ describe('addNamespaceFilteringToQuery', () => { }); }); - it('should add a filter to the base action query in a custom space if there is already filtering', () => { - expect(addNamespaceFilteringToQuery(baseActionQueryWithFilter, 'mySpace')).toEqual({ + it('should add a filter to the base action query in a custom space if there is already filtering', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQueryWithFilter, 'mySpace')).toEqual({ bool: { must_not: [ { @@ -140,8 +135,8 @@ describe('addNamespaceFilteringToQuery', () => { }); }); - it('should add a filter to the base policy query in a custom space', () => { - expect(addNamespaceFilteringToQuery(basePolicyQuery, 'mySpace')).toEqual({ + it('should add a filter to the base policy query in a custom space', async () => { + expect(await addNamespaceFilteringToQuery(basePolicyQuery, 'mySpace')).toEqual({ bool: { filter: [ { @@ -166,8 +161,8 @@ describe('addNamespaceFilteringToQuery', () => { }); }); - it('should add a filter to the base action query in the default space', () => { - expect(addNamespaceFilteringToQuery(baseActionQuery, 'default')).toEqual({ + it('should add a filter to the base action query in the default space', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQuery, 'default')).toEqual({ bool: { must_not: [ { @@ -204,8 +199,8 @@ describe('addNamespaceFilteringToQuery', () => { }); }); - it('should add a filter to the base action query in the default space if there is already filtering', () => { - expect(addNamespaceFilteringToQuery(baseActionQueryWithFilter, 'default')).toEqual({ + it('should add a filter to the base action query in the default space if there is already filtering', async () => { + expect(await addNamespaceFilteringToQuery(baseActionQueryWithFilter, 'default')).toEqual({ bool: { must_not: [ { @@ -250,8 +245,8 @@ describe('addNamespaceFilteringToQuery', () => { }); }); - it('should add a filter to the base policy query in the default space', () => { - expect(addNamespaceFilteringToQuery(basePolicyQuery, 'default')).toEqual({ + it('should add a filter to the base policy query in the default space', async () => { + expect(await addNamespaceFilteringToQuery(basePolicyQuery, 'default')).toEqual({ bool: { filter: [ { diff --git a/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.ts b/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.ts index a2c233cbcc21af..55c450c116f650 100644 --- a/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.ts +++ b/x-pack/plugins/fleet/server/services/spaces/query_namespaces_filtering.ts @@ -7,10 +7,10 @@ import { DEFAULT_NAMESPACE_STRING } from '@kbn/core-saved-objects-utils-server'; -import { appContextService } from '..'; +import { isSpaceAwarenessEnabled } from './helpers'; -export function addNamespaceFilteringToQuery(query: any, namespace?: string) { - const useSpaceAwareness = appContextService.getExperimentalFeatures()?.useSpaceAwareness; +export async function addNamespaceFilteringToQuery(query: any, namespace?: string) { + const useSpaceAwareness = await isSpaceAwarenessEnabled(); if (!useSpaceAwareness || !namespace) { return query; } diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts index aa38b54582fe55..0add093c8ce4eb 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts @@ -9,7 +9,7 @@ import { schema } from '@kbn/config-schema'; import { NewAgentPolicySchema } from '../models'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_MAPPINGS } from '../../constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, AGENT_POLICY_MAPPINGS } from '../../constants'; import { validateKuery } from '../../routes/utils/filter_utils'; @@ -27,7 +27,7 @@ export const GetAgentPoliciesRequestSchema = { validate: (value: string) => { const validationObj = validateKuery( value, - [AGENT_POLICY_SAVED_OBJECT_TYPE], + [LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE], AGENT_POLICY_MAPPINGS, true ); diff --git a/x-pack/plugins/osquery/server/lib/fleet_integration.ts b/x-pack/plugins/osquery/server/lib/fleet_integration.ts index 684334c1488b42..e94fb23e043e64 100644 --- a/x-pack/plugins/osquery/server/lib/fleet_integration.ts +++ b/x-pack/plugins/osquery/server/lib/fleet_integration.ts @@ -8,7 +8,7 @@ import type { SavedObjectReference, SavedObjectsClient } from '@kbn/core/server'; import { filter, map } from 'lodash'; import type { PostPackagePolicyPostDeleteCallback } from '@kbn/fleet-plugin/server'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import { packSavedObjectType } from '../../common/types'; import { OSQUERY_INTEGRATION_NAME } from '../../common'; @@ -25,7 +25,7 @@ export const getPackagePolicyDeleteCallback = const foundPacks = await packsClient.find({ type: packSavedObjectType, hasReference: { - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, id: deletedOsqueryManagerPolicy.policy_id, }, perPage: 1000, diff --git a/x-pack/plugins/osquery/server/lib/telemetry/helpers.ts b/x-pack/plugins/osquery/server/lib/telemetry/helpers.ts index b8e8d99ed99cad..b3aebadd83396e 100644 --- a/x-pack/plugins/osquery/server/lib/telemetry/helpers.ts +++ b/x-pack/plugins/osquery/server/lib/telemetry/helpers.ts @@ -7,7 +7,7 @@ import { filter, find, isEmpty, pick, isString } from 'lodash'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import type { PackSavedObject, SavedQuerySavedObject } from '../../common/types'; /** @@ -33,7 +33,8 @@ export const templatePacks = (packsData: PackSavedObject[]) => { name: item.name, enabled: item.enabled, queries: item.queries, - policies: (filter(item.references, ['type', AGENT_POLICY_SAVED_OBJECT_TYPE]), 'id')?.length, + policies: (filter(item.references, ['type', LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]), 'id') + ?.length, prebuilt: !!filter(item.references, ['type', 'osquery-pack-asset']) && item.version !== undefined, }, diff --git a/x-pack/plugins/osquery/server/lib/update_global_packs.ts b/x-pack/plugins/osquery/server/lib/update_global_packs.ts index 2b825fd883c9b9..fb14092441c49d 100644 --- a/x-pack/plugins/osquery/server/lib/update_global_packs.ts +++ b/x-pack/plugins/osquery/server/lib/update_global_packs.ts @@ -9,7 +9,7 @@ import type { SavedObjectsClient } from '@kbn/core/server'; import { set } from '@kbn/safer-lodash-set'; import { has, map, mapKeys } from 'lodash'; import type { NewPackagePolicy } from '@kbn/fleet-plugin/common'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import produce from 'immer'; import { convertShardsToObject } from '../routes/utils'; import { packSavedObjectType } from '../../common/types'; @@ -58,7 +58,7 @@ export const updateGlobalPacksCreateCallback = async ( ...packagePolicy.policy_ids.map((policyId) => ({ id: policyId, name: agentPolicies[policyId]?.name, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, })), ], } diff --git a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts index 31f9395d2174ea..91baee991c4e06 100644 --- a/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/create_pack_route.ts @@ -11,7 +11,7 @@ import { has, unset, some, mapKeys } from 'lodash'; import { produce } from 'immer'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, } from '@kbn/fleet-plugin/common'; import type { IRouter } from '@kbn/core/server'; @@ -112,7 +112,7 @@ export const createPackRoute = (router: IRouter, osqueryContext: OsqueryAppConte const references = policiesList.map((id) => ({ id, name: agentPoliciesIdMap[id]?.name, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, })); const packSO = await savedObjectsClient.create( diff --git a/x-pack/plugins/osquery/server/routes/pack/find_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/find_pack_route.ts index 808bb1bdbb8646..450f3ff805acba 100644 --- a/x-pack/plugins/osquery/server/routes/pack/find_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/find_pack_route.ts @@ -7,7 +7,7 @@ import { filter, map, omit } from 'lodash'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import type { IRouter } from '@kbn/core/server'; import type { FindPacksRequestQuerySchema } from '../../../common/api'; import { buildRouteValidation } from '../../utils/build_validation/route_validation'; @@ -51,7 +51,7 @@ export const findPackRoute = (router: IRouter) => { const packSavedObjects: PackResponseData[] = map(soClientResponse.saved_objects, (pack) => { const policyIds = map( - filter(pack.references, ['type', AGENT_POLICY_SAVED_OBJECT_TYPE]), + filter(pack.references, ['type', LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]), 'id' ); diff --git a/x-pack/plugins/osquery/server/routes/pack/read_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/read_pack_route.ts index d42d3f95bebac5..724deedf198459 100644 --- a/x-pack/plugins/osquery/server/routes/pack/read_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/read_pack_route.ts @@ -6,7 +6,7 @@ */ import { filter, map } from 'lodash'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common'; import type { IRouter } from '@kbn/core/server'; import type { ReadPacksRequestParamsSchema } from '../../../common/api'; import { buildRouteValidation } from '../../utils/build_validation/route_validation'; @@ -46,7 +46,10 @@ export const readPackRoute = (router: IRouter) => { const { attributes, references, id, ...rest } = await savedObjectsClient.get(packSavedObjectType, request.params.id); - const policyIds = map(filter(references, ['type', AGENT_POLICY_SAVED_OBJECT_TYPE]), 'id'); + const policyIds = map( + filter(references, ['type', LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]), + 'id' + ); const osqueryPackAssetReference = !!filter(references, ['type', 'osquery-pack-asset']); const data: ReadPackResponseData = { diff --git a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts index 0109270f539d96..451a7daf4e1d6d 100644 --- a/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts +++ b/x-pack/plugins/osquery/server/routes/pack/update_pack_route.ts @@ -11,7 +11,7 @@ import { unset, has, difference, filter, find, map, mapKeys, uniq, some, isEmpty import { produce } from 'immer'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; import { - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, PACKAGE_POLICY_SAVED_OBJECT_TYPE, } from '@kbn/fleet-plugin/common'; import type { IRouter } from '@kbn/core/server'; @@ -135,7 +135,7 @@ export const updatePackRoute = (router: IRouter, osqueryContext: OsqueryAppConte const nonAgentPolicyReferences = filter( currentPackSO.references, - (reference) => reference.type !== AGENT_POLICY_SAVED_OBJECT_TYPE + (reference) => reference.type !== LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE ); const getUpdatedReferences = () => { if (!policy_ids && isEmpty(shards)) { @@ -147,7 +147,7 @@ export const updatePackRoute = (router: IRouter, osqueryContext: OsqueryAppConte ...policiesList.map((id) => ({ id, name: agentPoliciesIdMap[id]?.name, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, })), ]; }; @@ -173,7 +173,7 @@ export const updatePackRoute = (router: IRouter, osqueryContext: OsqueryAppConte ); const currentAgentPolicyIds = map( - filter(currentPackSO.references, ['type', AGENT_POLICY_SAVED_OBJECT_TYPE]), + filter(currentPackSO.references, ['type', LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE]), 'id' ); const updatedPackSO = await savedObjectsClient.get( diff --git a/x-pack/plugins/osquery/server/routes/status/create_status_route.ts b/x-pack/plugins/osquery/server/routes/status/create_status_route.ts index 06ea214c9cf6b0..8b6f75100a3716 100644 --- a/x-pack/plugins/osquery/server/routes/status/create_status_route.ts +++ b/x-pack/plugins/osquery/server/routes/status/create_status_route.ts @@ -12,7 +12,7 @@ import { filter, reduce, mapKeys, each, unset, uniq, map, has, flatMap } from 'l import type { PackagePolicyInputStream } from '@kbn/fleet-plugin/common'; import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, } from '@kbn/fleet-plugin/common'; import type { IRouter } from '@kbn/core/server'; import { API_VERSIONS } from '../../../common/constants'; @@ -146,7 +146,7 @@ export const createStatusRoute = (router: IRouter, osqueryContext: OsqueryAppCon references: packObject.policy_ids.map((policyId: string) => ({ id: policyId, name: agentPolicies[policyId].name, - type: AGENT_POLICY_SAVED_OBJECT_TYPE, + type: LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, })), refresh: 'wait_for', } diff --git a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts index c657cc6e531195..5ad28bc37566c6 100644 --- a/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts +++ b/x-pack/plugins/security_solution/scripts/endpoint/common/fleet_services.ts @@ -29,7 +29,7 @@ import type { import { AGENT_API_ROUTES, AGENT_POLICY_API_ROUTES, - AGENT_POLICY_SAVED_OBJECT_TYPE, + LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, agentPolicyRouteService, agentRouteService, AGENTS_INDEX, @@ -850,7 +850,7 @@ export const getOrCreateDefaultAgentPolicy = async ({ policyName = DEFAULT_AGENT_POLICY_NAME, }: GetOrCreateDefaultAgentPolicyOptions): Promise => { const existingPolicy = await fetchAgentPolicyList(kbnClient, { - kuery: `${AGENT_POLICY_SAVED_OBJECT_TYPE}.name: "${policyName}"`, + kuery: `${LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE}.name: "${policyName}"`, }); if (existingPolicy.items[0]) { diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts index bb2ea455675c09..22e113f05de133 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.test.ts @@ -84,9 +84,11 @@ describe('ManifestManager', () => { const ARTIFACT_NAME_BLOCKLISTS_LINUX = 'endpoint-blocklist-linux-v1'; const getMockPolicyFetchAllItemIds = (items: string[]) => - jest.fn(async function* () { - yield items; - }); + jest.fn(async () => + jest.fn(async function* () { + yield items; + })() + ); let ARTIFACTS: InternalArtifactCompleteSchema[] = []; let ARTIFACTS_BY_ID: { [K: string]: InternalArtifactCompleteSchema } = {}; @@ -1265,9 +1267,11 @@ describe('ManifestManager', () => { describe('tryDispatch', () => { const getMockPolicyFetchAllItems = (items: PackagePolicy[]) => - jest.fn(async function* () { - yield items; - }); + jest.fn(async () => + jest.fn(async function* () { + yield items; + })() + ); test(`Should not dispatch if no policies`, async () => { const context = buildManifestManagerContextMock({}); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts index f10dbb1ab3a50b..63a2b56cb85257 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/artifacts/manifest_manager/manifest_manager.ts @@ -686,7 +686,7 @@ export class ManifestManager { }, }); - for await (const policies of this.fetchAllPolicies()) { + for await (const policies of await this.fetchAllPolicies()) { for (const packagePolicy of policies) { const { id, name } = packagePolicy; @@ -768,7 +768,7 @@ export class ManifestManager { } } - private fetchAllPolicies(): AsyncIterable { + private fetchAllPolicies(): Promise> { return this.packagePolicyService.fetchAllItems(this.savedObjectsClient, { kuery: 'ingest-package-policies.package.name:endpoint', }); @@ -776,7 +776,7 @@ export class ManifestManager { private async listEndpointPolicyIds(): Promise { const allPolicyIds: string[] = []; - const idFetcher = this.packagePolicyService.fetchAllItemIds(this.savedObjectsClient, { + const idFetcher = await this.packagePolicyService.fetchAllItemIds(this.savedObjectsClient, { kuery: 'ingest-package-policies.package.name:endpoint', }); diff --git a/x-pack/plugins/security_solution/server/integration_tests/lib/telemetry_helpers.ts b/x-pack/plugins/security_solution/server/integration_tests/lib/telemetry_helpers.ts index 2daf8c732002bf..2e8820dedd52ef 100644 --- a/x-pack/plugins/security_solution/server/integration_tests/lib/telemetry_helpers.ts +++ b/x-pack/plugins/security_solution/server/integration_tests/lib/telemetry_helpers.ts @@ -23,7 +23,7 @@ import { deleteExceptionList, deleteExceptionListItem, } from '@kbn/lists-plugin/server/services/exception_lists'; -import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common/constants'; +import { LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE } from '@kbn/fleet-plugin/common/constants'; import { packagePolicyService } from '@kbn/fleet-plugin/server/services'; @@ -282,7 +282,7 @@ export async function createAgentPolicy( ], }; - await soClient.create(AGENT_POLICY_SAVED_OBJECT_TYPE, {}, { id }).catch(() => {}); + await soClient.create(LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE, {}, { id }).catch(() => {}); await packagePolicyService .create(soClient, esClient, packagePolicy, { id, diff --git a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts index b860a774ba1220..b830373e7dbbd3 100644 --- a/x-pack/test/fleet_api_integration/apis/outputs/crud.ts +++ b/x-pack/test/fleet_api_integration/apis/outputs/crud.ts @@ -49,13 +49,13 @@ export default function (providerContext: FtrProviderContext) { const enableOutputSecrets = async () => { try { - await kibanaServer.savedObjects.update({ + await kibanaServer.savedObjects.create({ type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, id: 'fleet-default-settings', attributes: { output_secret_storage_requirements_met: true, }, - overwrite: false, + overwrite: true, }); } catch (e) { throw e; @@ -64,13 +64,13 @@ export default function (providerContext: FtrProviderContext) { const disableOutputSecrets = async () => { try { - await kibanaServer.savedObjects.update({ + await kibanaServer.savedObjects.create({ type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, id: 'fleet-default-settings', attributes: { output_secret_storage_requirements_met: false, }, - overwrite: false, + overwrite: true, }); } catch (e) { throw e; diff --git a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts index d8e641b7af0a5e..86e32ca5674139 100644 --- a/x-pack/test/fleet_api_integration/apis/policy_secrets.ts +++ b/x-pack/test/fleet_api_integration/apis/policy_secrets.ts @@ -169,13 +169,13 @@ export default function (providerContext: FtrProviderContext) { // Reset the global settings object to disable secrets between tests. // Each test can re-run setup as part of its setup if it needs to enable secrets - await kibanaServer.savedObjects.update({ + await kibanaServer.savedObjects.create({ type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, id: 'fleet-default-settings', attributes: { secret_storage_requirements_met: false, }, - overwrite: false, + overwrite: true, }); }; diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/actions.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/actions.ts index efd73ddb54b0f2..4f458cd7190cc8 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/actions.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/actions.ts @@ -56,6 +56,8 @@ export default function (providerContext: FtrProviderContext) { let testSpaceAgent2: string; before(async () => { + await apiClient.postEnableSpaceAwareness(); + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ apiClient.createAgentPolicy(), apiClient.createAgentPolicy(TEST_SPACE_1), diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts index 7ab4e86448bde6..74bd3aa0871f3d 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/agent_policies.ts @@ -44,6 +44,8 @@ export default function (providerContext: FtrProviderContext) { let spaceTest1Policy1: CreateAgentPolicyResponse; let spaceTest1Policy2: CreateAgentPolicyResponse; before(async () => { + await apiClient.postEnableSpaceAwareness(); + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ apiClient.createAgentPolicy(), apiClient.createAgentPolicy(TEST_SPACE_1), diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts index 047d32a8545116..b4f7241dec0fb6 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/agents.ts @@ -50,6 +50,8 @@ export default function (providerContext: FtrProviderContext) { let testSpaceAgent2: string; before(async () => { + await apiClient.postEnableSpaceAwareness(); + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ apiClient.createAgentPolicy(), apiClient.createAgentPolicy(TEST_SPACE_1), diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts index 11fd693d9340b4..b3879dd780e25a 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/api_helper.ts @@ -15,6 +15,7 @@ import { GetAgentsResponse, GetOneAgentPolicyResponse, GetOneAgentResponse, + GetPackagePoliciesResponse, } from '@kbn/fleet-plugin/common'; import { GetEnrollmentAPIKeysResponse, @@ -48,6 +49,7 @@ export class SpaceTestApiClient { return res; } + // Agent policies async createAgentPolicy( spaceId?: string, @@ -79,6 +81,14 @@ export class SpaceTestApiClient { return res; } + + async getPackagePolicies(spaceId?: string): Promise { + const { body: res } = await this.supertest + .get(`${this.getBaseUrl(spaceId)}/api/fleet/package_policies`) + .expect(200); + + return res; + } async createFleetServerPolicy(spaceId?: string): Promise { const { body: res } = await this.supertest .post(`${this.getBaseUrl(spaceId)}/api/fleet/agent_policies`) @@ -322,4 +332,13 @@ export class SpaceTestApiClient { return res; } + // Enable space awareness + async postEnableSpaceAwareness(spaceId?: string): Promise { + const { body: res } = await this.supertest + .post(`${this.getBaseUrl(spaceId)}/internal/fleet/enable_space_awareness`) + .set('kbn-xsrf', 'xxxx') + .set('elastic-api-version', '1'); + + return res; + } } diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts index 13238acb3917cf..c14e7336fedda7 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_api_keys.ts @@ -49,6 +49,8 @@ export default function (providerContext: FtrProviderContext) { let spaceTest1EnrollmentKey1: EnrollmentAPIKey; // Create agent policies it should create a enrollment key for every keys before(async () => { + await apiClient.postEnableSpaceAwareness(); + const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ apiClient.createAgentPolicy(), apiClient.createAgentPolicy(TEST_SPACE_1), diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_settings.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_settings.ts index af648ec765971d..b05e090efccf11 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_settings.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/enrollment_settings.ts @@ -42,6 +42,7 @@ export default function (providerContext: FtrProviderContext) { setupTestSpaces(providerContext); before(async () => { + await apiClient.postEnableSpaceAwareness(); await apiClient.setup(); }); @@ -78,6 +79,7 @@ export default function (providerContext: FtrProviderContext) { setupTestSpaces(providerContext); before(async () => { + await apiClient.postEnableSpaceAwareness(); await apiClient.setup(); const testSpaceFleetServerPolicy = await apiClient.createFleetServerPolicy(TEST_SPACE_1); await createFleetAgent(esClient, testSpaceFleetServerPolicy.item.id, TEST_SPACE_1); @@ -116,6 +118,7 @@ export default function (providerContext: FtrProviderContext) { setupTestSpaces(providerContext); before(async () => { + await apiClient.postEnableSpaceAwareness(); await apiClient.setup(); const defaultFleetServerPolicy = await apiClient.createFleetServerPolicy(); await createFleetAgent(esClient, defaultFleetServerPolicy.item.id); diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/index.js b/x-pack/test/fleet_api_integration/apis/space_awareness/index.js index c6845043727367..8025d5c8108242 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/index.js +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/index.js @@ -15,5 +15,6 @@ export default function loadTests({ loadTestFile }) { loadTestFile(require.resolve('./package_install')); loadTestFile(require.resolve('./space_settings')); loadTestFile(require.resolve('./actions')); + loadTestFile(require.resolve('./space_awareness_migration')); }); } diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts new file mode 100644 index 00000000000000..6d780a600496f8 --- /dev/null +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/space_awareness_migration.ts @@ -0,0 +1,140 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 '../../../api_integration/ftr_provider_context'; +import { skipIfNoDockerRegistry } from '../../helpers'; +import { SpaceTestApiClient } from './api_helper'; +import { cleanFleetIndices } from './helpers'; +import { setupTestSpaces, TEST_SPACE_1 } from './space_helpers'; + +export default function (providerContext: FtrProviderContext) { + const { getService } = providerContext; + const supertest = getService('supertest'); + const esClient = getService('es'); + const kibanaServer = getService('kibanaServer'); + + describe('space awareness migration', async function () { + skipIfNoDockerRegistry(providerContext); + const apiClient = new SpaceTestApiClient(supertest); + + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + after(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.savedObjects.cleanStandardList({ + space: TEST_SPACE_1, + }); + await cleanFleetIndices(esClient); + }); + + setupTestSpaces(providerContext); + + // Create agent policies it should create a enrollment key for every keys + before(async () => { + const [defaultSpacePolicy1, spaceTest1Policy1] = await Promise.all([ + apiClient.createAgentPolicy(), + apiClient.createAgentPolicy(TEST_SPACE_1), + apiClient.createAgentPolicy(TEST_SPACE_1), + ]); + + await apiClient.installPackage({ + pkgName: 'nginx', + pkgVersion: '1.20.0', + force: true, // To avoid package verification + }); + + await apiClient.createPackagePolicy(undefined, { + policy_ids: [defaultSpacePolicy1.item.id], + name: `test-nginx-1-${Date.now()}`, + description: 'test', + package: { + name: 'nginx', + version: '1.20.0', + }, + inputs: {}, + }); + + await apiClient.createPackagePolicy(TEST_SPACE_1, { + policy_ids: [spaceTest1Policy1.item.id], + name: `test-nginx-2-${Date.now()}`, + description: 'test', + package: { + name: 'nginx', + version: '1.20.0', + }, + inputs: {}, + }); + }); + + describe('without opt-in', () => { + it('agent policies should not be space aware', async () => { + const policiesDefaultSpaceIds = (await apiClient.getAgentPolicies()).items + .map(({ id }) => id) + .sort(); + + const policiesTestSpaceIds = (await apiClient.getAgentPolicies(TEST_SPACE_1)).items + .map(({ id }) => id) + .sort(); + + expect(policiesDefaultSpaceIds.length).to.eql(3); + expect(policiesDefaultSpaceIds).to.eql(policiesTestSpaceIds); + }); + + it('package policies should not be space aware', async () => { + const policiesDefaultSpaceIds = (await apiClient.getPackagePolicies()).items + .map(({ id }) => id) + .sort(); + + const policiesTestSpaceIds = (await apiClient.getPackagePolicies(TEST_SPACE_1)).items + .map(({ id }) => id) + .sort(); + + expect(policiesDefaultSpaceIds.length).to.eql(2); + expect(policiesDefaultSpaceIds).to.eql(policiesTestSpaceIds); + }); + }); + + describe('with space awareness opt-in', () => { + before(async () => { + await apiClient.postEnableSpaceAwareness(); + }); + + it('agent policies should be migrated to the default space', async () => { + const policiesDefaultSpaceIds = (await apiClient.getAgentPolicies()).items + .map(({ id }) => id) + .sort(); + + const policiesTestSpaceIds = (await apiClient.getAgentPolicies(TEST_SPACE_1)).items + .map(({ id }) => id) + .sort(); + + expect(policiesDefaultSpaceIds.length).to.eql(3); + expect(policiesTestSpaceIds.length).to.eql(0); + }); + + it('package policies should be migrated to the default space', async () => { + const policiesDefaultSpaceIds = (await apiClient.getPackagePolicies()).items + .map(({ id }) => id) + .sort(); + + const policiesTestSpaceIds = (await apiClient.getPackagePolicies(TEST_SPACE_1)).items + .map(({ id }) => id) + .sort(); + + expect(policiesDefaultSpaceIds.length).to.eql(2); + expect(policiesTestSpaceIds.length).to.eql(0); + }); + }); + }); +} diff --git a/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts b/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts index 12bbc8bec3b372..b79afac99292b8 100644 --- a/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts +++ b/x-pack/test/fleet_api_integration/apis/space_awareness/uninstall_tokens.ts @@ -48,6 +48,7 @@ export default function (providerContext: FtrProviderContext) { let spaceTest1Token: UninstallTokenMetadata; // Create agent policies it should create am uninstall token for every keys before(async () => { + await apiClient.postEnableSpaceAwareness(); const [_defaultSpacePolicy1, _spaceTest1Policy1, _spaceTest1Policy2] = await Promise.all([ apiClient.createAgentPolicy(), apiClient.createAgentPolicy(TEST_SPACE_1), diff --git a/x-pack/test/fleet_api_integration/helpers.ts b/x-pack/test/fleet_api_integration/helpers.ts index 6144e17327b2a5..6ae7845522733c 100644 --- a/x-pack/test/fleet_api_integration/helpers.ts +++ b/x-pack/test/fleet_api_integration/helpers.ts @@ -143,14 +143,30 @@ export function setPrereleaseSetting(supertest: SuperTestAgent) { } export async function enableSecrets(providerContext: FtrProviderContext) { - await providerContext.getService('kibanaServer').savedObjects.update({ - type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, - id: 'fleet-default-settings', - attributes: { - secret_storage_requirements_met: true, - }, - overwrite: false, - }); + const settingsSO = await providerContext + .getService('kibanaServer') + .savedObjects.get({ type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, id: 'fleet-default-settings' }) + .catch((err) => {}); + + if (settingsSO) { + await providerContext.getService('kibanaServer').savedObjects.update({ + type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, + id: 'fleet-default-settings', + attributes: { + secret_storage_requirements_met: true, + }, + overwrite: false, + }); + } else { + await providerContext.getService('kibanaServer').savedObjects.create({ + type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, + id: 'fleet-default-settings', + attributes: { + secret_storage_requirements_met: true, + }, + overwrite: true, + }); + } } export const generateNAgentPolicies = async ( From 0ecdd148af7ee8c18eb0e8e2e74788149135777f Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:06:11 -0500 Subject: [PATCH 65/92] Update dependency terser to ^5.31.4 (main) (#190548) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [terser](https://terser.org) ([source](https://togithub.com/terser/terser)) | devDependencies | patch | [`^5.31.3` -> `^5.31.4`](https://renovatebot.com/diffs/npm/terser/5.31.3/5.31.4) | `5.31.6` (+1) | --- ### Release Notes
terser/terser (terser) ### [`v5.31.4`](https://togithub.com/terser/terser/blob/HEAD/CHANGELOG.md#v5314-reverted) [Compare Source](https://togithub.com/terser/terser/compare/v5.31.3...v5.31.4) - drop_unused: drop classes which only have side effects in the `extends` part
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). --------- Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Co-authored-by: Jonathan Budzenski --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6a4cb58c50f574..635fb90eddcd83 100644 --- a/package.json +++ b/package.json @@ -1766,7 +1766,7 @@ "svgo": "^2.8.0", "table": "^6.8.1", "tape": "^5.0.1", - "terser": "^5.31.3", + "terser": "^5.31.4", "terser-webpack-plugin": "^4.2.3", "tough-cookie": "^4.1.4", "tree-kill": "^1.2.2", diff --git a/yarn.lock b/yarn.lock index d70da04a9070f1..0276237a1e994e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30182,10 +30182,10 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.26.0, terser@^5.3.4, terser@^5.31.3, terser@^5.9.0: - version "5.31.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38" - integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA== +terser@^5.26.0, terser@^5.3.4, terser@^5.31.4, terser@^5.9.0: + version "5.31.6" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.6.tgz#c63858a0f0703988d0266a82fcbf2d7ba76422b1" + integrity sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" From 1ed50e6cb469a48e0e2ee1b84ec444d0bb116a8d Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 14 Aug 2024 17:10:53 -0500 Subject: [PATCH 66/92] [build] Update node cleanup paths (#190512) Prior to introducing node variants, we were cleaning up unused files included with Node.js. The node paths changed, and the cleanup paths were not. This fixes the issue. ## Testing `$KIBANA_HOME/node/*` should be cleaned of unused files, see the patterns in the diff for exact files. --- src/dev/build/tasks/nodejs/clean_node_builds_task.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/dev/build/tasks/nodejs/clean_node_builds_task.ts b/src/dev/build/tasks/nodejs/clean_node_builds_task.ts index 6498efdcce19f5..1b4a8475c7dccf 100644 --- a/src/dev/build/tasks/nodejs/clean_node_builds_task.ts +++ b/src/dev/build/tasks/nodejs/clean_node_builds_task.ts @@ -15,12 +15,12 @@ export const CleanNodeBuilds: Task = { for (const platform of config.getTargetPlatforms()) { await deleteAll( [ - build.resolvePathForPlatform(platform, '*/node/lib/node_modules'), - build.resolvePathForPlatform(platform, '*/node/bin/npm'), - build.resolvePathForPlatform(platform, '*/node/bin/npx'), - build.resolvePathForPlatform(platform, '*/node/bin/corepack'), - build.resolvePathForPlatform(platform, '*/node/CHANGELOG.md'), - build.resolvePathForPlatform(platform, '*/node/README.md'), + build.resolvePathForPlatform(platform, 'node/*/lib/node_modules'), + build.resolvePathForPlatform(platform, 'node/*/bin/npm'), + build.resolvePathForPlatform(platform, 'node/*/bin/npx'), + build.resolvePathForPlatform(platform, 'node/*/bin/corepack'), + build.resolvePathForPlatform(platform, 'node/*/CHANGELOG.md'), + build.resolvePathForPlatform(platform, 'node/*/README.md'), ], log ); From ec196ce91c5c135e958a5567970349e435604d5f Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:15:05 -0500 Subject: [PATCH 67/92] Update sergeysova/jq-action action to v2.3.0 (main) (#190552) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [sergeysova/jq-action](https://togithub.com/sergeysova/jq-action) | action | minor | `v2` -> `v2.3.0` | --- ### Release Notes
sergeysova/jq-action (sergeysova/jq-action) ### [`v2.3.0`](https://togithub.com/sergeysova/jq-action/releases/tag/v2.3.0) [Compare Source](https://togithub.com/sergeysova/jq-action/compare/v2.2.1...v2.3.0) ##### What's Changed - Use $GITHUB_OUTPUT instead of set-output by [@​satoryu](https://togithub.com/satoryu) in [https://github.com/sergeysova/jq-action/pull/9](https://togithub.com/sergeysova/jq-action/pull/9) ##### New Contributors - [@​satoryu](https://togithub.com/satoryu) made their first contribution in [https://github.com/sergeysova/jq-action/pull/9](https://togithub.com/sergeysova/jq-action/pull/9) **Full Changelog**: https://github.com/sergeysova/jq-action/compare/v2...v2.3.0 ### [`v2.2.1`](https://togithub.com/sergeysova/jq-action/releases/tag/v2.2.1) [Compare Source](https://togithub.com/sergeysova/jq-action/compare/v2.2.0...v2.2.1) ##### What's Changed - Fix globbing in input by [@​norman-zon](https://togithub.com/norman-zon) in [https://github.com/sergeysova/jq-action/pull/7](https://togithub.com/sergeysova/jq-action/pull/7) ##### New Contributors - [@​norman-zon](https://togithub.com/norman-zon) made their first contribution in [https://github.com/sergeysova/jq-action/pull/7](https://togithub.com/sergeysova/jq-action/pull/7) **Full Changelog**: https://github.com/sergeysova/jq-action/compare/v2.2.0...v2.2.1 ### [`v2.2.0`](https://togithub.com/sergeysova/jq-action/releases/tag/v2.2.0) [Compare Source](https://togithub.com/sergeysova/jq-action/compare/v2.1.0...v2.2.0) ##### What's Changed - fix: use correct multiline output by [@​kennethkalmer](https://togithub.com/kennethkalmer) in [https://github.com/sergeysova/jq-action/pull/5](https://togithub.com/sergeysova/jq-action/pull/5) ##### New Contributors - [@​kennethkalmer](https://togithub.com/kennethkalmer) made their first contribution in [https://github.com/sergeysova/jq-action/pull/5](https://togithub.com/sergeysova/jq-action/pull/5) **Full Changelog**: https://github.com/sergeysova/jq-action/compare/v2.1.0...v2.2.0 ### [`v2.1.0`](https://togithub.com/sergeysova/jq-action/releases/tag/v2.1.0) [Compare Source](https://togithub.com/sergeysova/jq-action/compare/v2...v2.1.0) Added support for multiline `run` [https://github.com/sergeysova/jq-action/pull/3](https://togithub.com/sergeysova/jq-action/pull/3)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). Co-authored-by: elastic-renovate-prod[bot] <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> --- .github/workflows/label-qa-fixed-in.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/label-qa-fixed-in.yml b/.github/workflows/label-qa-fixed-in.yml index 99803c2c4e8800..ed2dcced8e724d 100644 --- a/.github/workflows/label-qa-fixed-in.yml +++ b/.github/workflows/label-qa-fixed-in.yml @@ -46,7 +46,7 @@ jobs: prnumber: ${{ github.event.number }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: sergeysova/jq-action@v2 + - uses: sergeysova/jq-action@a3f0d4ff59cc1dddf023fc0b325dd75b10deec58 # v2.3.0 id: issues_to_label with: # Map to the issues' node id @@ -54,7 +54,7 @@ jobs: multiline: true env: CLOSING_ISSUES: ${{ steps.closing_issues.outputs.data }} - - uses: sergeysova/jq-action@v2 + - uses: sergeysova/jq-action@a3f0d4ff59cc1dddf023fc0b325dd75b10deec58 # v2.3.0 id: label_ids with: # Get list of version labels on pull request and map to label's node id, append 'QA:Ready For Testing' id ("MDU6TGFiZWwyNTQ1NjcwOTI4") From c42eec3886008246323c1a18085db3af2c50cebf Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Wed, 14 Aug 2024 16:26:51 -0600 Subject: [PATCH 68/92] [EEM] Add basic integration test (#190097) ## Summary This PR adds some basic integration tests. I also had to modify the Entity schemas to allow for parsing the dynamic metadata fields. I don't love the type solution and would ideally like to have something like: ```typescript const entitySchema = createEntitySchemaFromDefintion(entityDefinintion); ``` which would dynamically generate an entity schema from the definition based on the identity and metadata fields. I have a prototype that sort of works but still needs a lot of work and started to become a huge "time suck". Closes [139](https://github.com/elastic/elastic-entity-model/issues/139) --- .../src/schema/entity.test.ts | 76 +++++++++++++++++++ .../kbn-entities-schema/src/schema/entity.ts | 52 ++++++++----- .../server/lib/entities/delete_index.ts | 6 +- .../helpers/alerting_wait_for_helpers.ts | 13 +++- .../apis/entity_manager/definitions.ts | 56 ++++++++++++++ .../apis/entity_manager/helpers/request.ts | 3 +- 6 files changed, 184 insertions(+), 22 deletions(-) create mode 100644 x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts b/x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts new file mode 100644 index 00000000000000..c8ef7163713387 --- /dev/null +++ b/x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { entityLatestSchema, entityMetadataSchema } from './entity'; + +const entity = { + entity: { + lastSeenTimestamp: '2024-08-06T17:03:50.722Z', + schemaVersion: 'v1', + definitionVersion: '999.999.999', + displayName: 'message_processor', + identityFields: ['log.logger', 'event.category'], + id: '6UHVPiduEC2qk6rMjs1Jzg==', + metrics: { + logRate: 100, + errorRate: 0, + }, + type: 'service', + firstSeenTimestamp: '2024-08-06T16:50:00.000Z', + definitionId: 'admin-console-services', + }, +}; + +const metadata = { + host: { + os: { + name: [], + }, + name: [ + 'message_processor.prod.002', + 'message_processor.prod.001', + 'message_processor.prod.010', + 'message_processor.prod.006', + 'message_processor.prod.005', + 'message_processor.prod.004', + 'message_processor.prod.003', + 'message_processor.prod.009', + 'message_processor.prod.008', + 'message_processor.prod.007', + ], + }, + event: { + ingested: '2024-08-06T17:06:24.444700Z', + category: '', + }, + sourceIndex: ['kbn-data-forge-fake_stack.message_processor-2024-08-01'], + log: { + logger: 'message_processor', + }, + tags: ['infra:message_processor'], +}; + +describe('Entity Schemas', () => { + describe('entityMetadataSchema', () => { + it('should parse metadata object', () => { + const results = entityMetadataSchema.safeParse(metadata); + expect(results).toHaveProperty('success', true); + }); + }); + + describe('entitySummarySchema', () => { + it('should parse an entity with metadata', () => { + const doc = { + ...entity, + ...metadata, + }; + + const result = entityLatestSchema.safeParse(doc); + expect(result).toHaveProperty('success', true); + }); + }); +}); diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity.ts b/x-pack/packages/kbn-entities-schema/src/schema/entity.ts index 58a9c011091b48..44d08325e9b9f0 100644 --- a/x-pack/packages/kbn-entities-schema/src/schema/entity.ts +++ b/x-pack/packages/kbn-entities-schema/src/schema/entity.ts @@ -8,24 +8,42 @@ import { z } from 'zod'; import { arrayOfStringsSchema } from './common'; -const entitySchema = z.object({ - entity: z.object({ - id: z.string(), - identityFields: arrayOfStringsSchema, - displayName: z.string(), - metrics: z.record(z.string(), z.number()), - }), +export const entityBaseSchema = z.object({ + id: z.string(), + type: z.string(), + identityFields: arrayOfStringsSchema, + displayName: z.string(), + metrics: z.record(z.string(), z.number()), + definitionVersion: z.string(), + schemaVersion: z.string(), + definitionId: z.string(), }); -export const entitySummarySchema = z.intersection( - entitySchema.extend({ - lastSeenTimestamp: z.string(), - firstSeenTimestamp: z.string(), - }), - z.record(z.string(), z.string().or(z.number())) -); +export interface MetadataRecord { + [key: string]: string[] | MetadataRecord | string; +} -export const entityHistorySchema = z.intersection( - entitySchema.extend({ ['@timestamp']: z.string() }), - z.record(z.string(), z.string().or(z.number())) +const literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]); +type Literal = z.infer; +type Metadata = Literal | { [key: string]: Metadata } | Metadata[]; +export const entityMetadataSchema: z.ZodType = z.lazy(() => + z.union([literalSchema, z.array(entityMetadataSchema), z.record(entityMetadataSchema)]) ); + +export const entityLatestSchema = z + .object({ + entity: entityBaseSchema.merge( + z.object({ + lastSeenTimestamp: z.string(), + firstSeenTimestamp: z.string(), + }) + ), + }) + .and(entityMetadataSchema); + +export const entityHistorySchema = z + .object({ + '@timestamp': z.string(), + entity: entityBaseSchema, + }) + .and(entityMetadataSchema); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_index.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_index.ts index 985ca9f3c7a723..433b6e392c27e4 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_index.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_index.ts @@ -15,8 +15,12 @@ export async function deleteIndices( logger: Logger ) { try { + const { indices: historyIndices } = await esClient.indices.resolveIndex({ + name: `${generateHistoryIndexName(definition)}.*`, + expand_wildcards: 'all', + }); const indices = [ - `${generateHistoryIndexName(definition)}.*`, + ...historyIndices.map(({ name }) => name), generateLatestIndexName(definition), ]; await esClient.indices.delete({ index: indices, ignore_unavailable: true }); diff --git a/x-pack/test/alerting_api_integration/observability/helpers/alerting_wait_for_helpers.ts b/x-pack/test/alerting_api_integration/observability/helpers/alerting_wait_for_helpers.ts index 0d04939dbb3417..861c59dbf2b7a9 100644 --- a/x-pack/test/alerting_api_integration/observability/helpers/alerting_wait_for_helpers.ts +++ b/x-pack/test/alerting_api_integration/observability/helpers/alerting_wait_for_helpers.ts @@ -60,12 +60,18 @@ export async function waitForDocumentInIndex({ docCountTarget = 1, retryService, logger, + timeout = TIMEOUT, + retries = RETRIES, + retryDelay = RETRY_DELAY, }: { esClient: Client; indexName: string; docCountTarget?: number; retryService: RetryService; logger: ToolingLog; + timeout?: number; + retries?: number; + retryDelay?: number; }): Promise>> { return await retry>>({ test: async () => { @@ -75,6 +81,7 @@ export async function waitForDocumentInIndex({ ignore_unavailable: true, }); if (!response.hits.total || (response.hits.total as number) < docCountTarget) { + logger.debug(`Document count is ${response.hits.total}, should be ${docCountTarget}`); throw new Error( `Number of hits does not match expectation (total: ${response.hits.total}, target: ${docCountTarget})` ); @@ -85,9 +92,9 @@ export async function waitForDocumentInIndex({ utilityName: `waiting for documents in ${indexName} index`, logger, retryService, - timeout: TIMEOUT, - retries: RETRIES, - retryDelay: RETRY_DELAY, + timeout, + retries, + retryDelay, }); } diff --git a/x-pack/test/api_integration/apis/entity_manager/definitions.ts b/x-pack/test/api_integration/apis/entity_manager/definitions.ts index 4f1ff81bbfe6e1..0b901b1d6efbcb 100644 --- a/x-pack/test/api_integration/apis/entity_manager/definitions.ts +++ b/x-pack/test/api_integration/apis/entity_manager/definitions.ts @@ -6,15 +6,23 @@ */ import expect from '@kbn/expect'; +import { entityLatestSchema } from '@kbn/entities-schema'; import { entityDefinition as mockDefinition, entityDefinitionWithBackfill as mockBackfillDefinition, } from '@kbn/entityManager-plugin/server/lib/entities/helpers/fixtures'; +import { PartialConfig, cleanup, generate } from '@kbn/data-forge'; +import { generateLatestIndexName } from '@kbn/entityManager-plugin/server/lib/entities/helpers/generate_component_id'; import { FtrProviderContext } from '../../ftr_provider_context'; import { installDefinition, uninstallDefinition, getInstalledDefinitions } from './helpers/request'; +import { waitForDocumentInIndex } from '../../../alerting_api_integration/observability/helpers/alerting_wait_for_helpers'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); + const logger = getService('log'); + const esClient = getService('es'); + const retryService = getService('retry'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('Entity definitions', () => { describe('definitions installations', () => { @@ -56,5 +64,53 @@ export default function ({ getService }: FtrProviderContext) { await uninstallDefinition(supertest, mockDefinition.id); }); }); + describe('entity data', () => { + let dataForgeConfig: PartialConfig; + let dataForgeIndices: string[]; + + before(async () => { + dataForgeConfig = { + indexing: { + dataset: 'fake_stack', + eventsPerCycle: 100, + interval: 60_000, + }, + schedule: [ + { + template: 'good', + start: 'now-15m', + end: 'now+5m', + }, + ], + }; + dataForgeIndices = await generate({ client: esClient, config: dataForgeConfig, logger }); + await waitForDocumentInIndex({ + esClient, + indexName: 'kbn-data-forge-fake_stack.admin-console-*', + docCountTarget: 2020, + retryService, + logger, + }); + }); + + after(async () => { + await esDeleteAllIndices(dataForgeIndices); + await uninstallDefinition(supertest, mockDefinition.id, true); + await cleanup({ client: esClient, config: dataForgeConfig, logger }); + }); + + it('should create the proper entities in the latest index', async () => { + await installDefinition(supertest, mockDefinition); + const sample = await waitForDocumentInIndex({ + esClient, + indexName: generateLatestIndexName(mockDefinition), + docCountTarget: 5, + retryService, + logger, + }); + const parsedSample = entityLatestSchema.safeParse(sample.hits.hits[0]._source); + expect(parsedSample.success).to.be(true); + }); + }); }); } diff --git a/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts b/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts index 14b083282ff40d..8c4eaaee7e3b6c 100644 --- a/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts +++ b/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts @@ -39,9 +39,10 @@ export const installDefinition = async ( .expect(200); }; -export const uninstallDefinition = (supertest: Agent, id: string) => { +export const uninstallDefinition = (supertest: Agent, id: string, deleteData = false) => { return supertest .delete(`/internal/entities/definition/${id}`) + .query({ deleteData }) .set('kbn-xsrf', 'xxx') .send() .expect(200); From 2f558b2497165e9bbd71a75fbaa2175c7cd8e03f Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Thu, 15 Aug 2024 05:58:56 +0300 Subject: [PATCH 69/92] fix: [A11y] [VPAT] 3.2.2 On Input - Keyboard focus advances when acting on 'expand' button (#190403) Closes: https://github.com/elastic/search-team/issues/7628 ### Steps to Reproduce: 1. Create a Search project and go to the Search project homepage (ex: https://my-elasticsearch-project-eca3d1.kb.eu-west-1.aws.qa.elastic.cloud/app/elasticsearch). 2. Using keyboard navigation, advance keyboard focus to 'Console' button at the bottom of the page. 3. Hit Enter to expand 'Console' section. ### Issue: When expanded, keyboard focus moves into the editable field instead of remaining on the expand/collapse function. ### What was changed?: 1. The `monaco_editor_actions_provider.ts` component was taking focus during initialization. While the reason for this behavior isn't entirely clear, we should try to prevent this from happening. ## Screen: https://github.com/user-attachments/assets/c0f55fbf-1922-4f7f-a10e-31890c302027 --- .../containers/editor/monaco/monaco_editor_actions_provider.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts index 2a89147b0de292..9774864829f72d 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor_actions_provider.ts @@ -59,7 +59,6 @@ export class MonacoEditorActionsProvider { ) { this.parsedRequestsProvider = getParsedRequestsProvider(this.editor.getModel()); this.highlightedLines = this.editor.createDecorationsCollection(); - this.editor.focus(); const debouncedHighlightRequests = debounce( () => this.highlightRequests(), From 6738bdc12eaf9657d537d227b5fc4d8760d00d66 Mon Sep 17 00:00:00 2001 From: Catherine Liu Date: Wed, 14 Aug 2024 21:47:57 -0700 Subject: [PATCH 70/92] [Dashboard] Use panel actions service for testing panels (#190102) ## Summary Pre-req for #182535. This refactors functional tests that interact with panel actions to use the `DashboardPanelActions` service instead of directly clicking the actions via test subjects. This will reduce the maintenance required to fix failing tests when we change the UX for the panel actions context menu. ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### Risk Matrix Delete this section if it is not applicable to this PR. Before closing this PR, invite QA, stakeholders, and other developers to identify risks that should be tested prior to the change/feature release. When forming the risk matrix, consider some of the following examples and how they may potentially impact the change: | Risk | Probability | Severity | Mitigation/Notes | |---------------------------|-------------|----------|-------------------------| | Multiple Spaces—unexpected behavior in non-default Kibana Space. | Low | High | Integration tests will verify that all features are still supported in non-default Kibana Space and when user switches between spaces. | | Multiple nodes—Elasticsearch polling might have race conditions when multiple Kibana nodes are polling for the same tasks. | High | Low | Tasks are idempotent, so executing them multiple times will not result in logical error, but will degrade performance. To test for this case we add plenty of unit tests around this logic and document manual testing procedure. | | Code should gracefully handle cases when feature X or plugin Y are disabled. | Medium | High | Unit tests will verify that any feature flag or plugin combination still results in our service operational. | | [See more potential risk examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) | ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../group1/edit_embeddable_redirects.ts | 6 +- .../dashboard/group1/edit_visualizations.js | 2 - .../dashboard/group2/dashboard_filtering.ts | 3 - .../apps/dashboard/group2/full_screen_mode.ts | 1 - .../dashboard/group2/panel_expand_toggle.ts | 3 - .../apps/dashboard/group3/copy_panel_to.ts | 4 +- .../dashboard/group3/panel_context_menu.ts | 3 - .../group5/data_shared_attributes.ts | 3 +- .../group5/saved_search_embeddable.ts | 11 +- .../dashboard/group6/dashboard_snapshots.ts | 2 - .../image_embeddable/image_embeddable.ts | 3 - .../links/links_create_edit.ts | 3 - .../services/dashboard/panel_actions.ts | 187 +++++++++--------- .../dashboard/panel_drilldown_actions.ts | 17 +- .../dashboard_to_dashboard_drilldown.ts | 6 - .../drilldowns/dashboard_to_url_drilldown.ts | 3 - .../group3/reporting/download_csv.ts | 7 +- .../apps/discover/visualize_field.ts | 7 +- .../apps/lens/group1/ad_hoc_data_view.ts | 7 +- .../functional/apps/lens/group4/dashboard.ts | 11 +- .../group4/show_underlying_data_dashboard.ts | 18 +- .../apps/lens/group6/error_handling.ts | 2 +- .../lens/open_in_lens/agg_based/heatmap.ts | 2 +- .../group2/embeddable/filter_by_map_extent.js | 17 +- .../lens_to_ml.ts | 8 +- .../lens_to_ml_with_wizard.ts | 13 +- .../map_to_ml.ts | 5 +- .../services/ml/lens_visualizations.ts | 15 +- .../apps/cases/group2/attachment_framework.ts | 12 +- .../services/scenarios.ts | 40 ++-- .../group2/open_in_lens/agg_based/gauge.ts | 8 +- .../group2/open_in_lens/agg_based/goal.ts | 15 +- .../group2/open_in_lens/agg_based/heatmap.ts | 18 +- .../group2/open_in_lens/agg_based/metric.ts | 17 +- .../group2/open_in_lens/agg_based/pie.ts | 21 +- .../group2/open_in_lens/agg_based/table.ts | 24 +-- .../group2/open_in_lens/agg_based/xy.ts | 55 ++---- .../group3/open_in_lens/tsvb/dashboard.ts | 6 +- .../group3/open_in_lens/tsvb/gauge.ts | 26 +-- .../group3/open_in_lens/tsvb/metric.ts | 29 ++- .../group3/open_in_lens/tsvb/table.ts | 45 ++--- .../group3/open_in_lens/tsvb/timeseries.ts | 44 ++--- .../group3/open_in_lens/tsvb/top_n.ts | 46 ++--- .../cases/attachment_framework.ts | 12 +- .../search/cases/attachment_framework.ts | 8 +- .../ftr/cases/attachment_framework.ts | 11 +- 46 files changed, 329 insertions(+), 477 deletions(-) diff --git a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts index f11ca330bf1783..e81c38a94736ca 100644 --- a/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts +++ b/test/functional/apps/dashboard/group1/edit_embeddable_redirects.ts @@ -36,7 +36,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('redirects via save and return button after edit', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.visualize.saveVisualizationAndReturn(); }); @@ -45,7 +44,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const newTitle = 'wowee, looks like I have a new title'; await PageObjects.header.waitUntilLoadingHasFinished(); const originalPanelCount = await PageObjects.dashboard.getPanelCount(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: false, @@ -62,7 +60,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const newTitle = 'wowee, my title just got cooler'; await PageObjects.header.waitUntilLoadingHasFinished(); const originalPanelCount = await PageObjects.dashboard.getPanelCount(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: true, @@ -78,8 +75,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('loses originatingApp connection after save as when redirectToOrigin is false', async () => { const newTitle = 'wowee, my title just got cooler again'; await PageObjects.header.waitUntilLoadingHasFinished(); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.clickEdit(); + await dashboardPanelActions.editPanelByTitle('wowee, my title just got cooler'); await PageObjects.visualize.linkedToOriginatingApp(); await PageObjects.visualize.saveVisualizationExpectSuccess(newTitle, { saveAsNew: true, diff --git a/test/functional/apps/dashboard/group1/edit_visualizations.js b/test/functional/apps/dashboard/group1/edit_visualizations.js index 20234ca1f80554..51492733ce06b9 100644 --- a/test/functional/apps/dashboard/group1/edit_visualizations.js +++ b/test/functional/apps/dashboard/group1/edit_visualizations.js @@ -34,7 +34,6 @@ export default function ({ getService, getPageObjects }) { }; const editMarkdownVis = async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.visEditor.setMarkdownTxt(modifiedMarkdownText); @@ -86,7 +85,6 @@ export default function ({ getService, getPageObjects }) { }); it('cancel button returns to dashboard with no modal if there are no changes to apply', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); diff --git a/test/functional/apps/dashboard/group2/dashboard_filtering.ts b/test/functional/apps/dashboard/group2/dashboard_filtering.ts index 92f89280e7f90c..5b51e6c7e4f557 100644 --- a/test/functional/apps/dashboard/group2/dashboard_filtering.ts +++ b/test/functional/apps/dashboard/group2/dashboard_filtering.ts @@ -268,7 +268,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboard.waitForRenderComplete(); await pieChart.expectPieSliceCount(5); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await queryBar.setQuery('weightLbs:>50'); await queryBar.submitQuery(); @@ -290,7 +289,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Nested visualization filter pills filters data as expected', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); @@ -305,7 +303,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('Removing filter pills and query unfiters data as expected', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); await renderable.waitForRender(); diff --git a/test/functional/apps/dashboard/group2/full_screen_mode.ts b/test/functional/apps/dashboard/group2/full_screen_mode.ts index 23be5e4b7afe6e..24ead0ce27fad0 100644 --- a/test/functional/apps/dashboard/group2/full_screen_mode.ts +++ b/test/functional/apps/dashboard/group2/full_screen_mode.ts @@ -69,7 +69,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('displays exit full screen logo button when panel is expanded', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); const exists = await PageObjects.dashboard.exitFullScreenTextButtonExists(); diff --git a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts index 99d09a5f42e7e1..3a183898247580 100644 --- a/test/functional/apps/dashboard/group2/panel_expand_toggle.ts +++ b/test/functional/apps/dashboard/group2/panel_expand_toggle.ts @@ -35,7 +35,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('hides other panels', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); await retry.try(async () => { const panelCount = await PageObjects.dashboard.getPanelCount(); @@ -46,9 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('shows other panels after being minimized', async () => { const panelCount = await PageObjects.dashboard.getPanelCount(); // Panels are all minimized on a fresh open of a dashboard, so we need to re-expand in order to then minimize. - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); // Add a retry to fix https://github.com/elastic/kibana/issues/14574. Perhaps the recent changes to this diff --git a/test/functional/apps/dashboard/group3/copy_panel_to.ts b/test/functional/apps/dashboard/group3/copy_panel_to.ts index 3c6fa6d790eaf6..bcf7ddc12551f0 100644 --- a/test/functional/apps/dashboard/group3/copy_panel_to.ts +++ b/test/functional/apps/dashboard/group3/copy_panel_to.ts @@ -100,9 +100,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.existOrFail('saveDashboardSuccess'); await PageObjects.dashboard.clickCancelOutOfEditMode(); - const panelOptions = await dashboardPanelActions.getPanelHeading(markdownTitle); - await dashboardPanelActions.openContextMenu(panelOptions); - await dashboardPanelActions.expectMissingEditPanelAction(); + await dashboardPanelActions.expectMissingEditPanelAction(markdownTitle); }); it('does not show the current dashboard in the dashboard picker', async () => { diff --git a/test/functional/apps/dashboard/group3/panel_context_menu.ts b/test/functional/apps/dashboard/group3/panel_context_menu.ts index d2807bc006d4c2..56e9deeab46606 100644 --- a/test/functional/apps/dashboard/group3/panel_context_menu.ts +++ b/test/functional/apps/dashboard/group3/panel_context_menu.ts @@ -76,7 +76,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { describe('visualization object edit menu', () => { it('opens a visualization when edit link is clicked', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); const currentUrl = await browser.getCurrentUrl(); @@ -118,7 +117,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('opens a saved search when edit link is clicked', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); const queryName = await PageObjects.discover.getCurrentQueryName(); @@ -147,7 +145,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); before('expand panel to "full screen"', async () => { - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); }); diff --git a/test/functional/apps/dashboard/group5/data_shared_attributes.ts b/test/functional/apps/dashboard/group5/data_shared_attributes.ts index 3202d418bd5122..825e5bfc32d0ab 100644 --- a/test/functional/apps/dashboard/group5/data_shared_attributes.ts +++ b/test/functional/apps/dashboard/group5/data_shared_attributes.ts @@ -129,8 +129,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('data-shared-item title should update a saved search when using a custom panel title', async () => { await PageObjects.dashboard.switchToEditMode(); const CUSTOM_SEARCH_TITLE = 'ima custom title for a search!'; - const el = await dashboardPanelActions.getPanelHeading('Rendering Test: saved search'); - await dashboardPanelActions.customizePanel(el); + await dashboardPanelActions.customizePanelByTitle('Rendering Test: saved search'); await dashboardCustomizePanel.expectCustomizePanelSettingsFlyoutOpen(); await dashboardCustomizePanel.setCustomPanelTitle(CUSTOM_SEARCH_TITLE); await dashboardCustomizePanel.clickSaveButton(); diff --git a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts index f20172d10ed5c8..c2c7c9db70aa68 100644 --- a/test/functional/apps/dashboard/group5/saved_search_embeddable.ts +++ b/test/functional/apps/dashboard/group5/saved_search_embeddable.ts @@ -11,7 +11,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const dashboardAddPanel = getService('dashboardAddPanel'); const dashboardPanelActions = getService('dashboardPanelActions'); - const testSubjects = getService('testSubjects'); const filterBar = getService('filterBar'); const find = getService('find'); const esArchiver = getService('esArchiver'); @@ -77,17 +76,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.header.waitUntilLoadingHasFinished(); await PageObjects.dashboard.waitForRenderComplete(); - await dashboardPanelActions.openContextMenu(); - const actionExists = await testSubjects.exists( + await dashboardPanelActions.clickContextMenuItem( 'embeddablePanelAction-ACTION_VIEW_SAVED_SEARCH' ); - if (!actionExists) { - await dashboardPanelActions.clickContextMenuMoreItem(); - } - const actionElement = await testSubjects.find( - 'embeddablePanelAction-ACTION_VIEW_SAVED_SEARCH' - ); - await actionElement.click(); await PageObjects.discover.waitForDiscoverAppOnScreen(); expect(await PageObjects.discover.getSavedSearchTitle()).to.equal( diff --git a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts index 23b8b071e41d19..5c24db05fcafc1 100644 --- a/test/functional/apps/dashboard/group6/dashboard_snapshots.ts +++ b/test/functional/apps/dashboard/group6/dashboard_snapshots.ts @@ -63,7 +63,6 @@ export default function ({ await PageObjects.dashboard.saveDashboard('tsvb'); await PageObjects.dashboard.clickFullScreenMode(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); await PageObjects.dashboard.waitForRenderComplete(); @@ -85,7 +84,6 @@ export default function ({ await PageObjects.dashboard.saveDashboard('area'); await PageObjects.dashboard.clickFullScreenMode(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickExpandPanelToggle(); await PageObjects.dashboard.waitForRenderComplete(); diff --git a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts index 2636d00fb5cce4..f408ea7a9681e7 100644 --- a/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts +++ b/test/functional/apps/dashboard_elements/image_embeddable/image_embeddable.ts @@ -16,7 +16,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const kibanaServer = getService('kibanaServer'); const retry = getService('retry'); - const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); const dashboardDrilldownsManage = getService('dashboardDrilldownsManage'); @@ -53,8 +52,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('image embeddable should support drilldowns', async () => { - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.clickContextMenuMoreItem(); await dashboardDrilldownPanelActions.expectExistsCreateDrilldownAction(); await dashboardDrilldownPanelActions.clickCreateDrilldown(); await dashboardDrilldownsManage.expectsCreateDrilldownFlyoutOpen(); diff --git a/test/functional/apps/dashboard_elements/links/links_create_edit.ts b/test/functional/apps/dashboard_elements/links/links_create_edit.ts index 54a58fbe0bc67b..3842172cfdab40 100644 --- a/test/functional/apps/dashboard_elements/links/links_create_edit.ts +++ b/test/functional/apps/dashboard_elements/links/links_create_edit.ts @@ -139,7 +139,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboard.loadSavedDashboard('links 001'); await dashboard.switchToEditMode(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await dashboardLinks.expectPanelEditorFlyoutIsOpen(); @@ -159,7 +158,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboard.loadSavedDashboard('links 001'); await dashboard.switchToEditMode(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await dashboardLinks.expectPanelEditorFlyoutIsOpen(); @@ -178,7 +176,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboard.loadSavedDashboard('links 001'); await dashboard.switchToEditMode(); - await dashboardPanelActions.openContextMenu(); await dashboardPanelActions.clickEdit(); await dashboardLinks.expectPanelEditorFlyoutIsOpen(); diff --git a/test/functional/services/dashboard/panel_actions.ts b/test/functional/services/dashboard/panel_actions.ts index 3e63d526760efd..ef8ca6eaa759a3 100644 --- a/test/functional/services/dashboard/panel_actions.ts +++ b/test/functional/services/dashboard/panel_actions.ts @@ -13,7 +13,6 @@ const REMOVE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-deletePanel'; const EDIT_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-editPanel'; const INLINE_EDIT_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-ACTION_CONFIGURE_IN_LENS'; const EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ = 'navigateToLensEditorLink'; -const REPLACE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-replacePanel'; const CLONE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-clonePanel'; const TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-togglePanel'; const CUSTOMIZE_PANEL_DATA_TEST_SUBJ = 'embeddablePanelAction-ACTION_CUSTOMIZE_PANEL'; @@ -32,6 +31,7 @@ export class DashboardPanelActionsService extends FtrService { private readonly log = this.ctx.getService('log'); private readonly retry = this.ctx.getService('retry'); private readonly browser = this.ctx.getService('browser'); + private readonly find = this.ctx.getService('find'); private readonly inspector = this.ctx.getService('inspector'); private readonly testSubjects = this.ctx.getService('testSubjects'); @@ -62,6 +62,12 @@ export class DashboardPanelActionsService extends FtrService { await toggleMenuItem.click(DASHBOARD_TOP_OFFSET); } + async toggleContextMenuByTitle(title = '') { + this.log.debug(`toggleContextMenu(${title})`); + const header = await this.getPanelHeading(title); + await this.toggleContextMenu(header); + } + async expectContextMenuToBeOpen() { this.log.debug('expectContextMenuToBeOpen'); await this.testSubjects.existOrFail('embeddablePanelContextMenuOpen'); @@ -69,11 +75,19 @@ export class DashboardPanelActionsService extends FtrService { async openContextMenu(parent?: WebElementWrapper) { this.log.debug(`openContextMenu(${parent}`); - await this.toggleContextMenu(parent); + const open = await this.testSubjects.exists('embeddablePanelContextMenuOpen'); + if (!open) await this.toggleContextMenu(parent); await this.expectContextMenuToBeOpen(); } + async openContextMenuByTitle(title = '') { + this.log.debug(`openContextMenuByTitle(${title})`); + const header = await this.getPanelHeading(title); + await this.openContextMenu(header); + } + async hasContextMenuMoreItem() { + this.log.debug('hasContextMenuMoreItem'); return await this.testSubjects.exists('embeddablePanelMore-mainMenu'); } @@ -87,21 +101,30 @@ export class DashboardPanelActionsService extends FtrService { } async openContextMenuMorePanel(parent?: WebElementWrapper) { + this.log.debug('openContextMenuMorePanel'); await this.openContextMenu(parent); await this.clickContextMenuMoreItem(); } - async clickContextMenuItem(itemSelector: string, parent?: WebElementWrapper) { + async clickContextMenuItem(testSubject: string, parent?: WebElementWrapper) { + this.log.debug(`clickContextMenuItem`); await this.openContextMenu(parent); - const exists = await this.testSubjects.exists(itemSelector); + const exists = await this.testSubjects.exists(testSubject); if (!exists) { await this.clickContextMenuMoreItem(); } - await this.testSubjects.click(itemSelector); + await this.testSubjects.click(testSubject); + } + + async clickContextMenuItemByTitle(testSubject: string, title = '') { + this.log.debug(`openContextMenuByTitle(${title})`); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(testSubject, header); } async navigateToEditorFromFlyout() { - await this.testSubjects.clickWhenNotDisabledWithoutRetry(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); + this.log.debug('navigateToEditorFromFlyout'); + await this.clickContextMenuItem(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); await this.header.waitUntilLoadingHasFinished(); await this.testSubjects.click(EDIT_IN_LENS_EDITOR_DATA_TEST_SUBJ); const isConfirmModalVisible = await this.testSubjects.exists('confirmModalConfirmButton'); @@ -112,12 +135,7 @@ export class DashboardPanelActionsService extends FtrService { async clickInlineEdit() { this.log.debug('clickInlineEditAction'); - await this.expectContextMenuToBeOpen(); - const isInlineEditingActionVisible = await this.testSubjects.exists( - INLINE_EDIT_PANEL_DATA_TEST_SUBJ - ); - if (!isInlineEditingActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.clickWhenNotDisabledWithoutRetry(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); + await this.clickContextMenuItem(INLINE_EDIT_PANEL_DATA_TEST_SUBJ); await this.header.waitUntilLoadingHasFinished(); await this.common.waitForTopNavToBeVisible(); } @@ -126,9 +144,9 @@ export class DashboardPanelActionsService extends FtrService { * The dashboard/canvas panels can be either edited on their editor or inline. * The inline editing panels allow the navigation to the editor after the flyout opens */ - async clickEdit() { + async clickEdit(parent?: WebElementWrapper) { this.log.debug('clickEdit'); - await this.expectContextMenuToBeOpen(); + await this.openContextMenu(parent); const isActionVisible = await this.testSubjects.exists(EDIT_PANEL_DATA_TEST_SUBJ); const isInlineEditingActionVisible = await this.testSubjects.exists( INLINE_EDIT_PANEL_DATA_TEST_SUBJ @@ -149,40 +167,26 @@ export class DashboardPanelActionsService extends FtrService { * The dashboard/canvas panels can be either edited on their editor or inline. * The inline editing panels allow the navigation to the editor after the flyout opens */ - async editPanelByTitle(title?: string) { + async editPanelByTitle(title = '') { this.log.debug(`editPanelByTitle(${title})`); - if (title) { - const panelOptions = await this.getPanelHeading(title); - await this.openContextMenu(panelOptions); - } else { - await this.openContextMenu(); - } - if (await this.testSubjects.exists(EDIT_PANEL_DATA_TEST_SUBJ)) { - await this.testSubjects.clickWhenNotDisabledWithoutRetry(EDIT_PANEL_DATA_TEST_SUBJ); - } else { - await this.navigateToEditorFromFlyout(); - } + const header = await this.getPanelHeading(title); + await this.clickEdit(header); } async clickExpandPanelToggle() { this.log.debug(`clickExpandPanelToggle`); - await this.expectContextMenuToBeOpen(); - const isActionVisible = await this.testSubjects.exists(TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ); + await this.openContextMenu(); + await this.clickContextMenuItem(TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ); } async removePanel(parent?: WebElementWrapper) { this.log.debug('removePanel'); await this.openContextMenu(parent); - const isActionVisible = await this.testSubjects.exists(REMOVE_PANEL_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - const isPanelActionVisible = await this.testSubjects.exists(REMOVE_PANEL_DATA_TEST_SUBJ); - if (!isPanelActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(REMOVE_PANEL_DATA_TEST_SUBJ); + await this.clickContextMenuItem(REMOVE_PANEL_DATA_TEST_SUBJ, parent); } - async removePanelByTitle(title: string) { + async removePanelByTitle(title = '') { + this.log.debug(`removePanel(${title})`); const header = await this.getPanelHeading(title); this.log.debug('found header? ', Boolean(header)); await this.removePanel(header); @@ -190,62 +194,36 @@ export class DashboardPanelActionsService extends FtrService { async customizePanel(parent?: WebElementWrapper) { this.log.debug('customizePanel'); - await this.openContextMenu(parent); - const isActionVisible = await this.testSubjects.exists(CUSTOMIZE_PANEL_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - const isPanelActionVisible = await this.testSubjects.exists(CUSTOMIZE_PANEL_DATA_TEST_SUBJ); - if (!isPanelActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(CUSTOMIZE_PANEL_DATA_TEST_SUBJ); + await this.clickContextMenuItem(CUSTOMIZE_PANEL_DATA_TEST_SUBJ, parent); } - async replacePanelByTitle(title?: string) { - this.log.debug(`replacePanel(${title})`); - if (title) { - const panelOptions = await this.getPanelHeading(title); - await this.openContextMenu(panelOptions); - } else { - await this.openContextMenu(); - } - const actionExists = await this.testSubjects.exists(REPLACE_PANEL_DATA_TEST_SUBJ); - if (!actionExists) { - await this.clickContextMenuMoreItem(); - } - await this.testSubjects.click(REPLACE_PANEL_DATA_TEST_SUBJ); + async customizePanelByTitle(title = '') { + this.log.debug('customizePanel'); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(CUSTOMIZE_PANEL_DATA_TEST_SUBJ, header); } - async clonePanelByTitle(title?: string) { + async clonePanelByTitle(title = '') { this.log.debug(`clonePanel(${title})`); - if (title) { - const panelOptions = await this.getPanelHeading(title); - await this.openContextMenu(panelOptions); - } else { - await this.openContextMenu(); - } - const isActionVisible = await this.testSubjects.exists(CLONE_PANEL_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(CLONE_PANEL_DATA_TEST_SUBJ); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(CLONE_PANEL_DATA_TEST_SUBJ, header); await this.dashboard.waitForRenderComplete(); } - async openCopyToModalByTitle(title?: string) { + async openCopyToModalByTitle(title = '') { this.log.debug(`copyPanelTo(${title})`); - if (title) { - const panelOptions = await this.getPanelHeading(title); - await this.openContextMenu(panelOptions); - } else { - await this.openContextMenu(); - } - const isActionVisible = await this.testSubjects.exists(COPY_PANEL_TO_DATA_TEST_SUBJ); - if (!isActionVisible) await this.clickContextMenuMoreItem(); - await this.testSubjects.click(COPY_PANEL_TO_DATA_TEST_SUBJ); + const header = await this.getPanelHeading(title); + await this.clickContextMenuItem(COPY_PANEL_TO_DATA_TEST_SUBJ, header); } async openInspectorByTitle(title: string) { + this.log.debug(`openInspector(${title})`); const header = await this.getPanelHeading(title); await this.openInspector(header); } async getSearchSessionIdByTitle(title: string) { + this.log.debug(`getSearchSessionId(${title})`); await this.openInspectorByTitle(title); await this.inspector.openInspectorRequestsView(); const searchSessionId = await ( @@ -256,6 +234,7 @@ export class DashboardPanelActionsService extends FtrService { } async getSearchResponseByTitle(title: string) { + this.log.debug(`setSearchResponse(${title})`); await this.openInspectorByTitle(title); await this.inspector.openInspectorRequestsView(); const response = await this.inspector.getResponse(); @@ -264,6 +243,7 @@ export class DashboardPanelActionsService extends FtrService { } async openInspector(parent?: WebElementWrapper) { + this.log.debug(`openInspector`); await this.clickContextMenuItem(OPEN_INSPECTOR_TEST_SUBJ, parent); } @@ -311,12 +291,11 @@ export class DashboardPanelActionsService extends FtrService { }); } - async expectExistsPanelAction(testSubject: string, title?: string) { - this.log.debug('expectExistsPanelAction', testSubject); + async expectExistsPanelAction(testSubject: string, title = '') { + this.log.debug('expectExistsPanelAction', testSubject, title); const panelWrapper = title ? await this.getPanelHeading(title) : undefined; await this.openContextMenu(panelWrapper); - if (!(await this.testSubjects.exists(testSubject))) { if (await this.hasContextMenuMoreItem()) { await this.clickContextMenuMoreItem(); @@ -326,12 +305,12 @@ export class DashboardPanelActionsService extends FtrService { await this.toggleContextMenu(panelWrapper); } - async expectExistsRemovePanelAction() { + async expectExistsRemovePanelAction(title = '') { this.log.debug('expectExistsRemovePanelAction'); - await this.expectExistsPanelAction(REMOVE_PANEL_DATA_TEST_SUBJ); + await this.expectExistsPanelAction(REMOVE_PANEL_DATA_TEST_SUBJ, title); } - async expectExistsEditPanelAction(title?: string, allowsInlineEditing?: boolean) { + async expectExistsEditPanelAction(title = '', allowsInlineEditing?: boolean) { this.log.debug('expectExistsEditPanelAction'); let testSubj = EDIT_PANEL_DATA_TEST_SUBJ; if (allowsInlineEditing) { @@ -340,43 +319,45 @@ export class DashboardPanelActionsService extends FtrService { await this.expectExistsPanelAction(testSubj, title); } - async expectExistsClonePanelAction() { + async expectExistsClonePanelAction(title = '') { this.log.debug('expectExistsClonePanelAction'); - await this.expectExistsPanelAction(CLONE_PANEL_DATA_TEST_SUBJ); + await this.expectExistsPanelAction(CLONE_PANEL_DATA_TEST_SUBJ, title); } - async expectExistsToggleExpandAction() { + async expectExistsToggleExpandAction(title = '') { this.log.debug('expectExistsToggleExpandAction'); - await this.expectExistsPanelAction(TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ); + await this.expectExistsPanelAction(TOGGLE_EXPAND_PANEL_DATA_TEST_SUBJ, title); } - async expectMissingPanelAction(testSubject: string) { - this.log.debug('expectMissingPanelAction', testSubject); - await this.openContextMenu(); + async expectMissingPanelAction(testSubject: string, title = '') { + this.log.debug('expectMissingPanelAction', testSubject, title); + await this.openContextMenuByTitle(title); await this.testSubjects.missingOrFail(testSubject); if (await this.hasContextMenuMoreItem()) { await this.clickContextMenuMoreItem(); await this.testSubjects.missingOrFail(testSubject); } - await this.toggleContextMenu(); + await this.toggleContextMenuByTitle(title); } - async expectMissingEditPanelAction() { + async expectMissingEditPanelAction(title = '') { this.log.debug('expectMissingEditPanelAction'); - await this.expectMissingPanelAction(EDIT_PANEL_DATA_TEST_SUBJ); + await this.expectMissingPanelAction(EDIT_PANEL_DATA_TEST_SUBJ, title); } - async expectMissingDuplicatePanelAction() { + async expectMissingDuplicatePanelAction(title = '') { this.log.debug('expectMissingDuplicatePanelAction'); - await this.expectMissingPanelAction(CLONE_PANEL_DATA_TEST_SUBJ); + await this.expectMissingPanelAction(CLONE_PANEL_DATA_TEST_SUBJ, title); } - async expectMissingRemovePanelAction() { + async expectMissingRemovePanelAction(title = '') { this.log.debug('expectMissingRemovePanelAction'); - await this.expectMissingPanelAction(REMOVE_PANEL_DATA_TEST_SUBJ); + await this.expectMissingPanelAction(REMOVE_PANEL_DATA_TEST_SUBJ, title); } - async getPanelHeading(title: string) { + async getPanelHeading(title = '') { + this.log.debug(`getPanelHeading(${title})`); + if (!title) return await this.find.byClassName('embPanel__header'); return await this.testSubjects.find(`embeddablePanelHeading-${title.replace(/\s/g, '')}`); } @@ -399,11 +380,15 @@ export class DashboardPanelActionsService extends FtrService { await this.openContextMenu(parent); const isActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); if (!isActionVisible) await this.clickContextMenuMoreItem(); - const isPanelActionVisible = await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ); - if (!isPanelActionVisible) await this.clickContextMenuMoreItem(); return await this.testSubjects.exists(CONVERT_TO_LENS_TEST_SUBJ, { timeout: 500 }); } + async canConvertToLensByTitle(title = '') { + this.log.debug(`canConvertToLens(${title})`); + const header = await this.getPanelHeading(title); + return await this.canConvertToLens(header); + } + async convertToLens(parent?: WebElementWrapper) { this.log.debug('convertToLens'); @@ -415,4 +400,10 @@ export class DashboardPanelActionsService extends FtrService { await this.testSubjects.click(CONVERT_TO_LENS_TEST_SUBJ); }); } + + async convertToLensByTitle(title = '') { + this.log.debug(`convertToLens(${title})`); + const header = await this.getPanelHeading(title); + return await this.convertToLens(header); + } } diff --git a/test/functional/services/dashboard/panel_drilldown_actions.ts b/test/functional/services/dashboard/panel_drilldown_actions.ts index 57fc42f323fbe7..f4ff1b3ede9752 100644 --- a/test/functional/services/dashboard/panel_drilldown_actions.ts +++ b/test/functional/services/dashboard/panel_drilldown_actions.ts @@ -15,31 +15,44 @@ const MANAGE_DRILLDOWNS_DATA_TEST_SUBJ = 'embeddablePanelAction-OPEN_FLYOUT_EDIT export function DashboardDrilldownPanelActionsProvider({ getService }: FtrProviderContext) { const log = getService('log'); const testSubjects = getService('testSubjects'); + const dashboardPanelActions = getService('dashboardPanelActions'); return new (class DashboardDrilldownPanelActions { async expectExistsCreateDrilldownAction() { log.debug('expectExistsCreateDrilldownAction'); - await testSubjects.existOrFail(CREATE_DRILLDOWN_DATA_TEST_SUBJ); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.expectContextMenuToBeOpen(); + await dashboardPanelActions.clickContextMenuMoreItem(); + await await testSubjects.existOrFail(CREATE_DRILLDOWN_DATA_TEST_SUBJ); } async expectMissingCreateDrilldownAction() { log.debug('expectMissingCreateDrilldownAction'); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.expectContextMenuToBeOpen(); + await dashboardPanelActions.clickContextMenuMoreItem(); await testSubjects.existOrFail(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); } async clickCreateDrilldown() { log.debug('clickCreateDrilldown'); await this.expectExistsCreateDrilldownAction(); - await testSubjects.clickWhenNotDisabledWithoutRetry(CREATE_DRILLDOWN_DATA_TEST_SUBJ); + await dashboardPanelActions.clickContextMenuItem(CREATE_DRILLDOWN_DATA_TEST_SUBJ); } async expectExistsManageDrilldownsAction() { log.debug('expectExistsCreateDrilldownAction'); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.expectContextMenuToBeOpen(); + await dashboardPanelActions.clickContextMenuMoreItem(); await testSubjects.existOrFail(CREATE_DRILLDOWN_DATA_TEST_SUBJ); } async expectMissingManageDrilldownsAction() { log.debug('expectExistsRemovePanelAction'); + await dashboardPanelActions.openContextMenu(); + await dashboardPanelActions.expectContextMenuToBeOpen(); + await dashboardPanelActions.clickContextMenuMoreItem(); await testSubjects.existOrFail(MANAGE_DRILLDOWNS_DATA_TEST_SUBJ); } 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 95ea2dc42bc395..b7f8e6099675a3 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 @@ -15,7 +15,6 @@ const DRILLDOWN_TO_AREA_CHART_NAME = 'Go to area chart dashboard'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); - const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); const dashboardDrilldownsManage = getService('dashboardDrilldownsManage'); const PageObjects = getPageObjects([ @@ -45,9 +44,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await toasts.dismissAll(); // toasts get in the way of bottom "Create drilldown" button in flyout // create drilldown - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.clickContextMenuMoreItem(); - await dashboardDrilldownPanelActions.expectExistsCreateDrilldownAction(); await dashboardDrilldownPanelActions.clickCreateDrilldown(); await dashboardDrilldownsManage.expectsCreateDrilldownFlyoutOpen(); await testSubjects.click('actionFactoryItem-DASHBOARD_TO_DASHBOARD_DRILLDOWN'); @@ -277,8 +273,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { it('delete dashboard to dashboard drilldown', async () => { // delete drilldown await PageObjects.dashboard.switchToEditMode(); - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.clickContextMenuMoreItem(); await dashboardDrilldownPanelActions.expectExistsManageDrilldownsAction(); await dashboardDrilldownPanelActions.clickManageDrilldowns(); await dashboardDrilldownsManage.expectsManageDrilldownsFlyoutOpen(); diff --git a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts index e7c8a0819fd1a8..2e15f19e702acb 100644 --- a/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts +++ b/x-pack/test/functional/apps/dashboard/group3/drilldowns/dashboard_to_url_drilldown.ts @@ -11,7 +11,6 @@ import { FtrProviderContext } from '../../../../ftr_provider_context'; const DRILLDOWN_TO_DISCOVER_URL = 'Go to discover'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const dashboardPanelActions = getService('dashboardPanelActions'); const dashboardDrilldownPanelActions = getService('dashboardDrilldownPanelActions'); const dashboardDrilldownsManage = getService('dashboardDrilldownsManage'); const PageObjects = getPageObjects(['dashboard', 'common', 'header', 'timePicker', 'discover']); @@ -32,8 +31,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ); // create drilldown - await dashboardPanelActions.openContextMenu(); - await dashboardPanelActions.clickContextMenuMoreItem(); await dashboardDrilldownPanelActions.expectExistsCreateDrilldownAction(); await dashboardDrilldownPanelActions.clickCreateDrilldown(); await dashboardDrilldownsManage.expectsCreateDrilldownFlyoutOpen(); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts index 858332ce4d0a3f..9e834b80a2130a 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/download_csv.ts @@ -52,13 +52,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }; const clickDownloadCsv = async () => { - log.debug('click "More"'); - await dashboardPanelActions.clickContextMenuMoreItem(); - - const actionItemTestSubj = 'embeddablePanelAction-generateCsvReport'; - await testSubjects.existOrFail(actionItemTestSubj); // wait for the full panel to display or else the test runner could click the wrong option! log.debug('click "Generate CSV"'); - await testSubjects.click(actionItemTestSubj); + await dashboardPanelActions.clickContextMenuItem('embeddablePanelAction-generateCsvReport'); await testSubjects.existOrFail('csvReportStarted'); // validate toast panel }; diff --git a/x-pack/test/functional/apps/discover/visualize_field.ts b/x-pack/test/functional/apps/discover/visualize_field.ts index c745800dbdf2ed..13df0fe667357a 100644 --- a/x-pack/test/functional/apps/discover/visualize_field.ts +++ b/x-pack/test/functional/apps/discover/visualize_field.ts @@ -29,6 +29,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { ]); const elasticChart = getService('elasticChart'); const monacoEditor = getService('monacoEditor'); + const dashboardPanelActions = getService('dashboardPanelActions'); const defaultSettings = { enableESQL: true, @@ -232,8 +233,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await testSubjects.existOrFail('embeddablePanelHeading-TextBasedChart'); await elasticChart.setNewChartUiDebugFlag(true); await PageObjects.header.waitUntilLoadingHasFinished(); - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelAction-ACTION_CONFIGURE_IN_LENS'); + await dashboardPanelActions.clickInlineEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); expect(await PageObjects.lens.canRemoveDimension('lnsXY_xDimensionPanel')).to.equal(true); await PageObjects.lens.removeDimension('lnsXY_xDimensionPanel'); @@ -261,8 +261,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await elasticChart.setNewChartUiDebugFlag(true); await PageObjects.header.waitUntilLoadingHasFinished(); // open the inline editing flyout - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelAction-ACTION_CONFIGURE_IN_LENS'); + await dashboardPanelActions.clickInlineEdit(); await PageObjects.header.waitUntilLoadingHasFinished(); // change the query diff --git a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts index 4af556b8c83b8a..685d01d0ec6f11 100644 --- a/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts +++ b/x-pack/test/functional/apps/lens/group1/ad_hoc_data_view.ts @@ -28,6 +28,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const browser = getService('browser'); const dataViews = getService('dataViews'); + const dashboardPanelActions = getService('dashboardPanelActions'); const expectedData = [ { x: '97.220.3.248', y: 19755 }, @@ -55,9 +56,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { } const checkDiscoverNavigationResult = async () => { - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'); + await dashboardPanelActions.clickContextMenuItem( + 'embeddablePanelAction-ACTION_OPEN_IN_DISCOVER' + ); const [, discoverHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverHandle); diff --git a/x-pack/test/functional/apps/lens/group4/dashboard.ts b/x-pack/test/functional/apps/lens/group4/dashboard.ts index 776a4416d7d4cf..cfa46167b7860d 100644 --- a/x-pack/test/functional/apps/lens/group4/dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/dashboard.ts @@ -183,9 +183,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardAddPanel.closeAddPanel(); await retry.try(async () => { - await panelActions.openContextMenu(); - await panelActions.clickContextMenuMoreItem(); - await testSubjects.existOrFail(ACTION_TEST_SUBJ); + await panelActions.expectExistsPanelAction(ACTION_TEST_SUBJ); }); }); @@ -225,9 +223,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await PageObjects.lens.saveAndReturn(); - await panelActions.openContextMenu(); - await panelActions.clickContextMenuMoreItem(); - await testSubjects.click('embeddablePanelAction-openInspector'); + await panelActions.openInspector(); await inspector.openInspectorRequestsView(); const requests = await inspector.getRequestNames(); expect(requests.split(',').length).to.be(2); @@ -337,8 +333,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); await PageObjects.lens.save('test', true); // Edit the visualization now and get back to Lens editor - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelAction-ACTION_CONFIGURE_IN_LENS'); + await panelActions.clickInlineEdit(); await testSubjects.click('navigateToLensEditorLink'); // Click on Share, then Copy link and paste the link in a new tab. const url = await PageObjects.lens.getUrl(); diff --git a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts index e8d37ef426525e..1f6b3efd9d0142 100644 --- a/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts +++ b/x-pack/test/functional/apps/lens/group4/show_underlying_data_dashboard.ts @@ -8,6 +8,8 @@ import expect from '@kbn/expect'; import { v4 as uuidv4 } from 'uuid'; import { FtrProviderContext } from '../../../ftr_provider_context'; +const OPEN_IN_DISCOVER_DATA_TEST_SUBJ = 'embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'; + export default function ({ getService, getPageObjects }: FtrProviderContext) { const PageObjects = getPageObjects([ 'visualize', @@ -40,9 +42,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { exitFromEditMode: true, }); - await dashboardPanelActions.openContextMenu(); - - await testSubjects.click('embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'); + await dashboardPanelActions.clickContextMenuItem(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); @@ -73,9 +73,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { exitFromEditMode: true, }); - await dashboardPanelActions.openContextMenu(); - - await testSubjects.click('embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'); + await dashboardPanelActions.clickContextMenuItem(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); @@ -118,14 +116,10 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboard.clickQuickSave(); // make sure Open in Discover is also available in edit mode - await dashboardPanelActions.openContextMenuMorePanel(); - await testSubjects.existOrFail('embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'); - + await dashboardPanelActions.expectExistsPanelAction(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); await PageObjects.dashboard.clickCancelOutOfEditMode(); - await dashboardPanelActions.openContextMenu(); - - await testSubjects.click('embeddablePanelAction-ACTION_OPEN_IN_DISCOVER'); + await dashboardPanelActions.clickContextMenuItem(OPEN_IN_DISCOVER_DATA_TEST_SUBJ); const [dashboardWindowHandle, discoverWindowHandle] = await browser.getAllWindowHandles(); await browser.switchToWindow(discoverWindowHandle); diff --git a/x-pack/test/functional/apps/lens/group6/error_handling.ts b/x-pack/test/functional/apps/lens/group6/error_handling.ts index ccdb193b309513..83acbff338df2b 100644 --- a/x-pack/test/functional/apps/lens/group6/error_handling.ts +++ b/x-pack/test/functional/apps/lens/group6/error_handling.ts @@ -113,7 +113,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await testSubjects.find('emptyPlaceholder'); await PageObjects.dashboard.switchToEditMode(); - await dashboardPanelActions.editPanelByTitle(); + await dashboardPanelActions.clickEdit(); await PageObjects.timePicker.waitForNoDataPopover(); await PageObjects.timePicker.ensureHiddenNoDataPopover(); diff --git a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts index f812b741bd4403..dbc02a11c9c804 100644 --- a/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts +++ b/x-pack/test/functional/apps/lens/open_in_lens/agg_based/heatmap.ts @@ -8,7 +8,7 @@ import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; -export default function ({ getPageObjects, getService }: FtrProviderContext) { +export default function ({ getPageObjects }: FtrProviderContext) { const { visualize, lens, visChart, timePicker, visEditor } = getPageObjects([ 'visualize', 'lens', diff --git a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js index 4da0d2af33894f..45fb47b0eee7c1 100644 --- a/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js +++ b/x-pack/test/functional/apps/maps/group2/embeddable/filter_by_map_extent.js @@ -5,6 +5,8 @@ * 2.0. */ +const FILTER_BY_MAP_EXTENT_DATA_TEST_SUBJ = 'embeddablePanelAction-FILTER_BY_MAP_EXTENT'; + export default function ({ getPageObjects, getService }) { const PageObjects = getPageObjects(['common', 'dashboard', 'header', 'lens', 'maps']); @@ -34,9 +36,10 @@ export default function ({ getPageObjects, getService }) { }); it('should filter dashboard by map extent when "filter by map extent" is enabled', async () => { - const mapPanelHeader = await dashboardPanelActions.getPanelHeading('document example'); - await dashboardPanelActions.openContextMenuMorePanel(mapPanelHeader); - await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await dashboardPanelActions.clickContextMenuItemByTitle( + FILTER_BY_MAP_EXTENT_DATA_TEST_SUBJ, + 'document example' + ); await testSubjects.setEuiSwitch( 'filterByMapExtentSwitch24ade730-afe4-42b6-919a-c4e0a98c94f2', 'check' @@ -54,9 +57,11 @@ export default function ({ getPageObjects, getService }) { }); it('should remove map extent filter dashboard when "filter by map extent" is disabled', async () => { - const mapPanelHeader = await dashboardPanelActions.getPanelHeading('document example'); - await dashboardPanelActions.openContextMenuMorePanel(mapPanelHeader); - await testSubjects.click('embeddablePanelAction-FILTER_BY_MAP_EXTENT'); + await dashboardPanelActions.clickContextMenuItemByTitle( + FILTER_BY_MAP_EXTENT_DATA_TEST_SUBJ, + 'document example' + ); + await testSubjects.setEuiSwitch( 'filterByMapExtentSwitch24ade730-afe4-42b6-919a-c4e0a98c94f2', 'uncheck' diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts index eef7461bec6093..667b5664ce1450 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml.ts @@ -9,7 +9,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { const ml = getService('ml'); - const dashboardPanelActions = getService('dashboardPanelActions'); const browser = getService('browser'); const PageObjects = getPageObjects(['common', 'timePicker', 'dashboard']); const kibanaServer = getService('kibanaServer'); @@ -31,9 +30,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await ml.dashboardEmbeddables.assertDashboardPanelExists(selectedPanelTitle); await setFarequoteTimerange(); - - const header = await dashboardPanelActions.getPanelHeading(selectedPanelTitle); - await dashboardPanelActions.openContextMenuMorePanel(header); } describe('create jobs from lens', function () { @@ -70,7 +66,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); @@ -102,7 +98,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts index 089141ba663e78..87f4bfd36335a8 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/lens_to_ml_with_wizard.ts @@ -41,8 +41,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await setFarequoteTimerange(); - const header = await dashboardPanelActions.getPanelHeading(selectedPanelTitle); - await dashboardPanelActions.openContextMenuMorePanel(header); + await dashboardPanelActions.openContextMenuByTitle(selectedPanelTitle); } async function createJobInWizard( @@ -129,7 +128,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); @@ -154,7 +153,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); @@ -179,7 +178,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); @@ -202,7 +201,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); @@ -216,7 +215,7 @@ export default function ({ getService, getPageObject, getPageObjects }: FtrProvi await dashboardPreparation(selectedPanelTitle); - ml.lensVisualizations.assertMLJobMenuActionDoesNotExist(); + ml.lensVisualizations.assertMLJobMenuActionDoesNotExist(selectedPanelTitle); }); }); } diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts index f77c46de6341e5..aee7ab8695fb06 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/map_to_ml.ts @@ -23,8 +23,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.dashboard.loadSavedDashboard(dashboardTitle); await ml.dashboardEmbeddables.assertDashboardPanelExists(selectedPanelTitle); - const header = await dashboardPanelActions.getPanelHeading(selectedPanelTitle); - await dashboardPanelActions.openContextMenuMorePanel(header); + await dashboardPanelActions.openContextMenuByTitle(selectedPanelTitle); } describe('create jobs from dashboard map', function () { @@ -62,7 +61,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await dashboardPreparation(selectedPanelTitle); - await ml.lensVisualizations.clickCreateMLJobMenuAction(); + await ml.lensVisualizations.clickCreateMLJobMenuAction(selectedPanelTitle); await ml.lensVisualizations.assertLayerSelectorExists(); diff --git a/x-pack/test/functional/services/ml/lens_visualizations.ts b/x-pack/test/functional/services/ml/lens_visualizations.ts index a315fa1344a600..7bb49e7397e9d9 100644 --- a/x-pack/test/functional/services/ml/lens_visualizations.ts +++ b/x-pack/test/functional/services/ml/lens_visualizations.ts @@ -14,10 +14,14 @@ export function MachineLearningLensVisualizationsProvider( mlCommonUI: MlCommonUI ) { const testSubjects = getService('testSubjects'); + const dashboardPanelActions = getService('dashboardPanelActions'); return { - async clickCreateMLJobMenuAction() { - await testSubjects.click('embeddablePanelAction-create-ml-ad-job-action'); + async clickCreateMLJobMenuAction(title = '') { + await dashboardPanelActions.clickContextMenuItemByTitle( + 'embeddablePanelAction-create-ml-ad-job-action', + title + ); }, async clickCreateJob(layerIndex: number) { await testSubjects.clickWhenNotDisabledWithoutRetry( @@ -30,8 +34,11 @@ export function MachineLearningLensVisualizationsProvider( async assertLayerSelectorExists() { await testSubjects.existOrFail('mlFlyoutLayerSelector'); }, - async assertMLJobMenuActionDoesNotExist() { - await testSubjects.missingOrFail('embeddablePanelAction-create-ml-ad-job-action'); + async assertMLJobMenuActionDoesNotExist(title = '') { + await dashboardPanelActions.expectMissingPanelAction( + 'embeddablePanelAction-create-ml-ad-job-action', + title + ); }, async assertNumberOfCompatibleLensLayers(numberOfCompatibleLayers: number) { const compatibleLayers = await testSubjects.findAll('mlLensLayerCompatible'); diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts index c714cdba256377..49e8fb47db6448 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group2/attachment_framework.ts @@ -23,6 +23,8 @@ import { } from '../../../../cases_api_integration/common/lib/api'; import { FtrProviderContext } from '../../../ftr_provider_context'; +const ADD_TO_EXISTING_CASE_DATA_TEST_SUBJ = 'embeddablePanelAction-embeddable_addToExistingCase'; + const createLogStashDataView = async ( supertest: SuperTest.Agent ): Promise<{ data_view: { id: string } }> => { @@ -63,6 +65,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const listingTable = getService('listingTable'); const toasts = getService('toasts'); const browser = getService('browser'); + const dashboardPanelActions = getService('dashboardPanelActions'); const createAttachmentAndNavigate = async (attachment: AttachmentRequest) => { const caseData = await cases.api.createCase({ @@ -400,10 +403,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await common.navigateToApp('dashboard'); await dashboard.preserveCrossAppState(); await dashboard.loadSavedDashboard(myDashboardName); - - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.clickContextMenuItem(ADD_TO_EXISTING_CASE_DATA_TEST_SUBJ); await testSubjects.click('cases-table-add-case-filter-bar'); await cases.create.createCase({ @@ -435,9 +435,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await dashboard.preserveCrossAppState(); await dashboard.loadSavedDashboard(myDashboardName); - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.clickContextMenuItem(ADD_TO_EXISTING_CASE_DATA_TEST_SUBJ); await testSubjects.click(`cases-table-row-select-${theCase.id}`); diff --git a/x-pack/test/reporting_functional/services/scenarios.ts b/x-pack/test/reporting_functional/services/scenarios.ts index 2fb9eaf249cda1..be86161fd13f55 100644 --- a/x-pack/test/reporting_functional/services/scenarios.ts +++ b/x-pack/test/reporting_functional/services/scenarios.ts @@ -9,6 +9,8 @@ import expect from '@kbn/expect'; import { createScenarios as createAPIScenarios } from '../../reporting_api_integration/services/scenarios'; import { FtrProviderContext } from '../ftr_provider_context'; +const GENERATE_CSV_DATA_TEST_SUBJ = 'embeddablePanelAction-generateCsvReport'; + export function createScenarios( context: Pick ) { @@ -74,35 +76,27 @@ export function createScenarios( await PageObjects.canvas.loadFirstWorkpad(title); }; - const getSavedSearchPanel = async (savedSearchTitle: string) => { - return await testSubjects.find(`embeddablePanelHeading-${savedSearchTitle.replace(' ', '')}`); - }; const tryDashboardGenerateCsvFail = async (savedSearchTitle: string) => { - const savedSearchPanel = await getSavedSearchPanel(savedSearchTitle); - await dashboardPanelActions.toggleContextMenu(savedSearchPanel); - const actionItemTestSubj = 'embeddablePanelAction-generateCsvReport'; - - if (!(await testSubjects.exists(actionItemTestSubj))) { - await testSubjects.click('embeddablePanelMore-mainMenu'); - } - - await testSubjects.click(actionItemTestSubj); + await dashboardPanelActions.clickContextMenuItemByTitle( + GENERATE_CSV_DATA_TEST_SUBJ, + savedSearchTitle + ); await testSubjects.existOrFail('generateCsvFail'); }; const tryDashboardGenerateCsvNotAvailable = async (savedSearchTitle: string) => { - const savedSearchPanel = await getSavedSearchPanel(savedSearchTitle); - await dashboardPanelActions.toggleContextMenu(savedSearchPanel); - await dashboardPanelActions.clickContextMenuMoreItem(); - await testSubjects.missingOrFail('embeddablePanelAction-generateCsvReport'); + await dashboardPanelActions.expectMissingPanelAction( + GENERATE_CSV_DATA_TEST_SUBJ, + savedSearchTitle + ); }; const tryDashboardGenerateCsvSuccess = async (savedSearchTitle: string) => { - const savedSearchPanel = await getSavedSearchPanel(savedSearchTitle); - await dashboardPanelActions.toggleContextMenu(savedSearchPanel); - await dashboardPanelActions.clickContextMenuMoreItem(); - const actionItemTestSubj = 'embeddablePanelAction-generateCsvReport'; - await testSubjects.existOrFail(actionItemTestSubj); - /* wait for the full panel to display or else the test runner could click the wrong option! */ await testSubjects.click( - actionItemTestSubj + await dashboardPanelActions.expectExistsPanelAction( + GENERATE_CSV_DATA_TEST_SUBJ, + savedSearchTitle + ); + await dashboardPanelActions.clickContextMenuItemByTitle( + GENERATE_CSV_DATA_TEST_SUBJ, + savedSearchTitle ); await testSubjects.existOrFail('csvReportStarted'); /* validate toast panel */ }; diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/gauge.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/gauge.ts index e6abe73345b808..ab86b163ef6ee0 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/gauge.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/gauge.ts @@ -69,13 +69,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not convert aggregation with not supported field type', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Unsupported field type'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Gauge - Unsupported field type')).to.eql( + false + ); }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Color ranges'); await lens.waitForVisualization('gaugeChart'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts index 250241dbb43fee..97ace2684cb850 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/goal.ts @@ -40,13 +40,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Goal - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Goal - Basic')).to.eql(true); }); it('should convert to Lens', async () => { - const visPanel = await panelActions.getPanelHeading('Goal - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Goal - Basic'); await lens.waitForVisualization('mtrVis'); const data = await lens.getMetricVisualizationData(); expect(data.length).to.be.equal(1); @@ -65,8 +63,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert aggregation with params', async () => { - const visPanel = await panelActions.getPanelHeading('Goal - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Goal - Agg with params'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -93,8 +90,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert sibling pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Goal - Sibling pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Goal - Sibling pipeline agg'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -122,8 +118,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Goal - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Goal - Color ranges'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts index 836dceaee8b4ea..3d292dc5f44fdd 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/heatmap.ts @@ -39,18 +39,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item if no X-axis was specified', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - With Y-Axis only'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Heatmap - With Y-Axis only')).to.eql(true); }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - With X-Axis only'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Heatmap - With X-Axis only')).to.eql(true); }); it('should convert to Lens', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - With X-Axis only'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Heatmap - With X-Axis only'); await lens.waitForVisualization('heatmapChart'); await lens.enableEchDebugState(); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -83,8 +80,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens if Y-axis is defined, but X-axis is not', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - With Y-Axis only'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Heatmap - With Y-Axis only'); await lens.waitForVisualization('heatmapChart'); await lens.enableEchDebugState(); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -98,8 +94,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should respect heatmap colors number', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - Color number'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Heatmap - Color number'); await lens.waitForVisualization('heatmapChart'); await lens.enableEchDebugState(); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); @@ -118,8 +113,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show respect heatmap custom color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Heatmap - Custom Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Heatmap - Custom Color ranges'); await lens.waitForVisualization('heatmapChart'); await lens.enableEchDebugState(); const debugState = await lens.getCurrentChartDebugState('heatmapChart'); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts index 31bbbca2e2718c..711deb6b73e4cf 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/metric.ts @@ -40,8 +40,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert to Lens', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Basic'); await lens.waitForVisualization('mtrVis'); const data = await lens.getMetricVisualizationData(); @@ -61,8 +60,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert aggregation with params', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Agg with params'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -88,8 +86,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert sibling pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Sibling pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Sibling pipeline agg'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); @@ -116,13 +113,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not convert aggregation with not supported field type', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Unsupported field type'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Metric - Unsupported field type')).to.eql( + false + ); }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Color ranges'); await lens.waitForVisualization('mtrVis'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/pie.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/pie.ts index bdd51d65b703d4..248bd25ae7f909 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/pie.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/pie.ts @@ -41,23 +41,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should hide the "Convert to Lens" menu item if no split slices were defined', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - No split slices'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Pie - No split slices')).to.eql(false); }); it('should hide the "Convert to Lens" menu item if more than 3 split slices were defined', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - 4 layers'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Pie - 4 layers')).to.eql(false); }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - 1 Split slice'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Pie - 1 Split slice')).to.eql(true); }); it('should convert aggregation with params', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Pie - Agg with params'); await lens.waitForVisualization('partitionVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -74,8 +70,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should convert terms to slice by', async () => { const expectedTableData = ['ios', 'osx', 'win 7', 'win 8', 'win xp']; - const visPanel = await panelActions.getPanelHeading('Pie - Basic count'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Pie - Basic count'); await lens.waitForVisualization('partitionVisChart'); await lens.enableEchDebugState(); @@ -91,8 +86,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert Donut type correctly', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - Basic count'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Pie - Basic count'); await lens.waitForVisualization('partitionVisChart'); const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); @@ -101,8 +95,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert Pie types correctly', async () => { - const visPanel = await panelActions.getPanelHeading('Pie - Non Donut'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Pie - Non Donut'); await lens.waitForVisualization('partitionVisChart'); const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/table.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/table.ts index 7fa380951a12d5..b02ab28fc6848a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/table.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/table.ts @@ -41,18 +41,15 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not allow converting of unsupported aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Unsupported Agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Unsupported Agg')).to.eql(false); }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Agg with params'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Table - Agg with params')).to.eql(true); }); it('should convert aggregation with params', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Agg with params'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -63,8 +60,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert total function to summary row', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Summary row'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Summary row'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -80,8 +76,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert sibling pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Sibling pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Sibling pipeline agg'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -96,8 +91,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert parent pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Parent pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Parent pipeline agg'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -112,8 +106,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert split rows and split table to split table rows', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Split rows and tables'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Split rows and tables'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); @@ -130,8 +123,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert percentage column', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Percentage Column'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Percentage Column'); await lens.waitForVisualization('lnsDataTable'); expect(await lens.getLayerCount()).to.be(1); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/xy.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/xy.ts index 4f2d9ff033da81..1ec4c040ab9161 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/xy.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group2/open_in_lens/agg_based/xy.ts @@ -41,38 +41,35 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not allow converting if dot size aggregation is defined', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Dot size metric'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('XY - Dot size metric')).to.eql(false); }); it('should not allow converting if split chart is defined', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Split chart'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('XY - Split chart')).to.eql(false); }); it('should not allow converting if more than one axis left/right/top/bottom are defined', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Multiple Y Axes'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('XY - Multiple Y Axes')).to.eql(false); }); it('should not allow converting if several split series are defined', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Multiple Split Series'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('XY - Multiple Split Series')).to.eql( + false + ); }); it('should not allow converting if sibling pipeline agg and split series are defined', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Sibling pipeline agg w/ split'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect( + await panelActions.canConvertToLensByTitle('XY - Sibling pipeline agg w/ split') + ).to.eql(false); }); it('should not allow converting of unsupported aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Unsupported Agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('XY - Unsupported Agg')).to.eql(false); }); it('should convert in different layers if metrics have different chart types', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Differing Layers'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Differing Layers'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -89,8 +86,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert in one layer if metrics have the same chart type', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Similar Layers'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Similar Layers'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -106,8 +102,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert parent pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Parent pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Parent pipeline agg'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -120,8 +115,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert sibling pipeline aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Sibling pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Sibling pipeline agg'); await lens.waitForVisualization('xyVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -138,8 +132,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should draw a reference line', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Reference line'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Reference line'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -156,8 +149,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert line stacked to area stacked chart', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Stacked lines'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Stacked lines'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -169,8 +161,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert percentage charts', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Percentage chart'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Percentage chart'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -182,8 +173,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert horizontal bar', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Horizontal Bar'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Horizontal Bar'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -195,8 +185,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert y-axis positions', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Axis positions'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Axis positions'); await lens.waitForVisualization('xyVisChart'); expect(await lens.getLayerCount()).to.be(1); @@ -217,8 +206,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert split series', async () => { - const visPanel = await panelActions.getPanelHeading('XY - Split Series'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - Split Series'); await lens.waitForVisualization('xyVisChart'); const expectedData = ['win 8', 'win xp', 'win 7', 'ios', 'osx']; @@ -237,8 +225,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert x-axis', async () => { - const visPanel = await panelActions.getPanelHeading('XY - X Axis'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('XY - X Axis'); await lens.waitForVisualization('xyVisChart'); const expectedData = ['Count']; diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts index d512d355c9bfcb..2569695008ed19 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/dashboard.ts @@ -54,8 +54,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); - const visPanel = await panelActions.getPanelHeading('My TSVB to Lens viz 1'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('My TSVB to Lens viz 1'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -93,8 +92,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await dashboard.waitForRenderComplete(); await dashboardBadgeActions.expectExistsTimeRangeBadgeAction(); - const visPanel = await panelActions.getPanelHeading('My TSVB to Lens viz 2'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('My TSVB to Lens viz 2'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/gauge.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/gauge.ts index 7cfb968d8edc1b..a7e8a3e2933701 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/gauge.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/gauge.ts @@ -36,13 +36,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Gauge - Basic')).to.eql(true); }); it('should convert to Lens', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Basic'); await lens.waitForVisualization('mtrVis'); const metricData = await lens.getMetricVisualizationData(); @@ -50,8 +48,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert metric with params', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Value count'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Value count'); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); @@ -65,18 +62,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not allow converting of unsupported metric', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Unsupported metric'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Gauge - Unsupported metric')).to.eql( + false + ); }); it('should not allow converting of invalid panel', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Invalid panel'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Gauge - Invalid panel')).to.eql(false); }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Color ranges'); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -106,15 +102,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should bring the ignore global filters configured at series level over', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Ignore global filters series'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Ignore global filters series'); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); it('should bring the ignore global filters configured at panel level over', async () => { - const visPanel = await panelActions.getPanelHeading('Gauge - Ignore global filters panel'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Gauge - Ignore global filters panel'); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/metric.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/metric.ts index a9e668160eab53..b49b3235cb67ca 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/metric.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/metric.ts @@ -35,13 +35,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Metric - Basic')).to.eql(true); }); it('should convert to Lens', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Basic'); await lens.waitForVisualization('mtrVis'); const metricData = await lens.getMetricVisualizationData(); @@ -49,8 +47,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should draw static value', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Static value'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Static value'); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -63,8 +60,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert metric agg with params', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Agg with params'); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -77,18 +73,17 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not allow converting of unsupported metric', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Unsupported metric'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Metric - Unsupported metric')).to.eql( + false + ); }); it('should not allow converting of invalid panel', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Invalid panel'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Metric - Invalid panel')).to.eql(false); }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Color ranges'); await lens.waitForVisualization('mtrVis'); await retry.try(async () => { @@ -116,16 +111,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should bring the ignore global filters configured at series level over', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Ignore global filters series'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Ignore global filters series'); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); it('should bring the ignore global filters configured at panel level over', async () => { - const visPanel = await panelActions.getPanelHeading('Metric - Ignore global filters panel'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Metric - Ignore global filters panel'); await lens.waitForVisualization('mtrVis'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/table.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/table.ts index 707452f430d2f4..a9243c7dd4f87c 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/table.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/table.ts @@ -42,43 +42,41 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should allow converting a count aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Table - Basic')).to.eql(true); }); it('should not allow converting of not valid panel', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Invalid panel'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Invalid panel')).to.eql(false); }); it('should not allow converting of unsupported aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Unsupported agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Unsupported agg')).to.eql(false); }); it('should not allow converting sibling pipeline aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Sibling pipeline agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Sibling pipeline agg')).to.eql( + false + ); }); it('should not allow converting parent pipeline aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Parent pipeline agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Parent pipeline agg')).to.eql( + false + ); }); it('should not allow converting invalid aggregation function', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Invalid agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Invalid agg')).to.eql(false); }); it('should not allow converting series with different aggregation function or aggregation by', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Different agg function'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Table - Different agg function')).to.eql( + false + ); }); it('should convert last value mode to reduced time range', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Last value mode'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Last value mode'); await lens.waitForVisualization('lnsDataTable'); await lens.openDimensionEditor('lnsDatatable_metrics > lns-dimensionTrigger'); @@ -97,8 +95,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert static value to the metric dimension', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Static value'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Static value'); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { @@ -112,8 +109,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert aggregate by to split row dimension', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Agg by'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Agg by'); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { @@ -131,8 +127,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert group by field with custom label', async () => { - const visPanel = await panelActions.getPanelHeading('Table - GroupBy label'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - GroupBy label'); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { @@ -144,8 +139,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert color ranges', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Color ranges'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Color ranges'); await lens.waitForVisualization('lnsDataTable'); await retry.try(async () => { @@ -171,8 +165,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should bring the ignore global filters configured at panel level over', async () => { - const visPanel = await panelActions.getPanelHeading('Table - Ignore global filters panel'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Table - Ignore global filters panel'); await lens.waitForVisualization('lnsDataTable'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/timeseries.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/timeseries.ts index 6a2d0d6812a7da..29ea38755788a7 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/timeseries.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/timeseries.ts @@ -38,13 +38,11 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item for a count aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Timeseries - Basic')).to.eql(true); }); it('visualizes field to Lens and loads fields to the dimesion editor', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Basic'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const dimensions = await testSubjects.findAll('lns-dimensionTrigger'); @@ -55,24 +53,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should preserve app filters in lens', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - With filter'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - With filter'); await lens.waitForVisualization('xyVisChart'); expect(await filterBar.hasFilter('extension', 'css')).to.be(true); }); it('should preserve query in lens', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - With query'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - With query'); await lens.waitForVisualization('xyVisChart'); expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); }); it('should draw a reference line', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Reference line'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Reference line'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { const layers = await find.allByCssSelector(`[data-test-subj^="lns-layerPanel-"]`); @@ -92,8 +87,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert metric agg with params', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Agg with params'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Agg with params'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -108,18 +102,19 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should not allow converting of invalid panel', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Invalid panel'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Timeseries - Invalid panel')).to.eql( + false + ); }); it('should not allow converting of unsupported aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Unsupported aggregations'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect( + await panelActions.canConvertToLensByTitle('Timeseries - Unsupported aggregations') + ).to.eql(false); }); it('should convert parent pipeline aggregation with terms', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Parent pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Parent pipeline agg'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -133,8 +128,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert sibling pipeline aggregation with terms', async () => { - const visPanel = await panelActions.getPanelHeading('Timeseries - Sibling pipeline agg'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Sibling pipeline agg'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { expect(await lens.getLayerCount()).to.be(1); @@ -148,20 +142,14 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should bring the ignore global filters configured at series level over', async () => { - const visPanel = await panelActions.getPanelHeading( - 'Timeseries - Ignore global filters series' - ); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Ignore global filters series'); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); it('should bring the ignore global filters configured at panel level over', async () => { - const visPanel = await panelActions.getPanelHeading( - 'Timeseries - Ignore global filters panel' - ); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Timeseries - Ignore global filters panel'); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); diff --git a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/top_n.ts b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/top_n.ts index e9872a6b776d32..e0286c78bfb33a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/top_n.ts +++ b/x-pack/test_serverless/functional/test_suites/common/visualizations/group3/open_in_lens/tsvb/top_n.ts @@ -37,33 +37,31 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should show the "Convert to Lens" menu item for a count aggregation', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Basic'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(true); + expect(await panelActions.canConvertToLensByTitle('Top N - Basic')).to.eql(true); }); it('should not allow converting of invalid panel', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Invalid panel'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Top N - Invalid panel')).to.eql(false); }); it('should not allow converting of unsupported aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Unsupported agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Top N - Unsupported agg')).to.eql(false); }); it('should hide the "Convert to Lens" menu item for a sibling pipeline aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Sibling pipeline agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Top N - Sibling pipeline agg')).to.eql( + false + ); }); it('should hide the "Convert to Lens" menu item for a parent pipeline aggregations', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Parent pipeline agg'); - expect(await panelActions.canConvertToLens(visPanel)).to.eql(false); + expect(await panelActions.canConvertToLensByTitle('Top N - Parent pipeline agg')).to.eql( + false + ); }); it('should convert to horizontal bar', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Horizontal bar'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Horizontal bar'); await lens.waitForVisualization('xyVisChart'); const chartSwitcher = await testSubjects.find('lnsChartSwitchPopover'); @@ -79,8 +77,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert group by to vertical axis', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Group by'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Group by'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -95,8 +92,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert last value mode to reduced time range', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Last value'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Last value'); await lens.waitForVisualization('xyVisChart'); await lens.openDimensionEditor('lnsXY_yDimensionPanel > lns-dimensionTrigger'); @@ -114,8 +110,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should convert static value to the separate layer with y dimension', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Static value'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Static value'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -129,8 +124,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('visualizes field to Lens and loads fields to the dimesion editor', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Basic'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Basic'); await lens.waitForVisualization('xyVisChart'); await retry.try(async () => { @@ -140,31 +134,27 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('should preserve app filters in lens', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - With filter'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - With filter'); await lens.waitForVisualization('xyVisChart'); expect(await filterBar.hasFilter('extension', 'css')).to.be(true); }); it('should preserve query in lens', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - With query'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - With query'); await lens.waitForVisualization('xyVisChart'); expect(await queryBar.getQueryString()).to.equal('machine.os : ios'); }); it('should bring the ignore global filters configured at series level over', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Ignore global filters series'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Ignore global filters series'); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); it('should bring the ignore global filters configured at panel level over', async () => { - const visPanel = await panelActions.getPanelHeading('Top N - Ignore global filters panel'); - await panelActions.convertToLens(visPanel); + await panelActions.convertToLensByTitle('Top N - Ignore global filters panel'); await lens.waitForVisualization('xyVisChart'); expect(await testSubjects.exists('lnsChangeIndexPatternIgnoringFilters')).to.be(true); }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts index 72fb345fe012cf..c429fef23fdd92 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/cases/attachment_framework.ts @@ -8,6 +8,8 @@ import { expect } from 'expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; +const ADD_TO_CASE_DATA_TEST_SUBJ = 'embeddablePanelAction-embeddable_addToExistingCase'; + export default ({ getPageObject, getService }: FtrProviderContext) => { const dashboard = getPageObject('dashboard'); const lens = getPageObject('lens'); @@ -22,6 +24,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const find = getService('find'); const toasts = getService('toasts'); const retry = getService('retry'); + const dashboardPanelActions = getService('dashboardPanelActions'); describe('Cases persistable attachments', function () { describe('lens visualization', () => { @@ -55,9 +58,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { it('adds lens visualization to a new case', async () => { const caseTitle = 'case created in observability from my dashboard with lens visualization'; - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.clickContextMenuItem(ADD_TO_CASE_DATA_TEST_SUBJ); await retry.waitFor('wait for the modal to open', async () => { return ( @@ -108,10 +109,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'dashboards' }); - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); - + await dashboardPanelActions.clickContextMenuItem(ADD_TO_CASE_DATA_TEST_SUBJ); // verify that solution filter is not visible await testSubjects.missingOrFail('options-filter-popover-button-owner'); diff --git a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts index e4290903bdeb9e..5e742332b1de6a 100644 --- a/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/search/cases/attachment_framework.ts @@ -8,7 +8,6 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default ({ getPageObject, getService }: FtrProviderContext) => { - const testSubjects = getService('testSubjects'); const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const dashboard = getPageObject('dashboard'); @@ -17,6 +16,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const svlCommonNavigation = getPageObject('svlCommonNavigation'); const svlCommonPage = getPageObject('svlCommonPage'); const settings = getPageObject('settings'); + const dashboardPanelActions = getService('dashboardPanelActions'); describe('persistable attachment', () => { before(async () => { @@ -49,9 +49,9 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { }); it('does not show actions to add lens visualization to case', async () => { - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.missingOrFail('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.expectMissingPanelAction( + 'embeddablePanelAction-embeddable_addToExistingCase' + ); }); }); }); diff --git a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts index 63259b94fec125..ab186f44418d03 100644 --- a/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts +++ b/x-pack/test_serverless/functional/test_suites/security/ftr/cases/attachment_framework.ts @@ -8,6 +8,8 @@ import { expect } from 'expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; +const ADD_TO_CASE_DATA_TEST_SUBJ = 'embeddablePanelAction-embeddable_addToExistingCase'; + export default ({ getPageObject, getService }: FtrProviderContext) => { const common = getPageObject('common'); const dashboard = getPageObject('dashboard'); @@ -20,6 +22,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const retry = getService('retry'); const header = getPageObject('header'); const toasts = getService('toasts'); + const dashboardPanelActions = getService('dashboardPanelActions'); describe('Cases persistable attachments', () => { describe('lens visualization', () => { @@ -47,9 +50,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const caseTitle = 'case created in security solution from my dashboard with lens visualization'; - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.clickContextMenuItem(ADD_TO_CASE_DATA_TEST_SUBJ); await retry.waitFor('wait for the modal to open', async () => { return ( @@ -106,9 +107,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { await testSubjects.click('edit-unsaved-New-Dashboard'); } - await testSubjects.click('embeddablePanelToggleMenuIcon'); - await testSubjects.click('embeddablePanelMore-mainMenu'); - await testSubjects.click('embeddablePanelAction-embeddable_addToExistingCase'); + await dashboardPanelActions.clickContextMenuItem(ADD_TO_CASE_DATA_TEST_SUBJ); // verify that solution filter is not visible await testSubjects.missingOrFail('options-filter-popover-button-owner'); From bc88e54c16ff4ed2586d2146a396563cf1482a3d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:51:27 +1000 Subject: [PATCH 71/92] [api-docs] 2024-08-15 Daily api_docs build (#190576) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/800 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.devdocs.json | 97 ++- api_docs/dataset_quality.mdx | 7 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.devdocs.json | 4 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.devdocs.json | 10 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.devdocs.json | 93 ++- api_docs/fleet.mdx | 4 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/investigate.devdocs.json | 29 +- api_docs/investigate.mdx | 4 +- api_docs/investigate_app.devdocs.json | 62 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 4 + api_docs/kbn_core_http_server.mdx | 2 +- ...kbn_core_http_server_internal.devdocs.json | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- .../kbn_core_http_server_mocks.devdocs.json | 4 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- .../kbn_core_ui_settings_browser.devdocs.json | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- .../kbn_core_ui_settings_common.devdocs.json | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- .../kbn_core_usage_data_server.devdocs.json | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.devdocs.json | 76 ++- api_docs/kbn_entities_schema.mdx | 7 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- ...tr_common_functional_services.devdocs.json | 90 +++ .../kbn_ftr_common_functional_services.mdx | 4 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- .../kbn_investigation_shared.devdocs.json | 643 ++++++++++++++++++ api_docs/kbn_investigation_shared.mdx | 33 + api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- ...kbn_management_settings_types.devdocs.json | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.devdocs.json | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- .../kbn_server_route_repository.devdocs.json | 129 ++-- api_docs/kbn_server_route_repository.mdx | 4 +- .../kbn_server_route_repository_client.mdx | 2 +- ...server_route_repository_utils.devdocs.json | 58 +- .../kbn_server_route_repository_utils.mdx | 4 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.devdocs.json | 12 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 21 + api_docs/observability.mdx | 4 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 23 +- api_docs/presentation_panel.devdocs.json | 2 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 738 files changed, 1977 insertions(+), 875 deletions(-) create mode 100644 api_docs/kbn_investigation_shared.devdocs.json create mode 100644 api_docs/kbn_investigation_shared.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 4469afa2e8508b..a8be5d17b1affa 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 3902e52ecbae42..3407e422ae59e2 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 28730ac0fb9d32..73691eb54232e9 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-08-14 +date: 2024-08-15 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 ef7c9b68cf194d..051abb9ff37d1b 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-08-14 +date: 2024-08-15 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 994f67e3baca65..cbdff68927f4c7 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index c2616561d2e209..481c284f2a1af7 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-08-14 +date: 2024-08-15 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 3364fd5aceb7b8..3c4333654b9fa5 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index cf9cfbc61ab0c5..12cd8523b76f25 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-08-14 +date: 2024-08-15 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 d1080dcd63eafc..093f51c342cbee 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-08-14 +date: 2024-08-15 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 1bdb61ee19099b..8529737ec93e66 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-08-14 +date: 2024-08-15 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 1e07dc29979193..35554b418a4d45 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-08-14 +date: 2024-08-15 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 913da46da385d0..299bffbc18671d 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-08-14 +date: 2024-08-15 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 ac7bc60b14c8c1..b0400b3e4032d1 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-08-14 +date: 2024-08-15 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 11dac530992bcd..003bf7e3d712f8 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-08-14 +date: 2024-08-15 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 7a1fbd6d6ed536..bfb652b05fb8ca 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-08-14 +date: 2024-08-15 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 cd7880b96c7785..1276cae5255d96 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-08-14 +date: 2024-08-15 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 2f3d003ebb2089..ae4cbfb1c4dbbf 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-08-14 +date: 2024-08-15 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 5cbf9631fc557b..17eaaab8fb7528 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-08-14 +date: 2024-08-15 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 865fee25ddf295..c5b417ba1302a1 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 9ed4d84ac7ed79..70d984e4078db9 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 6c37cab99adeae..88af3dbd6a7bc3 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 1b781897b7a2b5..3e4ad439d53e5c 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-08-14 +date: 2024-08-15 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 a5de868b7733dd..e883c92cce4d6e 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-08-14 +date: 2024-08-15 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 2722cc2f0be5bf..ddd3dadd1e5255 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index d31fb3025796f3..4941edfa36c5e8 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 43d20508552ba5..7404cd6f293458 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-08-14 +date: 2024-08-15 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 50938b38570028..879502859240c3 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-08-14 +date: 2024-08-15 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 3d2a1f8171a4a0..0a5d0ca470f5aa 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-08-14 +date: 2024-08-15 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 7f47158264a192..d0cc5922004e20 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-08-14 +date: 2024-08-15 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 46c6de156af562..67a8406b8b0f3e 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-08-14 +date: 2024-08-15 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 9fa05ec9eadd09..0d5249f4b27ae6 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-08-14 +date: 2024-08-15 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 03b29b8db86268..73ca7bbf5636a0 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.devdocs.json b/api_docs/dataset_quality.devdocs.json index 4e12827e79f3f8..cf7d2839e63361 100644 --- a/api_docs/dataset_quality.devdocs.json +++ b/api_docs/dataset_quality.devdocs.json @@ -94,7 +94,62 @@ "DatasetQualityPublicState", "> | undefined; }" ], - "path": "x-pack/plugins/observability_solution/dataset_quality/public/controller/create_controller.ts", + "path": "x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality/create_controller.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, + { + "parentPluginId": "datasetQuality", + "id": "def-public.DatasetQualityPluginStart.DatasetQualityDetails", + "type": "CompoundType", + "tags": [], + "label": "DatasetQualityDetails", + "description": [], + "signature": [ + "React.ComponentClass<", + "DatasetQualityDetailsProps", + ", any> | React.FunctionComponent<", + "DatasetQualityDetailsProps", + ">" + ], + "path": "x-pack/plugins/observability_solution/dataset_quality/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "datasetQuality", + "id": "def-public.DatasetQualityPluginStart.createDatasetQualityDetailsController", + "type": "Function", + "tags": [], + "label": "createDatasetQualityDetailsController", + "description": [], + "signature": [ + "({ initialState, }: { initialState: ", + "DatasetQualityDetailsPublicStateUpdate", + "; }) => Promise<", + "DatasetQualityDetailsController", + ">" + ], + "path": "x-pack/plugins/observability_solution/dataset_quality/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "datasetQuality", + "id": "def-public.DatasetQualityPluginStart.createDatasetQualityDetailsController.$1", + "type": "Object", + "tags": [], + "label": "__0", + "description": [], + "signature": [ + "{ initialState: ", + "DatasetQualityDetailsPublicStateUpdate", + "; }" + ], + "path": "x-pack/plugins/observability_solution/dataset_quality/public/controller/dataset_quality_details/create_controller.ts", "deprecated": false, "trackAdoption": false } @@ -115,7 +170,41 @@ }, "common": { "classes": [], - "functions": [], + "functions": [ + { + "parentPluginId": "datasetQuality", + "id": "def-common.indexNameToDataStreamParts", + "type": "Function", + "tags": [], + "label": "indexNameToDataStreamParts", + "description": [], + "signature": [ + "(dataStreamName: string) => { type: \"metrics\" | \"synthetics\" | \"traces\" | \"logs\" | \"profiling\"; dataset: string; namespace: string; }" + ], + "path": "x-pack/plugins/observability_solution/dataset_quality/common/utils/dataset_name.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "datasetQuality", + "id": "def-common.indexNameToDataStreamParts.$1", + "type": "string", + "tags": [], + "label": "dataStreamName", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/plugins/observability_solution/dataset_quality/common/utils/dataset_name.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + } + ], "interfaces": [ { "parentPluginId": "datasetQuality", @@ -169,7 +258,7 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { path: { dataStream: string; }; }; }) => Promise<{ createdOn?: number | null | undefined; integration?: string | undefined; }>; } & ", + " & { params: { path: { dataStream: string; }; }; }) => Promise<{ createdOn?: number | null | undefined; integration?: string | undefined; datasetUserPrivileges?: ({ canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }) | undefined; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/details\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/details\"; params?: ", "TypeC", @@ -330,7 +419,7 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "DatasetQualityRouteHandlerResources", - " & { params: { path: { dataStream: string; }; }; }) => Promise<{ createdOn?: number | null | undefined; integration?: string | undefined; }>; } & ", + " & { params: { path: { dataStream: string; }; }; }) => Promise<{ createdOn?: number | null | undefined; integration?: string | undefined; datasetUserPrivileges?: ({ canMonitor: boolean; } & { canRead: boolean; canViewIntegrations: boolean; }) | undefined; }>; } & ", "DatasetQualityRouteCreateOptions", "; \"GET /internal/dataset_quality/data_streams/{dataStream}/details\": { endpoint: \"GET /internal/dataset_quality/data_streams/{dataStream}/details\"; params?: ", "TypeC", diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index d8b1f0d27e8755..6dc265610218c5 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 10 | 0 | 10 | 5 | +| 15 | 0 | 15 | 8 | ## Client @@ -36,6 +36,9 @@ Contact [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux ## Common +### Functions + + ### Interfaces diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 7e748eaead0cff..825e2cf537b533 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 79cc9134de2168..f837fdc079b96f 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 1767ab186d53f2..c905752aa40edd 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index f6bf395ae0f341..325e40d4ad8106 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-08-14 +date: 2024-08-15 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 5669ab1d8aebc5..f164dd45da3c89 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-08-14 +date: 2024-08-15 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 4253d0232c85f7..4bbb7f8b4c03e6 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 0f95045f9a5972..e0b24b861225a9 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 447643e07670f6..ab47bd0560b2ba 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-08-14 +date: 2024-08-15 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 434019e1b72519..c97bac86ed8b57 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-08-14 +date: 2024-08-15 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 2f366ce07e0aee..a8f0320e4e8a1c 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -8980,7 +8980,7 @@ "section": "def-public.PresentationPanelProps", "text": "PresentationPanelProps" }, - ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined; hidePanelChrome?: boolean | undefined; onAnyStateChange?: ((state: ", + ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideLoader\" | \"hideHeader\" | \"hideInspector\"> | undefined; hidePanelChrome?: boolean | undefined; onAnyStateChange?: ((state: ", { "pluginId": "@kbn/presentation-containers", "scope": "public", @@ -9094,7 +9094,7 @@ "section": "def-public.PresentationPanelProps", "text": "PresentationPanelProps" }, - ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideHeader\" | \"hideInspector\"> | undefined" + ", \"showShadow\" | \"showBorder\" | \"showBadges\" | \"showNotifications\" | \"hideLoader\" | \"hideHeader\" | \"hideInspector\"> | undefined" ], "path": "src/plugins/embeddable/public/react_embeddable_system/react_embeddable_renderer.tsx", "deprecated": false, diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 384d0b43d54217..089bff25c5441f 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-08-14 +date: 2024-08-15 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 bdd40b0f1f7ab1..7e03efed2b51db 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-08-14 +date: 2024-08-15 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 5cedbfc206f65d..c44105c486f339 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-08-14 +date: 2024-08-15 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 b257354955e3d3..39896455ddad52 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index d7e0a6263c7a5f..acdab44aa03d93 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index dcbe4bae12c0da..fb2ff6ef1dd2e0 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index adffb55eaff37f..809d3fa5c1ad06 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index 69266588556977..f8fe0a30c64ece 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 53ebfc4ae29f1a..2a234664e1c547 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 4aa5aab4d538a2..c88934a752a094 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-08-14 +date: 2024-08-15 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 2d3df4b949804f..c102640fef0a9f 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-08-14 +date: 2024-08-15 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 78f84fc0c67103..f5bf7edd882908 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index f68b3e9956140d..7f35ba69046a20 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-08-14 +date: 2024-08-15 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 f82eaf68f5ff06..ac71f5e0d0bb1d 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-08-14 +date: 2024-08-15 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 72b23787c35400..539928511bc266 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-08-14 +date: 2024-08-15 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 d169d5f0fe2880..364df4568be09d 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-08-14 +date: 2024-08-15 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 475949de9d6194..7dbf2e8b9f6e4d 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-08-14 +date: 2024-08-15 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 3997fd35d64668..5e269b0ce92492 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-08-14 +date: 2024-08-15 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 924596f823b2af..5458009e6139ad 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-08-14 +date: 2024-08-15 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 ddeedf5126ac55..2a6327874838fd 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-08-14 +date: 2024-08-15 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 ba0f2ae59177a7..17cf44b8c2fa42 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-08-14 +date: 2024-08-15 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 f8ee49181b7fc9..75ae8e864f3429 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-08-14 +date: 2024-08-15 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 24c67acb3a07ef..5f809b2a1a0367 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-08-14 +date: 2024-08-15 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 805de1dcdd1954..9718cc8318411d 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-08-14 +date: 2024-08-15 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 243328c151d672..ecfb01c30a6a0e 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-08-14 +date: 2024-08-15 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 98528c56580279..c1027ecc9425a4 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-08-14 +date: 2024-08-15 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 3eaeb9b360dade..649e6b0b151e3f 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-08-14 +date: 2024-08-15 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 08c9556b096bf1..18539f8008afa7 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-08-14 +date: 2024-08-15 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 db574772206aa9..31807710c8a919 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.devdocs.json b/api_docs/fields_metadata.devdocs.json index b328d61dc2d341..fb8dbbf87b1f8c 100644 --- a/api_docs/fields_metadata.devdocs.json +++ b/api_docs/fields_metadata.devdocs.json @@ -336,7 +336,7 @@ "label": "pick", "description": [], "signature": [ - "(props: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"beta\" | \"required\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => { name?: string | undefined; } & { allowed_values?: ({ description: string; name: string; } & { expected_event_types?: string[] | undefined; beta?: string | undefined; })[] | undefined; beta?: string | undefined; dashed_name?: string | undefined; description?: string | undefined; doc_values?: boolean | undefined; example?: unknown; expected_values?: string[] | undefined; flat_name?: string | undefined; format?: string | undefined; ignore_above?: number | undefined; index?: boolean | undefined; input_format?: string | undefined; level?: string | undefined; multi_fields?: { flat_name: string; name: string; type: string; }[] | undefined; normalize?: string[] | undefined; object_type?: string | undefined; original_fieldset?: string | undefined; output_format?: string | undefined; output_precision?: number | undefined; pattern?: string | undefined; required?: boolean | undefined; scaling_factor?: number | undefined; short?: string | undefined; source?: \"unknown\" | \"ecs\" | \"integration\" | \"metadata\" | undefined; type?: string | undefined; documentation_url?: string | undefined; }" + "(props: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => { name?: string | undefined; } & { allowed_values?: ({ description: string; name: string; } & { expected_event_types?: string[] | undefined; beta?: string | undefined; })[] | undefined; beta?: string | undefined; dashed_name?: string | undefined; description?: string | undefined; doc_values?: boolean | undefined; example?: unknown; expected_values?: string[] | undefined; flat_name?: string | undefined; format?: string | undefined; ignore_above?: number | undefined; index?: boolean | undefined; input_format?: string | undefined; level?: string | undefined; multi_fields?: { flat_name: string; name: string; type: string; }[] | undefined; normalize?: string[] | undefined; object_type?: string | undefined; original_fieldset?: string | undefined; output_format?: string | undefined; output_precision?: number | undefined; pattern?: string | undefined; required?: boolean | undefined; scaling_factor?: number | undefined; short?: string | undefined; source?: \"unknown\" | \"ecs\" | \"integration\" | \"metadata\" | undefined; type?: string | undefined; documentation_url?: string | undefined; }" ], "path": "x-pack/plugins/fields_metadata/common/fields_metadata/models/field_metadata.ts", "deprecated": false, @@ -350,7 +350,7 @@ "label": "props", "description": [], "signature": [ - "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"beta\" | \"required\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" + "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" ], "path": "x-pack/plugins/fields_metadata/common/fields_metadata/models/field_metadata.ts", "deprecated": false, @@ -454,7 +454,7 @@ "label": "pick", "description": [], "signature": [ - "(attributes: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"beta\" | \"required\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => Record" + "(attributes: (\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]) => Record" ], "path": "x-pack/plugins/fields_metadata/common/fields_metadata/models/fields_metadata_dictionary.ts", "deprecated": false, @@ -468,7 +468,7 @@ "label": "attributes", "description": [], "signature": [ - "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"beta\" | \"required\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" + "(\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\")[]" ], "path": "x-pack/plugins/fields_metadata/common/fields_metadata/models/fields_metadata_dictionary.ts", "deprecated": false, @@ -605,7 +605,7 @@ "label": "FieldAttribute", "description": [], "signature": [ - "\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"beta\" | \"required\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\"" + "\"source\" | \"type\" | \"normalize\" | \"short\" | \"format\" | \"name\" | \"index\" | \"description\" | \"pattern\" | \"doc_values\" | \"ignore_above\" | \"required\" | \"beta\" | \"level\" | \"allowed_values\" | \"dashed_name\" | \"example\" | \"expected_values\" | \"flat_name\" | \"input_format\" | \"multi_fields\" | \"object_type\" | \"original_fieldset\" | \"output_format\" | \"output_precision\" | \"scaling_factor\" | \"documentation_url\"" ], "path": "x-pack/plugins/fields_metadata/common/fields_metadata/types.ts", "deprecated": false, diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 4ae8167b5294fa..0ae64143be8a70 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index d8fddfcfb3567a..c6db63febadab8 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-08-14 +date: 2024-08-15 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 bbf1f5456821c2..e9681161e8066d 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-08-14 +date: 2024-08-15 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 e7efa01e0b597f..069b17b7330fe0 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-08-14 +date: 2024-08-15 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 26e0c62d97f404..fed34bc34fc5d5 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -6322,7 +6322,15 @@ "section": "def-server.SavedObjectsClientContract", "text": "SavedObjectsClientContract" }, - ", id: string, options?: { standalone: boolean; } | undefined) => Promise<", + ", id: string, options?: { standalone?: boolean | undefined; agentPolicy?: ", + { + "pluginId": "fleet", + "scope": "common", + "docId": "kibFleetPluginApi", + "section": "def-common.AgentPolicy", + "text": "AgentPolicy" + }, + " | undefined; } | undefined) => Promise<", { "pluginId": "fleet", "scope": "common", @@ -6376,7 +6384,15 @@ "label": "options", "description": [], "signature": [ - "{ standalone: boolean; } | undefined" + "{ standalone?: boolean | undefined; agentPolicy?: ", + { + "pluginId": "fleet", + "scope": "common", + "docId": "kibFleetPluginApi", + "section": "def-common.AgentPolicy", + "text": "AgentPolicy" + }, + " | undefined; } | undefined" ], "path": "x-pack/plugins/fleet/server/services/agent_policy.ts", "deprecated": false, @@ -6544,7 +6560,7 @@ }, ", { perPage, kuery }?: ", "FetchAllAgentPolicyIdsOptions", - ") => AsyncIterable" + ") => Promise>" ], "path": "x-pack/plugins/fleet/server/services/index.ts", "deprecated": false, @@ -6605,7 +6621,7 @@ }, ", { perPage, kuery, sortOrder, sortField, fields, }?: ", "FetchAllAgentPoliciesOptions", - ") => AsyncIterable<", + ") => Promise" + "[]>>" ], "path": "x-pack/plugins/fleet/server/services/index.ts", "deprecated": false, @@ -11809,7 +11825,7 @@ }, ", options?: ", "PackagePolicyClientFetchAllItemIdsOptions", - " | undefined) => AsyncIterable" + " | undefined) => Promise>" ], "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", "deprecated": false, @@ -11875,7 +11891,7 @@ }, ", options?: ", "PackagePolicyClientFetchAllItemsOptions", - " | undefined) => AsyncIterable<", + " | undefined) => Promise" + "[]>>" ], "path": "x-pack/plugins/fleet/server/services/package_policy_service.ts", "deprecated": false, @@ -23194,6 +23210,20 @@ "path": "x-pack/plugins/fleet/common/types/rest_spec/common.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.ListWithKuery.fields", + "type": "Array", + "tags": [], + "label": "fields", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/rest_spec/common.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -26455,7 +26485,7 @@ "label": "AGENT_POLICY_SAVED_OBJECT_TYPE", "description": [], "signature": [ - "\"ingest-agent-policies\"" + "\"fleet-agent-policies\"" ], "path": "x-pack/plugins/fleet/common/constants/agent_policy.ts", "deprecated": false, @@ -27481,6 +27511,36 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "fleet", + "id": "def-common.LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE", + "type": "string", + "tags": [], + "label": "LEGACY_AGENT_POLICY_SAVED_OBJECT_TYPE", + "description": [], + "signature": [ + "\"ingest-agent-policies\"" + ], + "path": "x-pack/plugins/fleet/common/constants/agent_policy.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE", + "type": "string", + "tags": [], + "label": "LEGACY_PACKAGE_POLICY_SAVED_OBJECT_TYPE", + "description": [], + "signature": [ + "\"ingest-package-policies\"" + ], + "path": "x-pack/plugins/fleet/common/constants/package_policy.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "fleet", "id": "def-common.MESSAGE_SIGNING_KEYS_SAVED_OBJECT_TYPE", @@ -27581,21 +27641,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "fleet", - "id": "def-common.PACKAGE_POLICY_SAVED_OBJECT_TYPE", - "type": "string", - "tags": [], - "label": "PACKAGE_POLICY_SAVED_OBJECT_TYPE", - "description": [], - "signature": [ - "\"ingest-package-policies\"" - ], - "path": "x-pack/plugins/fleet/common/constants/package_policy.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "fleet", "id": "def-common.PackageInfo", diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 5b87506863f5f5..5c1ef9f450425a 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1357 | 5 | 1234 | 74 | +| 1359 | 5 | 1236 | 74 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 969241c90eeac6..1874619388d74a 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-08-14 +date: 2024-08-15 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 0f5d29c7fcf999..16c8b85d3d0a66 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-08-14 +date: 2024-08-15 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 2eb5aeea15cf6a..66289d83653a51 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-08-14 +date: 2024-08-15 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 3db08e9aaab26b..bd7fd20b8fa3af 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-08-14 +date: 2024-08-15 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 b1ae10d14a1292..c452efde292a5f 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 64cf1e62d4b1cf..000af797ae8c73 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index b22fd063c90d3e..f49f40f936df9b 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 92ef577ade8a95..af3177c66e2ea9 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-08-14 +date: 2024-08-15 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 ff80df769a6413..c48bd7c4b4005c 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-08-14 +date: 2024-08-15 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 17c37334896f61..3b19df67ba2c85 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 100c3cc2d1d50c..c71d4f7c36c54f 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 15fe7a0a1a0087..cadb9ac2670bb9 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/investigate.devdocs.json b/api_docs/investigate.devdocs.json index 9fa79e2fc3c7b0..6661ec5358168c 100644 --- a/api_docs/investigate.devdocs.json +++ b/api_docs/investigate.devdocs.json @@ -1152,24 +1152,6 @@ } ], "returnComment": [] - }, - { - "parentPluginId": "investigate", - "id": "def-public.InvestigatePublicStart.useInvestigateWidget", - "type": "Function", - "tags": [], - "label": "useInvestigateWidget", - "description": [], - "signature": [ - "() => ", - "UseInvestigateWidgetApi", - "<{}, {}> | undefined" - ], - "path": "x-pack/plugins/observability_solution/investigate/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] } ], "lifecycle": "start", @@ -1789,19 +1771,10 @@ { "parentPluginId": "investigate", "id": "def-common.InvestigationNote.createdBy", - "type": "Object", + "type": "string", "tags": [], "label": "createdBy", "description": [], - "signature": [ - { - "pluginId": "@kbn/core-security-common", - "scope": "common", - "docId": "kibKbnCoreSecurityCommonPluginApi", - "section": "def-common.AuthenticatedUser", - "text": "AuthenticatedUser" - } - ], "path": "x-pack/plugins/observability_solution/investigate/common/types.ts", "deprecated": false, "trackAdoption": false diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 011097d14e40c7..1f0264be631eb6 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 112 | 0 | 112 | 6 | +| 111 | 0 | 111 | 5 | ## Client diff --git a/api_docs/investigate_app.devdocs.json b/api_docs/investigate_app.devdocs.json index d8b91a87450ee7..b667febacd1a20 100644 --- a/api_docs/investigate_app.devdocs.json +++ b/api_docs/investigate_app.devdocs.json @@ -50,7 +50,7 @@ "label": "InvestigateAppServerRouteRepository", "description": [], "signature": [ - "{ \"GET /api/observability/investigations/{id} 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{id} 2023-10-31\"; params?: ", + "{ \"GET /api/observability/investigations/{id}/notes 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{id}/notes 2023-10-31\"; params?: ", "TypeC", "<{ path: ", "TypeC", @@ -58,19 +58,55 @@ "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; parameters: { timeRange: { from: number; to: number; }; }; }>; } & ", + " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }[]>; } & ", + "InvestigateAppRouteCreateOptions", + "; \"POST /api/observability/investigations/{id}/notes 2023-10-31\": { endpoint: \"POST /api/observability/investigations/{id}/notes 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; body: ", + "TypeC", + "<{ content: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { id: string; }; body: { content: string; }; }; }) => Promise<{ id: string; content: string; createdAt: number; createdBy: string; }>; } & ", + "InvestigateAppRouteCreateOptions", + "; \"DELETE /api/observability/investigations/{id} 2023-10-31\": { endpoint: \"DELETE /api/observability/investigations/{id} 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { id: string; }; }; }) => Promise; } & ", + "InvestigateAppRouteCreateOptions", + "; \"GET /api/observability/investigations/{id} 2023-10-31\": { endpoint: \"GET /api/observability/investigations/{id} 2023-10-31\"; params?: ", + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }> | undefined; handler: ({}: ", + "InvestigateAppRouteHandlerResources", + " & { params: { path: { id: string; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"GET /api/observability/investigations 2023-10-31\": { endpoint: \"GET /api/observability/investigations 2023-10-31\"; params?: ", "PartialC", "<{ query: ", "PartialC", - "<{ page: ", + "<{ alertId: ", + "StringC", + "; page: ", "StringC", "; perPage: ", "StringC", "; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params?: { query?: { page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; parameters: { timeRange: { from: number; to: number; }; }; }[]; }>; } & ", + " & { params?: { query?: { alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; } | undefined; } | undefined; }) => Promise<{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; \"POST /api/observability/investigations 2023-10-31\": { endpoint: \"POST /api/observability/investigations 2023-10-31\"; params?: ", "TypeC", @@ -80,7 +116,7 @@ "StringC", "; title: ", "StringC", - "; parameters: ", + "; params: ", "TypeC", "<{ timeRange: ", "TypeC", @@ -88,9 +124,21 @@ "NumberC", "; to: ", "NumberC", - "; }>; }>; }>; }> | undefined; handler: ({}: ", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; }>; }> | undefined; handler: ({}: ", "InvestigateAppRouteHandlerResources", - " & { params: { body: { id: string; title: string; parameters: { timeRange: { from: number; to: number; }; }; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; parameters: { timeRange: { from: number; to: number; }; }; }>; } & ", + " & { params: { body: { id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }; }; }) => Promise<{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }>; } & ", "InvestigateAppRouteCreateOptions", "; }" ], diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 0a293531d288de..3ce17c994dee45 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 6945fca8517fda..f1d88e2e477be5 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-08-14 +date: 2024-08-15 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 d825c18507e057..70f8ffdf6132cf 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-08-14 +date: 2024-08-15 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 a7cf39daf17e9a..2232a3f758396e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index cf190be4996239..28baab631e413d 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 9ce12851d693c4..743a01780020c5 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index c29dfeff9b5a1b..3cda36fbe9c436 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index b9d1c3e3c4a54b..14e81d7a333993 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index ff4c8e52f74323..b06310ba64812f 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-08-14 +date: 2024-08-15 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 c0f51ae3b546a2..ec4df07be8bbf8 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index f76d9fe54a2bca..58778877423c2a 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index ce8c8702492a0a..51491f2540f6cf 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 05f194fc71c74c..115bac7bcc6a8d 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-08-14 +date: 2024-08-15 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 03a590c496c4b5..3e8be9f50a124d 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 8e5199c3c97718..745266ed044396 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index cd255e8aba3290..15e6490e05ce4b 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index c5e02ed95ee2f9..94145af23bf924 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 5afe53bce34add..8365c41d1f6d20 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-08-14 +date: 2024-08-15 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 ba486da2e413e3..40418c168cea8a 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 28855d2d82fb5b..95724c9d7f9c07 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 700f89e83d28a6..682c252447d0cc 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 6ba33f6911c822..a4b8d87d84a76f 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 868cd848f99ae4..38cf1e308b7bb6 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-08-14 +date: 2024-08-15 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 5c971fb508c8c1..eae1d643c316e1 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-08-14 +date: 2024-08-15 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 182bea37822380..e29b294938d8ec 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-08-14 +date: 2024-08-15 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 f787c0fcab79e1..a571fe2f55d042 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-08-14 +date: 2024-08-15 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 d36f034425ff9c..37e0e14c47474e 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-08-14 +date: 2024-08-15 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 545c880b21b335..5d94b6f6fecd3b 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-08-14 +date: 2024-08-15 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 f273d7e884bc7d..ad7404c3d0ada6 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-08-14 +date: 2024-08-15 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 5eeca824aae90b..f0dee65a16a9a6 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-08-14 +date: 2024-08-15 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 95aaccf8a209ec..e39e633807858f 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-08-14 +date: 2024-08-15 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 89b97e15d61c45..6ea2ce0ba619de 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-08-14 +date: 2024-08-15 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 f16268fc691b90..c57dcf0912d0f4 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-08-14 +date: 2024-08-15 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 1ddfd772fbe606..805c04b79449c4 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-08-14 +date: 2024-08-15 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 f841b4f1dedaed..0fffb2bc9c5a27 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-08-14 +date: 2024-08-15 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 c009e2996c45f8..c9f4c252c855d1 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-08-14 +date: 2024-08-15 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 975989cb17a702..936d57ab7cc6b1 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-08-14 +date: 2024-08-15 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 0537d907829c2e..3cc245ee7766a1 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-08-14 +date: 2024-08-15 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 422c9dc3ecd3e9..9702db387af5aa 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-08-14 +date: 2024-08-15 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 d65a147f530a2a..640e4bcf239824 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-08-14 +date: 2024-08-15 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 f0af22686cb55e..6a773925e067c4 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-08-14 +date: 2024-08-15 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 1a6d0496fb185b..437a73729733e3 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-08-14 +date: 2024-08-15 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_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 386db5e5499f06..60674defb8cc7f 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index e040ecd7e63412..ed434dd604b141 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index e48b3e26661433..de3424174fe9c4 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-08-14 +date: 2024-08-15 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 f4b9decbc851cb..5831583a11c327 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-08-14 +date: 2024-08-15 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 bcb522f8a92a2c..f632f313075a52 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-08-14 +date: 2024-08-15 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 b7ea73b69039c1..988b7c66dcfa53 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 44f736994f0c8a..2a56bbd371dfd5 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 0d4f902971d1da..6bd715094701df 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-08-14 +date: 2024-08-15 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 e4ad35b4fd80b5..9fe1b7bb34f1e5 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-08-14 +date: 2024-08-15 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 29dfa47a7a0051..585fc02c35f33d 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-08-14 +date: 2024-08-15 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 79e2e94a469cf4..42b420b74320fb 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-08-14 +date: 2024-08-15 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 833722768ab417..a4ffdb2eecc4bf 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-08-14 +date: 2024-08-15 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 dad7a733b93778..db9a5802d88295 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-08-14 +date: 2024-08-15 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 b8b89e6d381bec..5520f2e12714a2 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-08-14 +date: 2024-08-15 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 202e7c21775b02..24811235ab208b 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-08-14 +date: 2024-08-15 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 995ec4f0b75d10..4258e7e1367b58 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-08-14 +date: 2024-08-15 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 47736149cf1d24..d4805afd8a0bf7 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-08-14 +date: 2024-08-15 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 eeff041b831639..a905054f86ae61 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-08-14 +date: 2024-08-15 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 918b4897c1c82f..c0236806cea002 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-08-14 +date: 2024-08-15 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 32df345b857a7f..163baff216a3b7 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-08-14 +date: 2024-08-15 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 d5aef7fee726a3..27188981b03041 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-08-14 +date: 2024-08-15 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 1c9738541c2757..a9c4e4c1596143 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-08-14 +date: 2024-08-15 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 1584ffcd7379b9..d669c6ce0d2fee 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-08-14 +date: 2024-08-15 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 25eae5c1c4c16c..32469b9a342b96 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-08-14 +date: 2024-08-15 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 ebc51615d9e8e4..f4aca90c7e8bcd 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-08-14 +date: 2024-08-15 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 df1235c5105f83..03dc80220fc71c 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-08-14 +date: 2024-08-15 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 1022a8f5d48f28..c2c27cc508954a 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-08-14 +date: 2024-08-15 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 6141fe740a194c..36a20daf2dae2c 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-08-14 +date: 2024-08-15 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 08632fba94c164..5e0d6eef8eade7 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-08-14 +date: 2024-08-15 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 a129ab5dc1f499..1c7235ab59ab24 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-08-14 +date: 2024-08-15 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 cd6d96f92af9b2..09d587ee6a742c 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-08-14 +date: 2024-08-15 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 4517d9a92da865..29d716b7ee7ae8 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-08-14 +date: 2024-08-15 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 d7671e366d0cc5..9f7d9e5c52c68b 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-08-14 +date: 2024-08-15 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 d5b7d7a8cbcfb4..26d2bc7acb8f69 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-08-14 +date: 2024-08-15 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 72a8aee0893e94..dc107a236e79d4 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-08-14 +date: 2024-08-15 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 17478f45865353..31955a7d57531d 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-08-14 +date: 2024-08-15 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 91ae8c25d31599..db1361bd25ee23 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-08-14 +date: 2024-08-15 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 1d088c96b46efb..4bd9975550e776 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-08-14 +date: 2024-08-15 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 3085393b972d98..0afe7bf3b4bf27 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-08-14 +date: 2024-08-15 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 6df41573214d3d..63508664c0b366 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-08-14 +date: 2024-08-15 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 419860d3edd0ec..45417f97145d66 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-08-14 +date: 2024-08-15 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 c96b55d4eeb8ef..ba05df095cbf47 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-08-14 +date: 2024-08-15 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 d36424f8390be2..b4f0ab5cc733e9 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-08-14 +date: 2024-08-15 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 4437cc885cc118..1cbab0e962a999 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-08-14 +date: 2024-08-15 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 e3e90d7e6dc454..460c50524de177 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-08-14 +date: 2024-08-15 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 e4c0e68bc150c3..c4dbe8e0c15efe 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-08-14 +date: 2024-08-15 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 3e312d0285c39e..511dd09f5ed2a3 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-08-14 +date: 2024-08-15 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 59c581155479a0..de80940d3b04e1 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-08-14 +date: 2024-08-15 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 9d3f6025521e28..568f7e531a431d 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-08-14 +date: 2024-08-15 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 2a06b64c257ad7..8f714a161dc9c0 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-08-14 +date: 2024-08-15 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 300f2e8c35d818..aa85932951c1cf 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-08-14 +date: 2024-08-15 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 e6a23c3d779c94..4251a25631dd8f 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-08-14 +date: 2024-08-15 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 a1784310cea1c6..23d11920aec2f5 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-08-14 +date: 2024-08-15 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 c6127eea237e9f..a12fcedb6c572e 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-08-14 +date: 2024-08-15 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 fa12213bdc9ec1..b27242b0314b29 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-08-14 +date: 2024-08-15 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 687b453d68012d..6f653fd8117632 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-08-14 +date: 2024-08-15 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 1d3c14efd9e256..0316c8ebc01ba0 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-08-14 +date: 2024-08-15 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 610549aac909aa..be47bdee7196da 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-08-14 +date: 2024-08-15 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 82a78960e36d02..b984ab56aefbbf 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-08-14 +date: 2024-08-15 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 0ba664d6f4b613..7cd5ce73a5a6b8 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-08-14 +date: 2024-08-15 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 c3414513cc3fe4..6c61641da4e65b 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-08-14 +date: 2024-08-15 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 8949dd69d12deb..1f15f50c89e33a 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-08-14 +date: 2024-08-15 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 c8861c20020f02..0fc620c849f9b4 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-08-14 +date: 2024-08-15 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 17b957f5f90cef..0453318f8938ea 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-08-14 +date: 2024-08-15 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 6fc8034ebbe8cd..07040d76239a48 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-08-14 +date: 2024-08-15 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 920c9d63e00e15..7a96167de4a91b 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-08-14 +date: 2024-08-15 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 62d89d074e84fa..65ba45aa291f62 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-08-14 +date: 2024-08-15 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 e3c1893c81ad3d..bd18a7f10523ce 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-08-14 +date: 2024-08-15 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 8677378bbeadbf..3d355d9c42bc03 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-08-14 +date: 2024-08-15 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 5581c3377785a0..594ffeaa488846 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-08-14 +date: 2024-08-15 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 6bc52a068c6c0e..7c01d1b4a43526 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-08-14 +date: 2024-08-15 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 fe95460dde0039..8521e80353e5b9 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-08-14 +date: 2024-08-15 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 3093cbbc4078d2..18bba970f69f88 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-08-14 +date: 2024-08-15 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 eb10dce094e623..74ad66217992c9 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-08-14 +date: 2024-08-15 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 e5929c5f55ac9b..957ef9a30cbbd5 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-08-14 +date: 2024-08-15 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 30b19ede4a9c96..40955486aa66ea 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-08-14 +date: 2024-08-15 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 3c916b4e485320..13063069da100a 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-08-14 +date: 2024-08-15 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 9c76bd94dbc444..ed5a5ef7e30bb1 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -8602,6 +8602,10 @@ "plugin": "observability", "path": "x-pack/plugins/observability_solution/observability/server/lib/annotations/register_annotation_apis.ts" }, + { + "plugin": "logsShared", + "path": "x-pack/plugins/observability_solution/logs_shared/server/routes/deprecations/migrate_log_view_settings.ts" + }, { "plugin": "enterpriseSearch", "path": "x-pack/plugins/enterprise_search/server/routes/enterprise_search/crawler/crawler_extraction_rules.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index e0fe8c084cf7ef..cc10e6f5ac5515 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_core_http_server_internal.devdocs.json index 255b6d7785d106..836cd9c2eff111 100644 --- a/api_docs/kbn_core_http_server_internal.devdocs.json +++ b/api_docs/kbn_core_http_server_internal.devdocs.json @@ -1470,7 +1470,7 @@ "label": "HttpConfigType", "description": [], "signature": [ - "{ readonly uuid?: string | undefined; readonly basePath?: string | undefined; readonly publicBaseUrl?: string | undefined; readonly name: string; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; redirectHttpFromPort?: number | undefined; } & { enabled: boolean; keystore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; readonly host: string; readonly http2: Readonly<{} & { allowUnsecure: boolean; }>; readonly protocol: \"http1\" | \"http2\"; readonly port: number; readonly compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; readonly cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; readonly versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; readonly autoListen: boolean; readonly shutdownTimeout: moment.Duration; readonly cdn: Readonly<{ url?: string | null | undefined; } & {}>; readonly oas: Readonly<{} & { enabled: boolean; }>; readonly securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; readonly customResponseHeaders: Record; readonly maxPayload: ", + "{ readonly uuid?: string | undefined; readonly basePath?: string | undefined; readonly publicBaseUrl?: string | undefined; readonly name: string; readonly ssl: Readonly<{ key?: string | undefined; certificateAuthorities?: string | string[] | undefined; certificate?: string | undefined; keyPassphrase?: string | undefined; redirectHttpFromPort?: number | undefined; } & { enabled: boolean; keystore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"required\" | \"optional\"; }>; readonly host: string; readonly http2: Readonly<{} & { allowUnsecure: boolean; }>; readonly protocol: \"http1\" | \"http2\"; readonly port: number; readonly compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; readonly cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; readonly versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; readonly autoListen: boolean; readonly shutdownTimeout: moment.Duration; readonly cdn: Readonly<{ url?: string | null | undefined; } & {}>; readonly oas: Readonly<{} & { enabled: boolean; }>; readonly securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; readonly customResponseHeaders: Record; readonly maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 55dfd59543221b..c0894045efbbfd 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_core_http_server_mocks.devdocs.json index 085616047e5238..235e68eaeb05e5 100644 --- a/api_docs/kbn_core_http_server_mocks.devdocs.json +++ b/api_docs/kbn_core_http_server_mocks.devdocs.json @@ -19,7 +19,7 @@ "label": "createConfigService", "description": [], "signature": [ - "({ server, externalUrl, csp, }?: Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; http2: Readonly<{} & { allowUnsecure: boolean; }>; protocol: \"http1\" | \"http2\"; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | null | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", + "({ server, externalUrl, csp, }?: Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"required\" | \"optional\"; }>; host: string; http2: Readonly<{} & { allowUnsecure: boolean; }>; protocol: \"http1\" | \"http2\"; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | null | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -56,7 +56,7 @@ "label": "{\n server,\n externalUrl,\n csp,\n}", "description": [], "signature": [ - "Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }>; host: string; http2: Readonly<{} & { allowUnsecure: boolean; }>; protocol: \"http1\" | \"http2\"; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | null | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", + "Partial<{ server: Partial; truststore: Readonly<{ password?: string | undefined; path?: string | undefined; } & {}>; cipherSuites: string[]; supportedProtocols: string[]; clientAuthentication: \"none\" | \"required\" | \"optional\"; }>; host: string; http2: Readonly<{} & { allowUnsecure: boolean; }>; protocol: \"http1\" | \"http2\"; port: number; compression: Readonly<{ referrerWhitelist?: string[] | undefined; } & { enabled: boolean; brotli: Readonly<{} & { enabled: boolean; quality: number; }>; }>; cors: Readonly<{} & { enabled: boolean; allowCredentials: boolean; allowOrigin: string[] | \"*\"[]; }>; versioned: Readonly<{} & { useVersionResolutionStrategyForInternalPaths: string[]; versionResolution: \"none\" | \"oldest\" | \"newest\"; strictClientVersionCheck: boolean; }>; autoListen: boolean; shutdownTimeout: moment.Duration; cdn: Readonly<{ url?: string | null | undefined; } & {}>; oas: Readonly<{} & { enabled: boolean; }>; securityResponseHeaders: Readonly<{ permissionsPolicyReportOnly?: string | null | undefined; } & { referrerPolicy: \"origin\" | \"no-referrer\" | \"no-referrer-when-downgrade\" | \"origin-when-cross-origin\" | \"same-origin\" | \"strict-origin\" | \"strict-origin-when-cross-origin\" | \"unsafe-url\" | null; strictTransportSecurity: string | null; xContentTypeOptions: \"nosniff\" | null; permissionsPolicy: string | null; disableEmbedding: boolean; crossOriginOpenerPolicy: \"same-origin\" | \"unsafe-none\" | \"same-origin-allow-popups\" | null; }>; customResponseHeaders: Record; maxPayload: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 6cc6a9ec278a4a..57b699a217657d 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-08-14 +date: 2024-08-15 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 4c12007e55a766..6e7ea960f7d224 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-08-14 +date: 2024-08-15 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 d0d12389c7178d..c7aa26cd326512 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-08-14 +date: 2024-08-15 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 ce2686c649a3ac..ae5ab23e9ca02d 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-08-14 +date: 2024-08-15 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 b783cc41940864..30724f650911cc 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-08-14 +date: 2024-08-15 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 5728e3cc005f63..32dd050ab70cf5 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-08-14 +date: 2024-08-15 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 bb20be08ad4c8e..c20767d1c7bb55 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-08-14 +date: 2024-08-15 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 547ffdd69eca26..a5a16eab25bee5 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-08-14 +date: 2024-08-15 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 d0edef79a76b26..979166f9c11ed3 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-08-14 +date: 2024-08-15 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 7d77d5e24fb6f1..d7c11d27d31eb8 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-08-14 +date: 2024-08-15 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 5fdbc8055d3b48..41912a18a7bfe7 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-08-14 +date: 2024-08-15 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 191a32521fc660..9dd1dd3acddd4c 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-08-14 +date: 2024-08-15 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 399da03b2b6574..ce5b95c549585c 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-08-14 +date: 2024-08-15 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 fc06e2b33f6d8a..9255162360c38b 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-08-14 +date: 2024-08-15 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 6be785521f4b14..9050ce43abf806 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-08-14 +date: 2024-08-15 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 5fbda638427ff8..678266d01f408c 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-08-14 +date: 2024-08-15 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 7df6828c40885f..1ad13b66d64564 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-08-14 +date: 2024-08-15 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 b409ba8d206f3a..6593541071bf19 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-08-14 +date: 2024-08-15 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 d61be66e9d4a58..1d3acfc1f43ef5 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-08-14 +date: 2024-08-15 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 a0ff22b30f19db..c924a510cee15a 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-08-14 +date: 2024-08-15 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 530de0043c591f..8516531054d93b 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-08-14 +date: 2024-08-15 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 8e98ac9abf9eda..315ca60ee7491f 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-08-14 +date: 2024-08-15 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 31c4059faaf8c9..bbb1073f9f5029 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-08-14 +date: 2024-08-15 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 5a08ad6e8c54b5..72f92876217859 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-08-14 +date: 2024-08-15 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 02784c7ce719d5..8730ba1a3a584a 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-08-14 +date: 2024-08-15 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 c267b3c51d2aa3..9807d6670255e6 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-08-14 +date: 2024-08-15 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 7a5e9bf191bcea..38f998c178a7a2 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-08-14 +date: 2024-08-15 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 80d3af1a45f69e..be3d3249c68952 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-08-14 +date: 2024-08-15 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 736b1ed0c9a2ac..3652c9510d8ec2 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-08-14 +date: 2024-08-15 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 afc2ed420002e3..21e1c3fe17293c 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-08-14 +date: 2024-08-15 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 2f5c05145c957e..ca12fd4740befd 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-08-14 +date: 2024-08-15 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 3ffe1a9932e380..d0997424d08d02 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-08-14 +date: 2024-08-15 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 c2ffa734b753d9..e625bf751cbaf6 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-08-14 +date: 2024-08-15 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 331f91c4bf7f49..f27b5910fe6f6f 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-08-14 +date: 2024-08-15 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 e91da1f10ac6cf..d785f5aea36c62 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-08-14 +date: 2024-08-15 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 f19bee48cd072e..1e49cb09b77380 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-08-14 +date: 2024-08-15 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 4dda3179e08d84..5def6b77f19de2 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-08-14 +date: 2024-08-15 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 e43c863367b038..56ecb856b4703a 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-08-14 +date: 2024-08-15 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 7126f822719ac3..66806e68e60dfd 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-08-14 +date: 2024-08-15 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 60ca129133b247..f72f88c4ee9d23 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-08-14 +date: 2024-08-15 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 24a9342d5a6781..69387391124ce8 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-08-14 +date: 2024-08-15 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 10160a2967e716..aa0d580a7b0729 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-08-14 +date: 2024-08-15 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 69b558602c8861..cf55716b6ea255 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-08-14 +date: 2024-08-15 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 cf3e1c0866b29e..bda8cdcfc754b1 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-08-14 +date: 2024-08-15 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 0b0a7d5bd13c83..98ddd1f3f18bf3 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-08-14 +date: 2024-08-15 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 309c558ce9318b..658f26d6455299 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-08-14 +date: 2024-08-15 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 a609abf7602e7c..6641c50d5d7636 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-08-14 +date: 2024-08-15 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 e708581e009af7..b18f6435b19a83 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-08-14 +date: 2024-08-15 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 5ef725ee9ab40b..96765b5c37180d 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-08-14 +date: 2024-08-15 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 0fa8a985d4dd81..b1265ca4603e3d 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-08-14 +date: 2024-08-15 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 b85f34fceaa18e..862d960d90e74b 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-08-14 +date: 2024-08-15 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 c82f9fb065933f..41bac6c101aded 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-08-14 +date: 2024-08-15 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 c7bb08a67399c7..13ca2ffd42aac0 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-08-14 +date: 2024-08-15 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 f2545251537ae7..8bbf4bfe74cf2c 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-08-14 +date: 2024-08-15 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 781d2095018b48..5bbcc48abf9efd 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-08-14 +date: 2024-08-15 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 79d015f2c125d8..6717129be6f1ee 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-08-14 +date: 2024-08-15 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 028db3c5261fbb..05f2375931e748 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-08-14 +date: 2024-08-15 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 ce791980c09edc..796275c72efd09 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 594679420732f7..4110f16924db5f 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-08-14 +date: 2024-08-15 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 ae4e0f437aabd2..b394045ab54cf1 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-08-14 +date: 2024-08-15 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 b53eb72fa03b53..3ec9286f045ba8 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-08-14 +date: 2024-08-15 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 933e6ec6c02dfa..c440cd03b4940e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index d84d2e403efcac..36a80f84fd8e63 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index b3968ed953bce7..add8d93fd72100 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index d0d0854b6e6d43..ba2c9890b6644b 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index d626994ebfcc12..83f09922b8b417 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 299cc88feb6013..56acb3d73e3f60 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 5688d6ea29bbf1..21fc77f8d9f4fd 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 98e8ffa3b3d975..572ace4ef0edb5 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index f1871608d728f2..e356e651ae1199 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-08-14 +date: 2024-08-15 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 49a5aebb95f108..f1ce47298ae15e 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-08-14 +date: 2024-08-15 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 2dee59e6983f34..00b9cc40d48e21 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-08-14 +date: 2024-08-15 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 402dcbfc2d2810..0192ec25b301f8 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-08-14 +date: 2024-08-15 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 587624d5a1bc5d..f8c86e17dc6169 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-08-14 +date: 2024-08-15 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 3addae91cc20b8..d4172469497812 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-08-14 +date: 2024-08-15 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 de5e8575ef6b38..657df776244a4e 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-08-14 +date: 2024-08-15 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 56a2d343acb6e2..feb0266abb28a3 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 947791ceb6caeb..27cf725d8fdaa6 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-08-14 +date: 2024-08-15 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 62af46d086f928..263d7c396f3cf8 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-08-14 +date: 2024-08-15 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 e39e2c5a2e491e..83325b855f2cf3 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-08-14 +date: 2024-08-15 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 96d4e4b50ba954..3aa805d5801462 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-08-14 +date: 2024-08-15 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 100b3d39141dde..27fcf4534441c1 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_core_ui_settings_browser.devdocs.json index c938dfe76cea10..4a500591da24b7 100644 --- a/api_docs/kbn_core_ui_settings_browser.devdocs.json +++ b/api_docs/kbn_core_ui_settings_browser.devdocs.json @@ -597,7 +597,7 @@ "section": "def-common.GetUiSettingsContext", "text": "GetUiSettingsContext" }, - " | undefined) => Promise) | undefined; category?: string[] | undefined; metric?: { type: string; name: string; } | undefined; optionLabels?: Record | undefined; requiresPageReload?: boolean | undefined; readonly?: boolean | undefined; readonlyMode?: ", + " | undefined) => Promise) | undefined; category?: string[] | undefined; metric?: { type: string; name: string; } | undefined; readonly?: boolean | undefined; optionLabels?: Record | undefined; requiresPageReload?: boolean | undefined; readonlyMode?: ", { "pluginId": "@kbn/core-ui-settings-common", "scope": "common", diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index a0ade194dc49f9..c3b46d68158bd1 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-08-14 +date: 2024-08-15 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 b760ba42d3f7b2..b4dc479e50eecd 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-08-14 +date: 2024-08-15 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 fb17694a3bbf49..3b24b6bd441680 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_core_ui_settings_common.devdocs.json index 83a41545ecaf4c..7e6ddbebbc0c56 100644 --- a/api_docs/kbn_core_ui_settings_common.devdocs.json +++ b/api_docs/kbn_core_ui_settings_common.devdocs.json @@ -657,7 +657,7 @@ "\nUI element type to represent the settings." ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"undefined\" | \"color\" | \"image\" | \"select\" | \"json\" | \"array\" | \"markdown\"" + "\"string\" | \"number\" | \"boolean\" | \"undefined\" | \"color\" | \"array\" | \"image\" | \"select\" | \"json\" | \"markdown\"" ], "path": "packages/core/ui-settings/core-ui-settings-common/src/ui_settings.ts", "deprecated": false, diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 3b9167822ecce0..970e8be656de7a 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-08-14 +date: 2024-08-15 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 73be4ba662ba39..600d22ac8a7bd3 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-08-14 +date: 2024-08-15 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 27b8b39f222102..f700b3e2b5ae2d 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-08-14 +date: 2024-08-15 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 9321c709598020..efc8cd12ba44e4 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_core_usage_data_server.devdocs.json index 3071e12fefa093..4ba0e9204206de 100644 --- a/api_docs/kbn_core_usage_data_server.devdocs.json +++ b/api_docs/kbn_core_usage_data_server.devdocs.json @@ -47,7 +47,7 @@ "label": "http", "description": [], "signature": [ - "{ basePathConfigured: boolean; maxPayloadInBytes: number; rewriteBasePath: boolean; keepaliveTimeout: number; socketTimeout: number; compression: { enabled: boolean; referrerWhitelistConfigured: boolean; }; xsrf: { disableProtection: boolean; allowlistConfigured: boolean; }; requestId: { allowFromAnyIp: boolean; ipAllowlistConfigured: boolean; }; ssl: { certificateAuthoritiesConfigured: boolean; certificateConfigured: boolean; cipherSuites: string[]; keyConfigured: boolean; keystoreConfigured: boolean; truststoreConfigured: boolean; redirectHttpFromPortConfigured: boolean; supportedProtocols: string[]; clientAuthentication: \"none\" | \"optional\" | \"required\"; }; securityResponseHeaders: { strictTransportSecurity: string; xContentTypeOptions: string; referrerPolicy: string; permissionsPolicyConfigured: boolean; disableEmbedding: boolean; crossOriginOpenerPolicy: string; }; }" + "{ basePathConfigured: boolean; maxPayloadInBytes: number; rewriteBasePath: boolean; keepaliveTimeout: number; socketTimeout: number; compression: { enabled: boolean; referrerWhitelistConfigured: boolean; }; xsrf: { disableProtection: boolean; allowlistConfigured: boolean; }; requestId: { allowFromAnyIp: boolean; ipAllowlistConfigured: boolean; }; ssl: { certificateAuthoritiesConfigured: boolean; certificateConfigured: boolean; cipherSuites: string[]; keyConfigured: boolean; keystoreConfigured: boolean; truststoreConfigured: boolean; redirectHttpFromPortConfigured: boolean; supportedProtocols: string[]; clientAuthentication: \"none\" | \"required\" | \"optional\"; }; securityResponseHeaders: { strictTransportSecurity: string; xContentTypeOptions: string; referrerPolicy: string; permissionsPolicyConfigured: boolean; disableEmbedding: boolean; crossOriginOpenerPolicy: string; }; }" ], "path": "packages/core/usage-data/core-usage-data-server/src/core_usage_data.ts", "deprecated": false, diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 4597e28f87b8a2..533c23b74dc273 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-08-14 +date: 2024-08-15 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 8d0afabeaaac23..fae397313e700b 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-08-14 +date: 2024-08-15 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 e8bf5cbe3661c1..fac8740b8a65f8 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 696f252dad7e70..51e2fedac785c2 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 0ffdc2a4452477..4ab85cfb132d9e 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index ebae6b16abbd7e..0e86960d5c88a3 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index b515d4a51064fa..c2658dc24360fe 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index fcc903e1258367..cc54f960c0ed41 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 069dfd96179282..9c91ef028044a2 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index ff9423e85ef3b5..8d2e2f90274815 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 3a5896d7b93542..30ea82fcdf973d 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 8342a8b987325c..411c6aa4bfd389 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-08-14 +date: 2024-08-15 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 f3138f5bd215bc..ba7caf225b0770 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-08-14 +date: 2024-08-15 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 4a2bbd73cb4cdf..49014266640a0e 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-08-14 +date: 2024-08-15 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 e87adb37489504..c9f86604d9fe61 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-08-14 +date: 2024-08-15 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 d7df137332a953..447ccd14c26954 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-08-14 +date: 2024-08-15 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 a692461e615d68..3825ac55d26119 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-08-14 +date: 2024-08-15 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 ae8832af213d28..3c16ae4691a42e 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-08-14 +date: 2024-08-15 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 cfe809c8edf57d..3d480bdc2573b6 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-08-14 +date: 2024-08-15 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 b54eccd484701f..e146b1a6187bd0 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-08-14 +date: 2024-08-15 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 0d88da1c80548b..153195e7e9ddde 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-08-14 +date: 2024-08-15 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 dc589862d72780..51a37cbbe08da3 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-08-14 +date: 2024-08-15 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 c6abd45474915b..0113e2cfc6fa25 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-08-14 +date: 2024-08-15 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 94c60229a108b2..0889e48dc4201c 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 873c5768789b48..c77fd008c1b138 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index c76d3bcb8d2f70..a57e9a0268b87e 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-08-14 +date: 2024-08-15 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 d05ec31a86b8c2..4a04b0593fea6d 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-08-14 +date: 2024-08-15 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 ade73e0c6af2f8..cc63969ae07fa9 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-08-14 +date: 2024-08-15 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 a4fd365ef9d00e..2e5bf313c03b18 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index c1d7721c058300..d51f677efd3931 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index fe310f0fde92ee..cb779ae8363023 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index a4baea4b5f4485..d0c0cd046fa0fe 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-08-14 +date: 2024-08-15 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 64249431ef31a6..70d6fcfa2be6e2 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-08-14 +date: 2024-08-15 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 e235a1bc75cc2a..f9f6226b329311 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-08-14 +date: 2024-08-15 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 8c8b9d31738088..1bc110494ab321 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-08-14 +date: 2024-08-15 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 42528ac8c24e78..dd6da8022fc52c 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-08-14 +date: 2024-08-15 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 2e43f5d9656807..1ca06bf23c1150 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-08-14 +date: 2024-08-15 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 3b1ac9bf8ae1bf..a271495aa95f89 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-08-14 +date: 2024-08-15 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 fe3dac4a5c7a28..eae5a94bde335d 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-08-14 +date: 2024-08-15 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 53dccec4d6cda0..ce64f002fdfe57 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-08-14 +date: 2024-08-15 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 ec6492ec707676..4729c4fe06840b 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-08-14 +date: 2024-08-15 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 94d6ea6b5ce0d5..28dbf01cf402d8 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-08-14 +date: 2024-08-15 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 578a627c5084b0..0b62bfd8d7afd2 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-08-14 +date: 2024-08-15 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 0e07b9e495a0d2..af077931fc52fd 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-08-14 +date: 2024-08-15 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 90ebb41f3b151a..4a8110f6932684 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-08-14 +date: 2024-08-15 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 acf97f7bfa45a8..b339e159d99f81 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-08-14 +date: 2024-08-15 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 8bd9ca40cfd94b..1da99b4b69f08f 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-08-14 +date: 2024-08-15 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 a0687d3a26f68a..1ceb9433f4974c 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.devdocs.json b/api_docs/kbn_entities_schema.devdocs.json index 29fa10784d55be..ec4d41a68b2b75 100644 --- a/api_docs/kbn_entities_schema.devdocs.json +++ b/api_docs/kbn_entities_schema.devdocs.json @@ -119,7 +119,43 @@ "initialIsOpen": false } ], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.MetadataRecord", + "type": "Interface", + "tags": [], + "label": "MetadataRecord", + "description": [], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.MetadataRecord.Unnamed", + "type": "IndexSignature", + "tags": [], + "label": "[key: string]: string | string[] | MetadataRecord", + "description": [], + "signature": [ + "[key: string]: string | string[] | ", + { + "pluginId": "@kbn/entities-schema", + "scope": "common", + "docId": "kibKbnEntitiesSchemaPluginApi", + "section": "def-common.MetadataRecord", + "text": "MetadataRecord" + } + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [ { "parentPluginId": "@kbn/entities-schema", @@ -448,6 +484,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.entityBaseSchema", + "type": "Object", + "tags": [], + "label": "entityBaseSchema", + "description": [], + "signature": [ + "Zod.ZodObject<{ id: Zod.ZodString; type: Zod.ZodString; identityFields: Zod.ZodArray; displayName: Zod.ZodString; metrics: Zod.ZodRecord; definitionVersion: Zod.ZodString; schemaVersion: Zod.ZodString; definitionId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/entities-schema", "id": "def-common.entityDefinitionSchema", @@ -527,7 +578,22 @@ "label": "entityHistorySchema", "description": [], "signature": [ - "Zod.ZodIntersection; displayName: Zod.ZodString; metrics: Zod.ZodRecord; }, \"strip\", Zod.ZodTypeAny, { id: string; metrics: Record; displayName: string; identityFields: string[]; }, { id: string; metrics: Record; displayName: string; identityFields: string[]; }>; }, { \"@timestamp\": Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { \"@timestamp\": string; entity: { id: string; metrics: Record; displayName: string; identityFields: string[]; }; }, { \"@timestamp\": string; entity: { id: string; metrics: Record; displayName: string; identityFields: string[]; }; }>, Zod.ZodRecord>>" + "Zod.ZodIntersection; displayName: Zod.ZodString; metrics: Zod.ZodRecord; definitionVersion: Zod.ZodString; schemaVersion: Zod.ZodString; definitionId: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }>; }, \"strip\", Zod.ZodTypeAny, { '@timestamp': string; entity: { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }; }, { '@timestamp': string; entity: { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; }; }>, Zod.ZodType>" + ], + "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/entities-schema", + "id": "def-common.entityLatestSchema", + "type": "Object", + "tags": [], + "label": "entityLatestSchema", + "description": [], + "signature": [ + "Zod.ZodIntersection; displayName: Zod.ZodString; metrics: Zod.ZodRecord; definitionVersion: Zod.ZodString; schemaVersion: Zod.ZodString; definitionId: Zod.ZodString; }, { lastSeenTimestamp: Zod.ZodString; firstSeenTimestamp: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; lastSeenTimestamp: string; firstSeenTimestamp: string; }, { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; lastSeenTimestamp: string; firstSeenTimestamp: string; }>; }, \"strip\", Zod.ZodTypeAny, { entity: { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; lastSeenTimestamp: string; firstSeenTimestamp: string; }; }, { entity: { id: string; type: string; metrics: Record; displayName: string; identityFields: string[]; definitionVersion: string; schemaVersion: string; definitionId: string; lastSeenTimestamp: string; firstSeenTimestamp: string; }; }>, Zod.ZodType>" ], "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, @@ -536,13 +602,13 @@ }, { "parentPluginId": "@kbn/entities-schema", - "id": "def-common.entitySummarySchema", + "id": "def-common.entityMetadataSchema", "type": "Object", "tags": [], - "label": "entitySummarySchema", + "label": "entityMetadataSchema", "description": [], "signature": [ - "Zod.ZodIntersection; displayName: Zod.ZodString; metrics: Zod.ZodRecord; }, \"strip\", Zod.ZodTypeAny, { id: string; metrics: Record; displayName: string; identityFields: string[]; }, { id: string; metrics: Record; displayName: string; identityFields: string[]; }>; }, { lastSeenTimestamp: Zod.ZodString; firstSeenTimestamp: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { entity: { id: string; metrics: Record; displayName: string; identityFields: string[]; }; lastSeenTimestamp: string; firstSeenTimestamp: string; }, { entity: { id: string; metrics: Record; displayName: string; identityFields: string[]; }; lastSeenTimestamp: string; firstSeenTimestamp: string; }>, Zod.ZodRecord>>" + "Zod.ZodType" ], "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index b1d666abb44933..68aaf59a832c6f 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entiti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 37 | 0 | 37 | 0 | +| 41 | 0 | 41 | 0 | ## Common @@ -31,6 +31,9 @@ Contact [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entiti ### Functions +### Interfaces + + ### Enums diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index ecfa0afae08604..b40c2a6ffe5598 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-08-14 +date: 2024-08-15 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 66fd1bb3ef5c19..6f1479b4fa791e 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-08-14 +date: 2024-08-15 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 2ba3d435e777db..41f40094951bc6 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-08-14 +date: 2024-08-15 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 33a923dbb31570..61f904c7034ce8 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-08-14 +date: 2024-08-15 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 35a129281b3b87..d817bc3739c2cd 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-08-14 +date: 2024-08-15 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 b82e944d5faaba..3df0008960def9 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index a8e7f0fce6851d..e57e1087edaf99 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 0b75ef3a77bea3..150fb0079a5db0 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 21c9216cbfbc81..59643c1de8a0c1 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index a16d216be6c134..cf03e9301ffed0 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-08-14 +date: 2024-08-15 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 3204e428681631..a8b07858c8522e 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-08-14 +date: 2024-08-15 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 d56616e3ecaa32..f1bdf10b14c3f9 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-08-14 +date: 2024-08-15 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 bc313f154c9f5a..937ba6f1307c6f 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-08-14 +date: 2024-08-15 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 c203cd6f22e540..e4a4ebe600ca0e 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-08-14 +date: 2024-08-15 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 cdc5ae55aa8012..215c040e9d6232 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-08-14 +date: 2024-08-15 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 4041820fc7153d..0f499f4443685e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.devdocs.json b/api_docs/kbn_ftr_common_functional_services.devdocs.json index 9c00accd180000..e7b25e08d24cd3 100644 --- a/api_docs/kbn_ftr_common_functional_services.devdocs.json +++ b/api_docs/kbn_ftr_common_functional_services.devdocs.json @@ -787,6 +787,96 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SamlAuthProviderType", + "type": "Type", + "tags": [], + "label": "SamlAuthProviderType", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.AsyncInstance", + "text": "AsyncInstance" + }, + "<{ getInteractiveUserSessionCookieWithRoleScope(role: string): Promise; getM2MApiCredentialsWithRoleScope(role: string): Promise<{ Cookie: string; }>; getEmail(role: string): Promise; getUserData(role: string): Promise<", + "UserProfile", + ">; createM2mApiKeyWithDefaultRoleScope(): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; createM2mApiKeyWithRoleScope(role: string): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; invalidateM2mApiKeyWithRoleScope(roleCredentials: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + "): Promise; getCommonRequestHeader(): { 'kbn-xsrf': string; }; getInternalRequestHeader(): ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.InternalRequestHeader", + "text": "InternalRequestHeader" + }, + "; DEFAULT_ROLE: string; }> & { getInteractiveUserSessionCookieWithRoleScope(role: string): Promise; getM2MApiCredentialsWithRoleScope(role: string): Promise<{ Cookie: string; }>; getEmail(role: string): Promise; getUserData(role: string): Promise<", + "UserProfile", + ">; createM2mApiKeyWithDefaultRoleScope(): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; createM2mApiKeyWithRoleScope(role: string): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; invalidateM2mApiKeyWithRoleScope(roleCredentials: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + "): Promise; getCommonRequestHeader(): { 'kbn-xsrf': string; }; getInternalRequestHeader(): ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.InternalRequestHeader", + "text": "InternalRequestHeader" + }, + "; DEFAULT_ROLE: string; }" + ], + "path": "packages/kbn-ftr-common-functional-services/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/ftr-common-functional-services", "id": "def-common.SupertestWithoutAuthProviderType", diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index bc8b91a80912d5..e67fad73853093 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 46 | 0 | 31 | 1 | +| 47 | 0 | 32 | 1 | ## Common diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 82d05814b2dc9a..1518d73203060f 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-08-14 +date: 2024-08-15 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 b7c1c0af278260..8f905a95ccf28f 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-08-14 +date: 2024-08-15 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 48cd8f137bdd3f..61c21ba3381780 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-08-14 +date: 2024-08-15 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 8ed89fa6dd4382..267ff37229616e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index d2acb9209bb614..8c38007ef79238 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 6665438d1c2753..1e8c3b8998d3e1 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-08-14 +date: 2024-08-15 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 48da095ff7b4b3..75ed79d3d22a3e 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-08-14 +date: 2024-08-15 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 9e97fc3ba1d41d..32fdaf741e5921 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-08-14 +date: 2024-08-15 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 06d1fd3a3ef3ab..44c58caf63a817 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-08-14 +date: 2024-08-15 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 eb6e11bd76a63d..c46fb794426ba5 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-08-14 +date: 2024-08-15 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 44309a5750ce3e..4b0ce9df4d0258 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-08-14 +date: 2024-08-15 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 f7cbd3987539db..90b554c3c8f669 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-08-14 +date: 2024-08-15 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 08216c7621cc1c..47dab9db4a33f6 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-08-14 +date: 2024-08-15 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 f2264ca1e1e314..f253217d81d40e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 771b2912e6c0cc..de78583ba1bd7a 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index dab3035263a520..670319687e4ca0 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 8ef1c088c6e7e9..e92410b6edfeee 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-08-14 +date: 2024-08-15 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 9c90055b34b5ad..a33e1a738e596e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.devdocs.json b/api_docs/kbn_investigation_shared.devdocs.json new file mode 100644 index 00000000000000..e735dbaca9c864 --- /dev/null +++ b/api_docs/kbn_investigation_shared.devdocs.json @@ -0,0 +1,643 @@ +{ + "id": "@kbn/investigation-shared", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationInput", + "type": "Type", + "tags": [], + "label": "CreateInvestigationInput", + "description": [], + "signature": [ + "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationNoteInput", + "type": "Type", + "tags": [], + "label": "CreateInvestigationNoteInput", + "description": [], + "signature": [ + "{ content: string; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationNoteParams", + "type": "Type", + "tags": [], + "label": "CreateInvestigationNoteParams", + "description": [], + "signature": [ + "{ content: string; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationNoteResponse", + "type": "Type", + "tags": [], + "label": "CreateInvestigationNoteResponse", + "description": [], + "signature": [ + "{ id: string; content: string; createdAt: number; createdBy: string; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationParams", + "type": "Type", + "tags": [], + "label": "CreateInvestigationParams", + "description": [], + "signature": [ + "{ id: string; title: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.CreateInvestigationResponse", + "type": "Type", + "tags": [], + "label": "CreateInvestigationResponse", + "description": [], + "signature": [ + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.DeleteInvestigationParams", + "type": "Type", + "tags": [], + "label": "DeleteInvestigationParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/delete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.FindInvestigationsParams", + "type": "Type", + "tags": [], + "label": "FindInvestigationsParams", + "description": [], + "signature": [ + "{ alertId?: string | undefined; page?: string | undefined; perPage?: string | undefined; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.FindInvestigationsResponse", + "type": "Type", + "tags": [], + "label": "FindInvestigationsResponse", + "description": [], + "signature": [ + "{ page: number; perPage: number; total: number; results: { id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }[]; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.GetInvestigationNotesResponse", + "type": "Type", + "tags": [], + "label": "GetInvestigationNotesResponse", + "description": [], + "signature": [ + "{ id: string; content: string; createdAt: number; createdBy: string; }[]" + ], + "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.GetInvestigationParams", + "type": "Type", + "tags": [], + "label": "GetInvestigationParams", + "description": [], + "signature": [ + "{ id: string; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.GetInvestigationResponse", + "type": "Type", + "tags": [], + "label": "GetInvestigationResponse", + "description": [], + "signature": [ + "{ id: string; title: string; createdAt: number; createdBy: string; params: { timeRange: { from: number; to: number; }; }; origin: { type: \"alert\"; id: string; } | { type: \"blank\"; }; status: \"closed\" | \"ongoing\"; notes: { id: string; content: string; createdAt: number; createdBy: string; }[]; }" + ], + "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [ + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.alertOriginSchema", + "type": "Object", + "tags": [], + "label": "alertOriginSchema", + "description": [], + "signature": [ + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/origin.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.blankOriginSchema", + "type": "Object", + "tags": [], + "label": "blankOriginSchema", + "description": [], + "signature": [ + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/origin.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationNoteParamsSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationNoteParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; body: ", + "TypeC", + "<{ content: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationNoteResponseSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationNoteResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/create_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationParamsSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ body: ", + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.createInvestigationResponseSchema", + "type": "Object", + "tags": [], + "label": "createInvestigationResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; status: ", + "UnionC", + "<[", + "LiteralC", + "<\"ongoing\">, ", + "LiteralC", + "<\"closed\">]>; notes: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/create.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.deleteInvestigationParamsSchema", + "type": "Object", + "tags": [], + "label": "deleteInvestigationParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/delete.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.findInvestigationsParamsSchema", + "type": "Object", + "tags": [], + "label": "findInvestigationsParamsSchema", + "description": [], + "signature": [ + "PartialC", + "<{ query: ", + "PartialC", + "<{ alertId: ", + "StringC", + "; page: ", + "StringC", + "; perPage: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.findInvestigationsResponseSchema", + "type": "Object", + "tags": [], + "label": "findInvestigationsResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ page: ", + "NumberC", + "; perPage: ", + "NumberC", + "; total: ", + "NumberC", + "; results: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; status: ", + "UnionC", + "<[", + "LiteralC", + "<\"ongoing\">, ", + "LiteralC", + "<\"closed\">]>; notes: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>; }>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/find.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationNotesParamsSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationNotesParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationNotesResponseSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationNotesResponseSchema", + "description": [], + "signature": [ + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>" + ], + "path": "packages/kbn-investigation-shared/src/schema/get_notes.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationParamsSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationParamsSchema", + "description": [], + "signature": [ + "TypeC", + "<{ path: ", + "TypeC", + "<{ id: ", + "StringC", + "; }>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/investigation-shared", + "id": "def-common.getInvestigationResponseSchema", + "type": "Object", + "tags": [], + "label": "getInvestigationResponseSchema", + "description": [], + "signature": [ + "TypeC", + "<{ id: ", + "StringC", + "; title: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; params: ", + "TypeC", + "<{ timeRange: ", + "TypeC", + "<{ from: ", + "NumberC", + "; to: ", + "NumberC", + "; }>; }>; origin: ", + "UnionC", + "<[", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"alert\">; id: ", + "StringC", + "; }>, ", + "TypeC", + "<{ type: ", + "LiteralC", + "<\"blank\">; }>]>; status: ", + "UnionC", + "<[", + "LiteralC", + "<\"ongoing\">, ", + "LiteralC", + "<\"closed\">]>; notes: ", + "ArrayC", + "<", + "TypeC", + "<{ id: ", + "StringC", + "; content: ", + "StringC", + "; createdAt: ", + "NumberC", + "; createdBy: ", + "StringC", + "; }>>; }>" + ], + "path": "packages/kbn-investigation-shared/src/schema/get.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ] + } +} \ No newline at end of file diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx new file mode 100644 index 00000000000000..e5ca0fbebd5f0d --- /dev/null +++ b/api_docs/kbn_investigation_shared.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: kibKbnInvestigationSharedPluginApi +slug: /kibana-dev-docs/api/kbn-investigation-shared +title: "@kbn/investigation-shared" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/investigation-shared plugin +date: 2024-08-15 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] +--- +import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; + + + +Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 25 | 0 | 25 | 0 | + +## Common + +### Objects + + +### Consts, variables and types + + diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index d06281dc19aded..15984097fe263d 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index d533e064f37a56..faa55b25498c2a 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 9e3cfc4efd94fa..524a4409ca51d1 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-08-14 +date: 2024-08-15 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 697757bc88cb07..d2149d3e2441ac 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-08-14 +date: 2024-08-15 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 d64519963a0344..29bb865884d141 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 0198a01e2e27a3..df156e7f716c2f 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index ab96c35093dbd0..9fd817e0e26240 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-08-14 +date: 2024-08-15 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 c3265f1d515747..49ac88b1225b86 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-08-14 +date: 2024-08-15 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 f29816c569193f..6eb45c17284c2c 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-08-14 +date: 2024-08-15 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 328aef9a3566bd..0c1a8a85bded4a 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-08-14 +date: 2024-08-15 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 783dd15ac1006d..e60fce82c5d66e 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-08-14 +date: 2024-08-15 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 bd5c61e68fa97b..995be23725ff80 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-08-14 +date: 2024-08-15 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 5e80347ea0c322..4f55b92c0cd4de 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-08-14 +date: 2024-08-15 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 e3ee959b3a4ddb..441716d9ac2d99 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-08-14 +date: 2024-08-15 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 1f9b68430c31b9..3e3e9c6eaef535 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-08-14 +date: 2024-08-15 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 76b82be2f036d5..5aa9ce28bcd4f8 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-08-14 +date: 2024-08-15 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 94635e3b14d3f3..3c3c99c68ac44e 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-08-14 +date: 2024-08-15 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 703837874f3a05..c9336ae614eb57 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-08-14 +date: 2024-08-15 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 db88ad99ee4c1f..39add44529f508 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-08-14 +date: 2024-08-15 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 dfe4a7a2b56e59..c5cd11b557d4af 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-08-14 +date: 2024-08-15 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 73e8487c00fb3b..fda41972a85c7e 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-08-14 +date: 2024-08-15 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 09d4dd628c6cc2..cbfe4fbf6644f5 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-08-14 +date: 2024-08-15 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 54c48c77e2a43a..529a1cad863e38 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_management_settings_types.devdocs.json index 4ae9026a187f51..590f1a7c44d3fa 100644 --- a/api_docs/kbn_management_settings_types.devdocs.json +++ b/api_docs/kbn_management_settings_types.devdocs.json @@ -1613,7 +1613,7 @@ "\nThis is a local type equivalent to {@link UiSettingsType} for flexibility." ], "signature": [ - "\"string\" | \"number\" | \"boolean\" | \"undefined\" | \"color\" | \"image\" | \"select\" | \"json\" | \"array\" | \"markdown\"" + "\"string\" | \"number\" | \"boolean\" | \"undefined\" | \"color\" | \"array\" | \"image\" | \"select\" | \"json\" | \"markdown\"" ], "path": "packages/kbn-management/settings/types/setting_type.ts", "deprecated": false, diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 3b27a22bd6abe7..890020fbda1529 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-08-14 +date: 2024-08-15 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 45a58c28052279..2f3c58149cc66f 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-08-14 +date: 2024-08-15 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 e82100942cff7a..f6f27762367ed1 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-08-14 +date: 2024-08-15 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 e6b149a8ae2998..574548502f45a3 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-08-14 +date: 2024-08-15 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 92dbbf615331ed..673032349eeb65 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-08-14 +date: 2024-08-15 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 70873594351b2d..93e7c9e74604e6 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-08-14 +date: 2024-08-15 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 b8226eeb31aa8b..8edb05cc54e521 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-08-14 +date: 2024-08-15 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 5fa5476ef7dccb..a2e75df8bf9bd5 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-08-14 +date: 2024-08-15 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 5c9f98df7f504e..445fc5d5567ac0 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-08-14 +date: 2024-08-15 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 9ee5245037d965..fc8e993f3f1dea 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-08-14 +date: 2024-08-15 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 efde0b3d53975e..b134e8b600c31a 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-08-14 +date: 2024-08-15 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 eadd86e183a296..0e4ab1a1682e57 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-08-14 +date: 2024-08-15 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 2b122bb24520d4..98914a550fca8d 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-08-14 +date: 2024-08-15 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 da71df7117b89d..f9671e50ad036b 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-08-14 +date: 2024-08-15 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 c725e889899ca5..914b97c50c4c74 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-08-14 +date: 2024-08-15 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 28c42340b4a0bc..141ced30732c14 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-08-14 +date: 2024-08-15 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 5371dd08dae607..389f45ffb3a68a 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-08-14 +date: 2024-08-15 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 43294d5b5f9b9a..1fcb7cb078713e 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-08-14 +date: 2024-08-15 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 0538067f84edec..51b9483a9dc1c0 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-08-14 +date: 2024-08-15 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 27ae3e1da67a9e..18bdaef348d0d7 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-08-14 +date: 2024-08-15 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 60ab878e80d06b..6a4c690c5109e1 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-08-14 +date: 2024-08-15 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 e642d012d1e6bf..cc81559e712d3c 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-08-14 +date: 2024-08-15 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 b9802f749dd789..8a522daddffc23 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-08-14 +date: 2024-08-15 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 dcdf9607444daf..5c0c84fb8714c9 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-08-14 +date: 2024-08-15 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 d88298647f02e0..63d199dcc380c3 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-08-14 +date: 2024-08-15 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 a0fce172f186ad..6bfa465cffd058 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-08-14 +date: 2024-08-15 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 16b5658911ca1d..73f046f6bfa857 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index c9d7b9b728a358..702520407ed65e 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index eee2c16b3b5e17..cc6862d15c4d5a 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-08-14 +date: 2024-08-15 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 f209e0f35fe873..01cf7087f27019 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-08-14 +date: 2024-08-15 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 ec8cc0b5b229d3..2d5c23d4868ce1 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-08-14 +date: 2024-08-15 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 42b4b0eb36c5d9..ad2a05efa0aa66 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-08-14 +date: 2024-08-15 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 77f0f3e059fa67..4e83d057a4f577 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-08-14 +date: 2024-08-15 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 48f88ad91dc83e..a4c3e45e207d78 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-08-14 +date: 2024-08-15 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 f9bc13b08521e8..9d44f56a4f7ffc 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 9f2c79b66ffca4..6693ea834d17ca 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 78334265b8785d..4751f248ec25df 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-08-14 +date: 2024-08-15 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 52d60a7b0c0fcc..e998b8c1af0c8d 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-08-14 +date: 2024-08-15 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 3768a52c138b93..2f17186e20b613 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-08-14 +date: 2024-08-15 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 c1e693425c72fd..9a2694738dd5cf 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-08-14 +date: 2024-08-15 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 4b3fed916e3399..9d1566cdf3586f 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-08-14 +date: 2024-08-15 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 bca62a0e44c790..94164f45a6802b 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-08-14 +date: 2024-08-15 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 6884b462d49184..5f2d38ccd2781c 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-08-14 +date: 2024-08-15 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 73d1e03ba4fe0b..811d8fbb333a39 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-08-14 +date: 2024-08-15 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 8fc05e2a106f9c..95e19957d21afe 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-08-14 +date: 2024-08-15 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 3d003900842837..10bd25429645f1 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-08-14 +date: 2024-08-15 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 dff5ce53da2a25..59598a0be899fc 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-08-14 +date: 2024-08-15 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 80f0b9ada7b804..364e39c4f38a3a 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-08-14 +date: 2024-08-15 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 9b042fdfa01f21..eed5824864a926 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index f26dcf01b90b79..b6214999264564 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-08-14 +date: 2024-08-15 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 ef1461090a1624..6f423e586fb7e3 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-08-14 +date: 2024-08-15 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 3a4e5facb195da..776fab4a3396cf 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-08-14 +date: 2024-08-15 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 b4db182346dcc3..7372d2616615de 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 663f33328e9661..883ee45a5346c4 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index dbee79a200bfa2..036660a6040e05 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-08-14 +date: 2024-08-15 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 21393fb1bbffa7..0bbaadb8144d18 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-08-14 +date: 2024-08-15 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 3620fb16659f23..8f7635949d76a3 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-08-14 +date: 2024-08-15 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 370029428d1446..89bf712f348779 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-08-14 +date: 2024-08-15 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 79f459b09077ab..f9412b68c333f0 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-08-14 +date: 2024-08-15 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 4ed4ebd48f412a..8aa315ed7da4dd 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 34fb928683ba7a..f910c2dae32848 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index f850f06b140406..f31df5c4f75cae 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-08-14 +date: 2024-08-15 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 f9b1708b8fbd65..0cb1f458b87581 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-08-14 +date: 2024-08-15 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 b92ddbf5afe190..b74902374b8101 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-08-14 +date: 2024-08-15 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 be831af64c0338..73fc3323528e80 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-08-14 +date: 2024-08-15 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 cbb1be25f5c459..2f4ce58c2e20cd 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 68f45ab666d18b..0cbd1e446349c5 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index d262b929ea70c7..30ba68e643d296 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-08-14 +date: 2024-08-15 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 badbf0d56efe43..c1c287f94e7ae7 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-08-14 +date: 2024-08-15 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 0675d9a7a5f55d..93b2a92fa9b5f0 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-08-14 +date: 2024-08-15 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 71dfafe2de7ef3..f130b69048e407 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-08-14 +date: 2024-08-15 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 21364a0070dbbb..c6f9bc9d5f0da1 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-08-14 +date: 2024-08-15 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 a98e70ed320225..ff2df41bcd9f81 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-08-14 +date: 2024-08-15 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 0b0f1972e456d2..208d832df65b46 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-08-14 +date: 2024-08-15 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 20398726244f33..a16e0f4ca45293 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-08-14 +date: 2024-08-15 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 c5e44903dcba27..c273ea02079ac4 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-08-14 +date: 2024-08-15 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 1f60f48b68fc10..0f5beff3a171ce 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 8833e8ad8f42b8..d27add58b259db 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 0207c052f3bf28..3b3a8cea827d1f 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 77327e9ffc837d..1a02b0531545ab 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 1e4761be96b862..342bb73e45566e 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 501b39252edffd..2785697b2964c4 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-08-14 +date: 2024-08-15 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 681362ff12970a..625a925fc2ad1d 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index f467633000031e..1f5444f68dedf6 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 836d9c0c77b172..9614ba3d2db995 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-08-14 +date: 2024-08-15 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 c9507c1afe5e00..195710712b72c2 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-08-14 +date: 2024-08-15 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 d479a2e60045c9..f2c40b9dbf431f 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-08-14 +date: 2024-08-15 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 56522a7e4b7468..4783ea38c0dabc 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-08-14 +date: 2024-08-15 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 643755f85ecec4..953ed757aa63c4 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-08-14 +date: 2024-08-15 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 4f8df22d09e8b0..587b90a96a2f59 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 9d7d0419e87de3..1f39ac44f3bea4 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 31dd3ce433fd55..97fc2384810d57 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 7b107a0561b2ba..0ba6877b449b4b 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 2446680a0ac7fe..f71ee0e5fa9054 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-08-14 +date: 2024-08-15 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 ba64ff37f7114e..2262307b01017a 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-08-14 +date: 2024-08-15 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 5ac79e29f801d0..f14ae58e92cc86 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-08-14 +date: 2024-08-15 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 8cb38d693b5988..1c5f0ff50dad0d 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-08-14 +date: 2024-08-15 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_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 6571c64bcf177c..154a2437b09fbe 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index ee34f2615387b5..f6103656ba6e94 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-08-14 +date: 2024-08-15 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 d9cd293372f441..1346d52bd8d95b 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-08-14 +date: 2024-08-15 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 1f3129ecb1c8dd..6db38a4394ea36 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-08-14 +date: 2024-08-15 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 916c02489043ed..42ba4a12240cf5 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-08-14 +date: 2024-08-15 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 eae4ecc692e762..fa2acf7d07eaf1 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-08-14 +date: 2024-08-15 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 e389ce4bf36af9..0f2f28c0a0ba05 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-08-14 +date: 2024-08-15 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 3e35d8a1ed095a..537c86df9854a2 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-08-14 +date: 2024-08-15 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 007a3a4d78df0e..70b6921040fc3d 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-08-14 +date: 2024-08-15 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 54d439d87bf77a..837605845079c7 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 5198750974cfba..f2ebf284145842 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-08-14 +date: 2024-08-15 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 da8a8fa7a449ab..bc16c1f4950c90 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-08-14 +date: 2024-08-15 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 31670e37a59b0f..a987534d79e8c0 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-08-14 +date: 2024-08-15 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 1c9d3bdf700d09..4d4db4aed4dd74 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-08-14 +date: 2024-08-15 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 ff5bf580681bb3..a87526b86714b4 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-08-14 +date: 2024-08-15 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 a949349d9f9958..af35bddc30e67e 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-08-14 +date: 2024-08-15 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 eac9f4a558a298..cfbd71aa5653af 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-08-14 +date: 2024-08-15 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 320bcd4c66f04e..2d996153b16326 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-08-14 +date: 2024-08-15 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 56d65a8d56103f..94ae1c065dd5cb 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-08-14 +date: 2024-08-15 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 5044452d0088a7..34221ff3ac8cd9 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-08-14 +date: 2024-08-15 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 13850320795ab1..482f1c5cd43cee 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-08-14 +date: 2024-08-15 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 d11a7928549dba..fbd48aaa7cabb6 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_server_http_tools.devdocs.json index c5fb8122cb494d..241ce4eaf16b76 100644 --- a/api_docs/kbn_server_http_tools.devdocs.json +++ b/api_docs/kbn_server_http_tools.devdocs.json @@ -1268,7 +1268,7 @@ "section": "def-common.Type", "text": "Type" }, - "<\"none\" | \"optional\" | \"required\">; }>" + "<\"none\" | \"required\" | \"optional\">; }>" ], "path": "packages/kbn-server-http-tools/src/ssl/ssl_config.ts", "deprecated": false, diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index aecd39fd64e43b..3b30d7c5c959c0 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_server_route_repository.devdocs.json index 131bad8a5f347c..68fa7221f6e1cf 100644 --- a/api_docs/kbn_server_route_repository.devdocs.json +++ b/api_docs/kbn_server_route_repository.devdocs.json @@ -60,7 +60,7 @@ "label": "decodeRequestParams", "description": [], "signature": [ - "(params: KibanaRequestParams, paramsRt: T) => ", + "(params: Partial<{ path: any; query: any; body: any; }>, paramsRt: T) => ", "OutputOf", "" ], @@ -76,7 +76,7 @@ "label": "params", "description": [], "signature": [ - "KibanaRequestParams" + "Partial<{ path: any; query: any; body: any; }>" ], "path": "packages/kbn-server-route-repository/src/decode_request_params.ts", "deprecated": false, @@ -314,6 +314,39 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/server-route-repository", + "id": "def-server.stripNullishRequestParameters", + "type": "Function", + "tags": [], + "label": "stripNullishRequestParameters", + "description": [], + "signature": [ + "(params: KibanaRequestParams) => Partial<{ path: any; body: any; query: any; }>" + ], + "path": "packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/server-route-repository", + "id": "def-server.stripNullishRequestParameters.$1", + "type": "Object", + "tags": [], + "label": "params", + "description": [], + "signature": [ + "KibanaRequestParams" + ], + "path": "packages/kbn-server-route-repository/src/strip_nullish_request_parameters.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [ @@ -528,6 +561,27 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/server-route-repository", + "id": "def-server.IoTsParamsObject", + "type": "Type", + "tags": [], + "label": "IoTsParamsObject", + "description": [], + "signature": [ + "Omit<", + "Type", + "<{ path?: any; query?: any; body?: any; }, { path?: any; query?: any; body?: any; }, unknown>, \"encode\" | \"asEncoder\"> & { encode: ", + "Encode", + "; asEncoder: () => ", + "Encoder", + "; }" + ], + "path": "packages/kbn-server-route-repository-utils/src/typings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/server-route-repository", "id": "def-server.ReturnOf", @@ -577,13 +631,21 @@ "label": "RouteParamsRT", "description": [], "signature": [ - "Omit<", - "Type", - "<{ path?: any; query?: any; body?: any; }, { path?: any; query?: any; body?: any; }, unknown>, \"encode\" | \"asEncoder\"> & { encode: ", - "Encode", - "; asEncoder: () => ", - "Encoder", - "; }" + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.IoTsParamsObject", + "text": "IoTsParamsObject" + }, + " | ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ZodParamsObject", + "text": "ZodParamsObject" + } ], "path": "packages/kbn-server-route-repository-utils/src/typings.ts", "deprecated": false, @@ -727,77 +789,54 @@ "objects": [ { "parentPluginId": "@kbn/server-route-repository", - "id": "def-server.routeValidationObject", + "id": "def-server.passThroughValidationObject", "type": "Object", "tags": [], - "label": "routeValidationObject", + "label": "passThroughValidationObject", "description": [], - "path": "packages/kbn-server-route-repository/src/route_validation_object.ts", + "path": "packages/kbn-server-route-repository/src/validation_objects.ts", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "@kbn/server-route-repository", - "id": "def-server.routeValidationObject.body", + "id": "def-server.passThroughValidationObject.body", "type": "Object", "tags": [], "label": "body", - "description": [ - "// `body` can be null, but `validate` expects non-nullable types\n// if any validation is defined. Not having validation currently\n// means we don't get the payload. See\n// https://github.com/elastic/kibana/issues/50179" - ], + "description": [], "signature": [ - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.Type", - "text": "Type" - }, - " | null>" + "Zod.ZodAny" ], - "path": "packages/kbn-server-route-repository/src/route_validation_object.ts", + "path": "packages/kbn-server-route-repository/src/validation_objects.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/server-route-repository", - "id": "def-server.routeValidationObject.params", + "id": "def-server.passThroughValidationObject.params", "type": "Object", "tags": [], "label": "params", "description": [], "signature": [ - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ObjectType", - "text": "ObjectType" - }, - "<{}>" + "Zod.ZodAny" ], - "path": "packages/kbn-server-route-repository/src/route_validation_object.ts", + "path": "packages/kbn-server-route-repository/src/validation_objects.ts", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "@kbn/server-route-repository", - "id": "def-server.routeValidationObject.query", + "id": "def-server.passThroughValidationObject.query", "type": "Object", "tags": [], "label": "query", "description": [], "signature": [ - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ObjectType", - "text": "ObjectType" - }, - "<{}>" + "Zod.ZodAny" ], - "path": "packages/kbn-server-route-repository/src/route_validation_object.ts", + "path": "packages/kbn-server-route-repository/src/validation_objects.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index bd3158eb90c7f7..b79bb9d202374a 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.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 | |-------------------|-----------|------------------------|-----------------| -| 35 | 0 | 34 | 0 | +| 38 | 0 | 38 | 0 | ## Server diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 367bdd85f95498..1a76de61883cf3 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.devdocs.json b/api_docs/kbn_server_route_repository_utils.devdocs.json index b46edcb83eca74..8795640805fecb 100644 --- a/api_docs/kbn_server_route_repository_utils.devdocs.json +++ b/api_docs/kbn_server_route_repository_utils.devdocs.json @@ -334,6 +334,27 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/server-route-repository-utils", + "id": "def-common.IoTsParamsObject", + "type": "Type", + "tags": [], + "label": "IoTsParamsObject", + "description": [], + "signature": [ + "Omit<", + "Type", + "<{ path?: any; query?: any; body?: any; }, { path?: any; query?: any; body?: any; }, unknown>, \"encode\" | \"asEncoder\"> & { encode: ", + "Encode", + "; asEncoder: () => ", + "Encoder", + "; }" + ], + "path": "packages/kbn-server-route-repository-utils/src/typings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/server-route-repository-utils", "id": "def-common.ReturnOf", @@ -383,13 +404,21 @@ "label": "RouteParamsRT", "description": [], "signature": [ - "Omit<", - "Type", - "<{ path?: any; query?: any; body?: any; }, { path?: any; query?: any; body?: any; }, unknown>, \"encode\" | \"asEncoder\"> & { encode: ", - "Encode", - "; asEncoder: () => ", - "Encoder", - "; }" + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.IoTsParamsObject", + "text": "IoTsParamsObject" + }, + " | ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ZodParamsObject", + "text": "ZodParamsObject" + } ], "path": "packages/kbn-server-route-repository-utils/src/typings.ts", "deprecated": false, @@ -558,6 +587,21 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/server-route-repository-utils", + "id": "def-common.ZodParamsObject", + "type": "Type", + "tags": [], + "label": "ZodParamsObject", + "description": [], + "signature": [ + "Zod.ZodObject<{ path?: any; query?: any; body?: any; }, Zod.UnknownKeysParam, Zod.ZodTypeAny, { query?: any; path?: any; body?: any; }, { query?: any; path?: any; body?: any; }>" + ], + "path": "packages/kbn-server-route-repository-utils/src/typings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [] diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index dcd94174422f4e..8715114fae2e32 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.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 | |-------------------|-----------|------------------------|-----------------| -| 24 | 0 | 24 | 0 | +| 26 | 0 | 26 | 0 | ## Common diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 3c21b08f5a75ca..eeeeb710e17497 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-08-14 +date: 2024-08-15 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 fb9b0e392995d1..aca4dbd29ab5e8 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-08-14 +date: 2024-08-15 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 b950eb5869cc51..e31bf7b19d48bf 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-08-14 +date: 2024-08-15 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 b95e0c42d5d460..94079fcd834059 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-08-14 +date: 2024-08-15 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 5413cc31c8f9f1..90eeb85341a6f4 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-08-14 +date: 2024-08-15 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 6126004bbd438e..1f0e45650cf5c6 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-08-14 +date: 2024-08-15 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 5a8234ff4195a2..d2f5e98bab782d 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-08-14 +date: 2024-08-15 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 f5bd1bf8836436..4f6228a40d4905 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-08-14 +date: 2024-08-15 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 604dc3903d1f49..d68d92f464d59b 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-08-14 +date: 2024-08-15 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 ddbbd8dbd4f297..18790f90463016 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-08-14 +date: 2024-08-15 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 445b6932f3b7e9..32993eeed6b7a7 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-08-14 +date: 2024-08-15 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 c547be6fe638ca..86d4bf56de1db3 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-08-14 +date: 2024-08-15 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 ad6c1940a4e217..f4571cd02c02fa 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-08-14 +date: 2024-08-15 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 c410601c2af9a3..fb337976b8e9cd 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-08-14 +date: 2024-08-15 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 7a7e485a3d3e8a..f20d94c7bd978f 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-08-14 +date: 2024-08-15 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 2faac2f5355b48..f28eaf6b5ecf66 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-08-14 +date: 2024-08-15 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 d14acd773cb077..d801309be37eb4 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-08-14 +date: 2024-08-15 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 547810f95b1b8f..6dba4d849d93f3 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-08-14 +date: 2024-08-15 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 fd1c431ae821ff..955b2f5373ef63 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-08-14 +date: 2024-08-15 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 82a4e0f413f5cb..64993c4406222c 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-08-14 +date: 2024-08-15 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 1529a702dfc455..14e7e55d559fc4 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-08-14 +date: 2024-08-15 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 41a43c334db453..1aa3b6f893ba9c 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-08-14 +date: 2024-08-15 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 de87c62815d239..fd081f10c751c4 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-08-14 +date: 2024-08-15 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 c55c977414d1c1..95d0185b9d0cc5 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-08-14 +date: 2024-08-15 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 f5aaadf4f1cb13..b060510d6b348b 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-08-14 +date: 2024-08-15 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 dff807049fe549..79408ba5a81e1f 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-08-14 +date: 2024-08-15 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 25bbf954cc7af3..1f612440d1ffb9 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-08-14 +date: 2024-08-15 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 e1f24c9024c45a..f2c552faf21dd7 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-08-14 +date: 2024-08-15 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 35ad45b95954db..fc441cdcd92ef1 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-08-14 +date: 2024-08-15 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 2bcb3c16995c71..9c080568c09c72 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-08-14 +date: 2024-08-15 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 49288419edce55..575cfa442857af 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-08-14 +date: 2024-08-15 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 0102c137a72bd0..ef6f4d2b6e6126 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-08-14 +date: 2024-08-15 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 10c189c22ceaee..1b5c94db29c66b 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-08-14 +date: 2024-08-15 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 f4149f6bc3679b..e0b44ba18494bb 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-08-14 +date: 2024-08-15 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 4509b07dd2fc51..3a39853992cf5c 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-08-14 +date: 2024-08-15 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 65b15a063534e2..84952d64994ee6 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-08-14 +date: 2024-08-15 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 cee4d8d8850ba5..4ec0b99a13f8f6 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-08-14 +date: 2024-08-15 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 08b8715810d6f1..fcfa1677a61298 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-08-14 +date: 2024-08-15 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 1938287553b7cf..b1a36c6f016e17 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-08-14 +date: 2024-08-15 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 dade6465124b47..e6e7a1e002cba6 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-08-14 +date: 2024-08-15 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 79d3ecd074d85b..d4780bd7f58a00 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-08-14 +date: 2024-08-15 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 43603b3020bc01..3920b6fb19e9d3 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-08-14 +date: 2024-08-15 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 3414102617bffc..41c2c507bf0dfa 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-08-14 +date: 2024-08-15 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 7e2618ee417ec5..13c2f5891b327d 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index dbaddea46e649b..ebaa04522b1e22 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 83e4497c395883..cf6b44cdc10a21 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-08-14 +date: 2024-08-15 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 b30eea970a3a74..afb343f4d518dd 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-08-14 +date: 2024-08-15 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 ef9177554746f4..0a1ebf94c74f5c 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-08-14 +date: 2024-08-15 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 4d40daae012e41..24d16946667b8a 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-08-14 +date: 2024-08-15 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 0c95c06505a612..e6bb9e9a0189b7 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-08-14 +date: 2024-08-15 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 b0eece95b5e758..0790c81d480845 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-08-14 +date: 2024-08-15 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 40e60ce87e3b07..5bcbf041598c66 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 3a96a8463870d5..4c7c05c31376a6 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index a50e0035b3a2d1..57f4e18a7ce4af 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 8201490daab9ba..dd1137e376e3bb 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-08-14 +date: 2024-08-15 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 d46b9c99fa4a0f..ec5f87b6ea006d 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-08-14 +date: 2024-08-15 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 ee180469a79152..659dab57514330 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-08-14 +date: 2024-08-15 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 6a126af88e462a..b3639cc061ce17 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-08-14 +date: 2024-08-15 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 df25e09fcb9e9e..355d1d01f79bcd 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-08-14 +date: 2024-08-15 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 e8ef0b0b9ebd16..03380103ef705f 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-08-14 +date: 2024-08-15 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 b5ce959a3d15ca..7719b55544215a 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-08-14 +date: 2024-08-15 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 dcfdadd00e949c..1e4f472e0c2368 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-08-14 +date: 2024-08-15 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 ce8ae069f7bda5..11782afb5831ff 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 6996d6da824d4f..9d1389714d651c 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 479cff0639d1bc..453101422725e6 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-08-14 +date: 2024-08-15 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 488609f209637f..612e48a13b486d 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-08-14 +date: 2024-08-15 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 bcbf28259756a4..a52d832377284c 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-08-14 +date: 2024-08-15 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 e430073b32f3ac..56801eb450e2dc 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-08-14 +date: 2024-08-15 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 5fba11cd6a1887..0a61e6bc849378 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-08-14 +date: 2024-08-15 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 2f03a453e98633..c12e0a4b2fdf94 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-08-14 +date: 2024-08-15 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 be355c4d7ebc8e..bb73c56617e3f0 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-08-14 +date: 2024-08-15 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 227f77886c449b..5a69b3390e40dd 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-08-14 +date: 2024-08-15 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 b0e54060613180..31df27c08635d6 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 2378098486b8ec..fdd79100de001e 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index dbf104ca4f1b26..0ceabdea21eb20 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-08-14 +date: 2024-08-15 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 15c44c7eda717a..019c8ce094e66f 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-08-14 +date: 2024-08-15 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 8f32fdcd050093..c35a1138f6dfb1 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-08-14 +date: 2024-08-15 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 41d75d44fc2c09..9525f3e4e530e3 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-08-14 +date: 2024-08-15 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 fcdab6709e0dd0..8e6c0004ff8e27 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-08-14 +date: 2024-08-15 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 08bbd10042d9fb..ff078d8513c332 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-08-14 +date: 2024-08-15 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 db526a5658fa42..de50ac7f5882d1 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-08-14 +date: 2024-08-15 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 bbce3610fa9459..dbc94a76d0abf4 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-08-14 +date: 2024-08-15 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 24910c34dacd47..98df9d1e87746e 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-08-14 +date: 2024-08-15 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.devdocs.json b/api_docs/kbn_zod.devdocs.json index 1c160258f9b566..7687287d2a6dd1 100644 --- a/api_docs/kbn_zod.devdocs.json +++ b/api_docs/kbn_zod.devdocs.json @@ -13452,7 +13452,7 @@ "label": "getParsedType", "description": [], "signature": [ - "(data: any) => \"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"null\" | \"nan\" | \"array\" | \"promise\" | \"void\" | \"never\"" + "(data: any) => \"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"array\" | \"promise\" | \"null\" | \"nan\" | \"void\" | \"never\"" ], "path": "node_modules/zod/lib/helpers/util.d.ts", "deprecated": false, @@ -15025,7 +15025,7 @@ "label": "parsedType", "description": [], "signature": [ - "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"null\" | \"nan\" | \"array\" | \"promise\" | \"void\" | \"never\"" + "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"array\" | \"promise\" | \"null\" | \"nan\" | \"void\" | \"never\"" ], "path": "node_modules/zod/lib/helpers/parseUtil.d.ts", "deprecated": false, @@ -16352,7 +16352,7 @@ "label": "expected", "description": [], "signature": [ - "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"null\" | \"nan\" | \"array\" | \"promise\" | \"void\" | \"never\"" + "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"array\" | \"promise\" | \"null\" | \"nan\" | \"void\" | \"never\"" ], "path": "node_modules/zod/lib/ZodError.d.ts", "deprecated": false, @@ -16366,7 +16366,7 @@ "label": "received", "description": [], "signature": [ - "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"null\" | \"nan\" | \"array\" | \"promise\" | \"void\" | \"never\"" + "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"array\" | \"promise\" | \"null\" | \"nan\" | \"void\" | \"never\"" ], "path": "node_modules/zod/lib/ZodError.d.ts", "deprecated": false, @@ -19198,7 +19198,7 @@ "label": "ZodFirstPartySchemaTypes", "description": [], "signature": [ - "Zod.ZodString | Zod.ZodBoolean | Zod.ZodNumber | Zod.ZodUnknown | Zod.ZodUndefined | Zod.ZodAny | Zod.ZodBigInt | Zod.ZodDate | Zod.ZodSymbol | Zod.ZodNull | Zod.ZodNever | Zod.ZodVoid | Zod.ZodTuple | Zod.ZodNaN | Zod.ZodArray | Zod.ZodObject | Zod.ZodUnion | Zod.ZodDiscriminatedUnion | Zod.ZodIntersection | Zod.ZodRecord | Zod.ZodMap | Zod.ZodSet | Zod.ZodFunction | Zod.ZodLazy | Zod.ZodLiteral | Zod.ZodEnum | Zod.ZodEffects | Zod.ZodNativeEnum | Zod.ZodOptional | Zod.ZodNullable | Zod.ZodDefault | Zod.ZodCatch | Zod.ZodPromise | Zod.ZodBranded | Zod.ZodPipeline | Zod.ZodReadonly" + "Zod.ZodString | Zod.ZodBoolean | Zod.ZodNumber | Zod.ZodUnknown | Zod.ZodUndefined | Zod.ZodAny | Zod.ZodNull | Zod.ZodBigInt | Zod.ZodDate | Zod.ZodSymbol | Zod.ZodNever | Zod.ZodVoid | Zod.ZodTuple | Zod.ZodNaN | Zod.ZodArray | Zod.ZodObject | Zod.ZodUnion | Zod.ZodDiscriminatedUnion | Zod.ZodIntersection | Zod.ZodRecord | Zod.ZodMap | Zod.ZodSet | Zod.ZodFunction | Zod.ZodLazy | Zod.ZodLiteral | Zod.ZodEnum | Zod.ZodEffects | Zod.ZodNativeEnum | Zod.ZodOptional | Zod.ZodNullable | Zod.ZodDefault | Zod.ZodCatch | Zod.ZodPromise | Zod.ZodBranded | Zod.ZodPipeline | Zod.ZodReadonly" ], "path": "node_modules/zod/lib/types.d.ts", "deprecated": false, @@ -19348,7 +19348,7 @@ "label": "ZodParsedType", "description": [], "signature": [ - "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"null\" | \"nan\" | \"array\" | \"promise\" | \"void\" | \"never\"" + "\"string\" | \"number\" | \"bigint\" | \"boolean\" | \"symbol\" | \"undefined\" | \"object\" | \"function\" | \"unknown\" | \"date\" | \"integer\" | \"float\" | \"map\" | \"set\" | \"array\" | \"promise\" | \"null\" | \"nan\" | \"void\" | \"never\"" ], "path": "node_modules/zod/lib/helpers/util.d.ts", "deprecated": false, diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index da43fb6e59087a..ec5957980265ca 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 5f609f765bdeb3..eb488540186c4f 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-08-14 +date: 2024-08-15 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 e37968d4c5fa1f..5dfe2657f14504 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-08-14 +date: 2024-08-15 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 1cd639b3d19a40..dbe3f07e9e582f 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-08-14 +date: 2024-08-15 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 296776c3993960..211440abb4c03c 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-08-14 +date: 2024-08-15 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 8b671fd8a0b94a..7eaed39923a727 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index c1b64152806050..77730877c7ad57 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-08-14 +date: 2024-08-15 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 08595341b48c91..72c3fdde66b2a7 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-08-14 +date: 2024-08-15 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 2e02f738f5e844..81bfc5818cc664 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-08-14 +date: 2024-08-15 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 b65516af0cf09d..7d7e61e29fd5f9 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-08-14 +date: 2024-08-15 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 8f5a6ba94519e2..168fb62625f41c 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-08-14 +date: 2024-08-15 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 bd2323183577d7..44d0ee954d234e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index a37785a3c9014e..e874325432b921 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 3ac7db4875060c..528c931aba36eb 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 1cc808ad300f4d..d7b089ed0d9b5e 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-08-14 +date: 2024-08-15 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 2f322ddb7995bd..538256c91d3cb9 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 1abba28b7668e9..3c79a1a32e711a 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 2e22653c7320d2..dd3a2d2f70a4ef 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-08-14 +date: 2024-08-15 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 c6ad47665033db..1d96943b445bb4 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-08-14 +date: 2024-08-15 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 e92257dc819674..849f86411c3f39 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-08-14 +date: 2024-08-15 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 573b351ea388fd..0c0d31350cd8c5 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-08-14 +date: 2024-08-15 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 3831427b38728c..adefbcfe90132e 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-08-14 +date: 2024-08-15 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 da5915f123d026..a2767b4367285b 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-08-14 +date: 2024-08-15 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 5910723645fd80..87e63a37b81862 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-08-14 +date: 2024-08-15 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 8d4c25b512f058..c574d4aa125916 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-08-14 +date: 2024-08-15 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 dc4bd53393d0ce..ce1348dd51d83c 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-08-14 +date: 2024-08-15 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 10a56ce8df9b54..55811a2da35a6b 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-08-14 +date: 2024-08-15 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 75b56890e1f3b7..9ff3f59805dffc 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -3821,6 +3821,27 @@ "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "observability", + "id": "def-public.ObservabilityPublicPluginsStart.investigate", + "type": "Object", + "tags": [], + "label": "investigate", + "description": [], + "signature": [ + { + "pluginId": "investigate", + "scope": "public", + "docId": "kibInvestigatePluginApi", + "section": "def-public.InvestigatePublicStart", + "text": "InvestigatePublicStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 1ff83b5149b557..0e8587ca1d642a 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 701 | 2 | 694 | 22 | +| 702 | 2 | 695 | 22 | ## Client diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index cc14a02153800d..b6b2f7f2708957 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 138a51511b08f8..63e489f15f8774 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index e82be12f9baa0c..c32ec8ed7d654d 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 3269484d26d142..9fc9bb66a87015 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-08-14 +date: 2024-08-15 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 198fd05e4287b4..6a600904e06d95 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-08-14 +date: 2024-08-15 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 8a5b74d2721321..dcc9eb57032617 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 1527a3db32af79..07108134ee8859 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index b98199db50b25b..8bdce973570772 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 9b371cbcb31329..1fc1fb90d76ae9 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 832 | 708 | 45 | +| 833 | 709 | 45 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 52242 | 241 | 39176 | 1918 | +| 52284 | 241 | 39219 | 1920 | ## Plugin Directory @@ -62,7 +62,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1224 | 0 | 443 | 3 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 4 | -| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of data set quality, where users can easily get an overview on the data sets they have. | 10 | 0 | 10 | 5 | +| | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of data set quality, where users can easily get an overview on the data sets they have. | 15 | 0 | 15 | 8 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 149 | 0 | 102 | 26 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | @@ -102,7 +102,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 84 | 0 | 84 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1357 | 5 | 1234 | 74 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1359 | 5 | 1236 | 74 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -121,7 +121,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 127 | 2 | 100 | 4 | | | [@elastic/security-scalability](https://github.com/orgs/elastic/teams/security-scalability) | Plugin implementing the Integration Assistant API and UI | 47 | 0 | 40 | 3 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides UI and APIs for the interactive setup mode. | 28 | 0 | 18 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 112 | 0 | 112 | 6 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 111 | 0 | 111 | 5 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 5 | 0 | 5 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 153 | 0 | 121 | 3 | @@ -150,7 +150,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 17 | 0 | 17 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 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) | - | 701 | 2 | 694 | 22 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 702 | 2 | 695 | 22 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 290 | 1 | 288 | 26 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 2 | 0 | 2 | 0 | @@ -495,7 +495,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 35 | 0 | 34 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 156 | 0 | 130 | 9 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 354 | 0 | 328 | 0 | -| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 37 | 0 | 37 | 0 | +| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 41 | 0 | 41 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 55 | 0 | 40 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 6 | 0 | @@ -512,7 +512,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 49 | 0 | 40 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 3 | 0 | 3 | 0 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 46 | 0 | 31 | 1 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 47 | 0 | 32 | 1 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 551 | 6 | 511 | 3 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 1 | 0 | 1 | 0 | @@ -531,6 +531,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 25 | 0 | 25 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 60 | 0 | 60 | 4 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 44 | 0 | 44 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 0 | 13 | 0 | @@ -674,9 +675,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 120 | 0 | 116 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 51 | 0 | 46 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 69 | 0 | 64 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 35 | 0 | 34 | 0 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 38 | 0 | 38 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 3 | 0 | 3 | 0 | -| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 24 | 0 | 24 | 0 | +| | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 26 | 0 | 26 | 0 | | | [@elastic/appex-sharedux @elastic/kibana-management](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux @elastic/kibana-management @elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/appex-sharedux ) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 7 | 1 | diff --git a/api_docs/presentation_panel.devdocs.json b/api_docs/presentation_panel.devdocs.json index 4b73956c37eea1..15ffab0f06b916 100644 --- a/api_docs/presentation_panel.devdocs.json +++ b/api_docs/presentation_panel.devdocs.json @@ -45,7 +45,7 @@ }, "<", "PanelCompatibleComponent", - " | null>; } & { hidePanelChrome?: boolean | undefined; }) => JSX.Element" + " | null>; } & { hidePanelChrome?: boolean | undefined; }) => JSX.Element | null" ], "path": "src/plugins/presentation_panel/public/panel_component/presentation_panel.tsx", "deprecated": false, diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index e04c4b8da4fbc4..d33becb5faa1dd 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-08-14 +date: 2024-08-15 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 6b58ce6a4ab9ab..2c5baf88b086d5 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-08-14 +date: 2024-08-15 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 5452cbbe4a3ad9..942816ef6e36f8 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 29baa2b90ca31b..ad230daf2d2698 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-08-14 +date: 2024-08-15 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 e53d58a5facce6..80b9ff24e51c9b 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-08-14 +date: 2024-08-15 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 30d6d5213274b1..308b71a43949af 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-08-14 +date: 2024-08-15 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 10531c28494518..4ef5f102c37a5e 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-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 625b1bf3b84651..ed6db2aca7d4c1 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 0ecbf90f8cbd16..aab34e8deab741 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 7c7de3d2552385..ae93c15cbf7644 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 250405ae508fd0..e6bc1d8aa72172 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 3e3254cfec41e4..c80f6596ee0a60 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 66d0948141ad73..93bc393e67f225 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index ecec466a995a51..f60d6c26b99a18 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 318d6c464a62a1..a623d9a20485a3 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index b52cb6ce599517..65283a47f4824a 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 2c2a2c7641112e..5544e9ba66c358 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 82f9a59b0db56b..08b1ed1da66602 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 89ad92ad515b96..03f6292c376924 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index c0c701bc2cb29a..49f3bd89128e9b 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index ce6429f5306d8d..dd023c6d772db3 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index d88d9deced80e8..ed19ac288035fc 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 9d0917c56bf321..57c68acbcf56b0 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index f9722f893a3ae3..a0d30670b23d8f 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index c89f5bf4c1360e..604eed30ca4e2a 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index c5735055289b45..09af2ec1bf1eae 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 57e0f47313731b..aa8b827c4da21a 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 6eab40e7890514..27063068a6b3b7 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 0b6c069e85fd7e..77fb379147b42e 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index f54b19caea4ee3..ae22a14d9ea934 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 322c59f57f2d98..de226cbc6fcc69 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 0221692963d0b4..3a480019a43aea 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 20094174e9b8ac..c84df0d94665a7 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 0f44754daca7fe..e6cae13a8f3b74 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 5485764131ceb3..8810cb8cd2564c 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 3a20f3a8b842c5..669103d6b4b766 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index bd810be492ac27..d3e2dd45658296 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 17e7aa6929bc0c..d795e1a1ac7e73 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 3f41cb48619fc1..c5440e21e60dd5 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index 938485f9a68771..a6ccf821356904 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index fa377cfc207652..1ffebd9ed4eeb0 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 7313ec0ef205b8..e335455007f042 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index b97f72b1613894..0ccff7711d6620 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index c918b146818b3b..d187704de8599f 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 67504e1a17d6f8..09f9932c8314ba 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index b2cc8beb5a8afd..628770ff253675 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index d896799e4685da..80b9fd5993c600 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 9d9351b586415c..60f1933b567ad3 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index a5d1345782325a..6ba027cfea9fde 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 3520b2b3e94cb1..d83cf2819c20aa 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index f6147dd75ebcf4..1b46a6f0eacaa4 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 27d03ba36cfea0..4addb9dbe97d25 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index bf5256bc53648a..e2c194942a63ed 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 39938068cca571..ec587344c3b5ec 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 92205d35c44c79..580a70f94be9fd 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index aa2d08b86f98c3..47634a7d247015 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 0761b8a1124b55..aab82e2cad4e70 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 5e233ac6d91a59..7695e99ff53506 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 10f405d5d6ed94..b1e735f534b78d 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index f07c0f1137e201..2e8b3a97ef4f61 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index d6a7e55130ba36..824b4a09f467d5 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 506ec4e0506adc..7e5b59c16d4e40 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index e5b2f89b6e9b5a..61f2b93bf30649 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 5cea6e77cec8a5..b25edd0b6683f8 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 6616b980c7ad31..d6cff18d8b7e41 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 72a8bbd8b19bd5..94bdb3aeaf43fc 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-08-14 +date: 2024-08-15 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 8cf87c01d6d1ce49e61b2e3e1c5cc476f8b6aa2e Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 15 Aug 2024 08:50:47 +0200 Subject: [PATCH 72/92] [Discover] Unskip default app state tests (#190506) - Closes https://github.com/elastic/kibana/issues/189994 --- .../extensions/_get_default_app_state.ts | 58 +++++++--------- .../extensions/_get_default_app_state.ts | 67 +++++++++---------- 2 files changed, 53 insertions(+), 72 deletions(-) diff --git a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts index 4991aa5f36ee17..7e057da66b7645 100644 --- a/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts +++ b/test/functional/apps/discover/context_awareness/extensions/_get_default_app_state.ts @@ -11,19 +11,29 @@ import kbnRison from '@kbn/rison'; import type { FtrProviderContext } from '../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'unifiedFieldList']); + const PageObjects = getPageObjects(['common', 'discover', 'unifiedFieldList', 'header']); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); const queryBar = getService('queryBar'); const monacoEditor = getService('monacoEditor'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); + const retry = getService('retry'); describe('extension getDefaultAppState', () => { afterEach(async () => { await kibanaServer.uiSettings.unset('defaultColumns'); }); + async function expectColumns(columns: string[]) { + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await retry.try(async () => { + const actualColumns = await PageObjects.discover.getColumnHeaders(); + expect(actualColumns).to.eql(columns); + }); + } + describe('ES|QL mode', () => { it('should render default columns and row height', async () => { const state = kbnRison.encode({ @@ -35,9 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); const rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -55,9 +63,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -65,9 +71,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(rowHeightNumber).to.be(3); await monacoEditor.setCodeEditorValue('from my-example-logs'); await queryBar.clickQuerySubmitButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -88,16 +92,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Single'); await testSubjects.click('discoverNewButton'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -118,9 +119,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message', 'data_stream.type']); + await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); }); }); @@ -130,9 +129,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); const rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -145,18 +142,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); let rowHeightNumber = await dataGrid.getCustomRowHeightNumber(); expect(rowHeightNumber).to.be(3); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -172,16 +165,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Single'); await testSubjects.click('discoverNewButton'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -197,9 +187,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message', 'data_stream.type']); + await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); }); }); }); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts index c99f556b2f52d1..7203793330590a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/context_awareness/extensions/_get_default_app_state.ts @@ -10,13 +10,20 @@ import kbnRison from '@kbn/rison'; import type { FtrProviderContext } from '../../../../../ftr_provider_context'; export default function ({ getService, getPageObjects }: FtrProviderContext) { - const PageObjects = getPageObjects(['common', 'discover', 'svlCommonPage', 'unifiedFieldList']); + const PageObjects = getPageObjects([ + 'common', + 'discover', + 'svlCommonPage', + 'unifiedFieldList', + 'header', + ]); const dataViews = getService('dataViews'); const dataGrid = getService('dataGrid'); const queryBar = getService('queryBar'); const monacoEditor = getService('monacoEditor'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); + const retry = getService('retry'); describe('extension getDefaultAppState', () => { before(async () => { @@ -27,6 +34,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.unset('defaultColumns'); }); + async function expectColumns(columns: string[]) { + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await retry.try(async () => { + const actualColumns = await PageObjects.discover.getColumnHeaders(); + expect(actualColumns).to.eql(columns); + }); + } + describe('ES|QL mode', () => { it('should render default columns and row height', async () => { const state = kbnRison.encode({ @@ -38,9 +54,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); const rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -58,9 +72,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -68,9 +80,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(rowHeightNumber).to.be(3); await monacoEditor.setCodeEditorValue('from my-example-logs'); await queryBar.clickQuerySubmitButton(); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -91,16 +101,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Single'); await testSubjects.click('discoverNewButton'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -121,22 +128,17 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.common.navigateToActualUrl('discover', `?_a=${state}`, { ensureCurrentUrl: false, }); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message', 'data_stream.type']); + await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); }); }); - // FLAKY: https://github.com/elastic/kibana/issues/189994 - describe.skip('data view mode', () => { + describe('data view mode', () => { it('should render default columns and row height', async () => { await PageObjects.common.navigateToActualUrl('discover', undefined, { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); const rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -149,18 +151,14 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-*'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); let rowHeightNumber = await dataGrid.getCustomRowHeightNumber(); expect(rowHeightNumber).to.be(3); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -176,16 +174,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.discover.waitUntilSearchingHasFinished(); await PageObjects.unifiedFieldList.clickFieldListItemRemove('log.level'); await PageObjects.unifiedFieldList.clickFieldListItemRemove('message'); - let columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'Document']); + await expectColumns(['@timestamp', 'Document']); await dataGrid.clickGridSettings(); await dataGrid.changeRowHeightValue('Single'); let rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Single'); await testSubjects.click('discoverNewButton'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message']); + await expectColumns(['@timestamp', 'log.level', 'message']); await dataGrid.clickGridSettings(); rowHeightValue = await dataGrid.getCurrentRowHeightValue(); expect(rowHeightValue).to.be('Custom'); @@ -201,9 +196,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ensureCurrentUrl: false, }); await dataViews.switchTo('my-example-logs'); - await PageObjects.discover.waitUntilSearchingHasFinished(); - const columns = await PageObjects.discover.getColumnHeaders(); - expect(columns).to.eql(['@timestamp', 'log.level', 'message', 'data_stream.type']); + await expectColumns(['@timestamp', 'log.level', 'message', 'data_stream.type']); }); }); }); From 0a29b6804ba8e34332dbe3bdbc25e6d3b84a7af7 Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 15 Aug 2024 10:06:54 +0200 Subject: [PATCH 73/92] [MX] Move create connector button in Management (#190125) Issue: https://github.com/elastic/kibana/issues/188189 Here "create connector" button should be moved to the header (top right) for consistency with Rules and Cases page. How to check: So it should looks like this on Connectors tab: ![Screenshot 2024-08-12 at 17 15 25](https://github.com/user-attachments/assets/1024d8f2-ef83-4818-84a7-42c7794ee905) And like this (without Create connector button) on tab Logs: ![Screenshot 2024-08-12 at 17 15 37](https://github.com/user-attachments/assets/15a522b8-a1a9-4a4c-ae0f-3b3e7e91301d) Create connector flyout should open when Create connector button will be pushed. ![Screenshot 2024-08-12 at 17 15 48](https://github.com/user-attachments/assets/1b9bc3ab-f41b-466a-abd6-98725d52d5e4) Also good to check if edit flyout will open when edit a connector. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Elastic Machine --- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../actions_connectors_home.test.tsx | 210 ++++++++ .../components/actions_connectors_home.tsx | 158 +++++- .../actions_connectors_list.test.tsx | 505 ++++++++++++------ .../components/actions_connectors_list.tsx | 151 ++---- .../components/types.ts | 13 + .../functional/services/actions/common.ts | 2 +- .../triggers_actions_ui/connectors/slack.ts | 4 +- .../page_objects/triggers_actions_ui_page.ts | 2 +- .../svl_triggers_actions_ui_page.ts | 2 +- 12 files changed, 754 insertions(+), 299 deletions(-) create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.test.tsx create mode 100644 x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/types.ts diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 1cbb69da954637..c81296b9f0263e 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -46287,7 +46287,6 @@ "xpack.triggersActionsUI.sections.actionForm.unableToLoadActionsMessage": "Impossible de charger les connecteurs", "xpack.triggersActionsUI.sections.actionForm.unableToLoadConnectorTypesMessage": "Impossible de charger les types de connecteurs", "xpack.triggersActionsUI.sections.actionForm.unableToLoadSystemActionConnectorTitle": "Impossible de charger le connecteur", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionButtonLabel": "Créer un connecteur", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle": "Impossible de supprimer les connecteurs", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteLabel": "Supprimer {count}", "xpack.triggersActionsUI.sections.actionsConnectorsList.connectorsListTable.columns.actions.deleteActionDescription": "Supprimer ce connecteur", @@ -46310,7 +46309,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.noPermissionToCreateTitle": "Aucune autorisation pour créer des connecteurs", "xpack.triggersActionsUI.sections.actionsConnectorsList.preconfiguredTitleMessage": "Préconfiguré", "xpack.triggersActionsUI.sections.actionsConnectorsList.singleTitle": "connecteur", - "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadActionsMessage": "Impossible de charger les connecteurs", "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "Impossible de charger les types de connecteurs", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {Ce connecteur est} other {Certains connecteurs sont}} actuellement en cours d'utilisation.", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "Supprimer", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 17432ab10a44e3..a5354d20fc39f4 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -46268,7 +46268,6 @@ "xpack.triggersActionsUI.sections.actionForm.unableToLoadActionsMessage": "コネクターを読み込めません", "xpack.triggersActionsUI.sections.actionForm.unableToLoadConnectorTypesMessage": "コネクタータイプを読み込めません", "xpack.triggersActionsUI.sections.actionForm.unableToLoadSystemActionConnectorTitle": "コネクターを読み込めません", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionButtonLabel": "コネクターを作成", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle": "コネクターを削除できません", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteLabel": "{count} 件を削除", "xpack.triggersActionsUI.sections.actionsConnectorsList.connectorsListTable.columns.actions.deleteActionDescription": "このコネクターを削除", @@ -46291,7 +46290,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.noPermissionToCreateTitle": "コネクターを作成する権限がありません", "xpack.triggersActionsUI.sections.actionsConnectorsList.preconfiguredTitleMessage": "構成済み", "xpack.triggersActionsUI.sections.actionsConnectorsList.singleTitle": "コネクター", - "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadActionsMessage": "コネクターを読み込めません", "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "コネクタータイプを読み込めません", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {このコネクターは} other {一部のコネクターが}}現在使用中です。", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "削除", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index aafc9f26c90440..b5ba7135c77612 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -46318,7 +46318,6 @@ "xpack.triggersActionsUI.sections.actionForm.unableToLoadActionsMessage": "无法加载连接器", "xpack.triggersActionsUI.sections.actionForm.unableToLoadConnectorTypesMessage": "无法加载连接器类型", "xpack.triggersActionsUI.sections.actionForm.unableToLoadSystemActionConnectorTitle": "无法加载连接器", - "xpack.triggersActionsUI.sections.actionsConnectorsList.addActionButtonLabel": "创建连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle": "无法删除连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteLabel": "删除 {count} 个", "xpack.triggersActionsUI.sections.actionsConnectorsList.connectorsListTable.columns.actions.deleteActionDescription": "删除此连接器", @@ -46341,7 +46340,6 @@ "xpack.triggersActionsUI.sections.actionsConnectorsList.noPermissionToCreateTitle": "无权创建连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.preconfiguredTitleMessage": "预配置", "xpack.triggersActionsUI.sections.actionsConnectorsList.singleTitle": "连接器", - "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadActionsMessage": "无法加载连接器", "xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadConnectorTypesMessage": "无法加载连接器类型", "xpack.triggersActionsUI.sections.actionsConnectorsList.warningText": "{connectors, plural, one {此连接器} other {这些连接器}}当前正在使用中。", "xpack.triggersActionsUI.sections.actionTypeForm.accordion.deleteIconAriaLabel": "删除", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.test.tsx new file mode 100644 index 00000000000000..7c87676ae0bd08 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.test.tsx @@ -0,0 +1,210 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import * as React from 'react'; +import { render, screen } from '@testing-library/react'; +import { RouteComponentProps } from 'react-router-dom'; +import { Router } from '@kbn/shared-ux-router'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; +import { createMemoryHistory, createLocation } from 'history'; +import ActionsConnectorsHome, { MatchParams } from './actions_connectors_home'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import userEvent from '@testing-library/user-event'; + +jest.mock('../../../lib/action_connector_api', () => ({ + loadAllActions: jest.fn(), + loadActionTypes: jest.fn(), +})); +const { loadAllActions } = jest.requireMock('../../../lib/action_connector_api'); +jest.mock('../../../../common/lib/kibana'); +jest.mock('../../../lib/capabilities'); +jest.mock('../../../../common/get_experimental_features'); +jest.mock('../../../components/health_check', () => ({ + HealthCheck: ({ children }: { children: React.ReactNode }) => <>{children}, +})); +jest.mock('../../../context/health_context', () => ({ + HealthContextProvider: ({ children }: { children: React.ReactNode }) => <>{children}, +})); + +jest.mock('./actions_connectors_list', () => { + return () => ( +
+ {'Render Actions connectors list component'} +
+ ); +}); +jest.mock('./actions_connectors_event_log_list_table', () => { + return () => ( +
+ {'Render Connector Event log list table component'} +
+ ); +}); + +const queryClient = new QueryClient(); + +describe('ActionsConnectorsHome', () => { + it('renders Actions connectors list component', async () => { + const props: RouteComponentProps = { + history: createMemoryHistory({ + initialEntries: ['/connectors'], + }), + location: createLocation('/connectors'), + match: { + isExact: true, + path: '/connectors', + url: '', + params: { + section: 'connectors', + }, + }, + }; + + render( + + + + + + + + ); + + expect(loadAllActions).toHaveBeenCalled(); + expect(await screen.findByTestId('actionsConnectorsListComponent')).toBeInTheDocument(); + }); + + it('there are Connectors and Logs tabs', async () => { + const props: RouteComponentProps = { + history: createMemoryHistory({ + initialEntries: ['/connectors'], + }), + location: createLocation('/connectors'), + match: { + isExact: true, + path: '/connectors', + url: '', + params: { + section: 'connectors', + }, + }, + }; + + render( + + + + + + + + ); + + const tabs = await screen.findAllByRole('tab'); + expect(tabs).toHaveLength(2); + expect(tabs[0]).toHaveTextContent('Connectors'); + expect(tabs[1]).toHaveTextContent('Logs'); + }); + + it('show "Create connector" and "Documentation" buttons when on Connectors tab', async () => { + const props: RouteComponentProps = { + history: createMemoryHistory({ + initialEntries: ['/connectors'], + }), + location: createLocation('/connectors'), + match: { + isExact: true, + path: '/connectors', + url: '', + params: { + section: 'connectors', + }, + }, + }; + + render( + + + + + + + + ); + + const createConnectorButton = await screen.findByRole('button', { name: 'Create connector' }); + expect(createConnectorButton).toBeEnabled(); + + const documentationButton = await screen.findByRole('link', { name: 'Documentation' }); + expect(documentationButton).toBeEnabled(); + }); + + it('hide "Create connector" button when on Logs tab', async () => { + const props: RouteComponentProps = { + history: createMemoryHistory({ + initialEntries: ['/logs'], + }), + location: createLocation('/logs'), + match: { + isExact: true, + path: '/logs', + url: '', + params: { + section: 'logs', + }, + }, + }; + + render( + + + + + + + + ); + + const documentationButton = await screen.findByRole('link', { name: 'Documentation' }); + expect(documentationButton).toBeEnabled(); + expect(screen.queryByRole('button', { name: 'Create connector' })).not.toBeInTheDocument(); + }); + + it('show "Select a connector" flyout when "Create connector" button pressed', async () => { + const props: RouteComponentProps = { + history: createMemoryHistory({ + initialEntries: ['/connectors'], + }), + location: createLocation('/connectors'), + match: { + isExact: true, + path: '/connectors', + url: '', + params: { + section: 'connectors', + }, + }, + }; + + render( + + + + + + + + ); + + const createConnectorButton = await screen.findByRole('button', { name: 'Create connector' }); + userEvent.click(createConnectorButton); + const selectConnectorFlyout = await screen.findByRole('heading', { + name: 'Select a connector', + }); + expect(selectConnectorFlyout).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.tsx index 836ff6730920bd..3611797da36afe 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_home.tsx @@ -5,13 +5,13 @@ * 2.0. */ -import React, { lazy, useCallback, useEffect } from 'react'; +import React, { lazy, useCallback, useEffect, useState } from 'react'; import { RouteComponentProps } from 'react-router-dom'; import { Routes, Route } from '@kbn/shared-ux-router'; - +import { useLocation } from 'react-router-dom'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; -import { EuiSpacer, EuiButtonEmpty, EuiPageHeader, EuiPageTemplate } from '@elastic/eui'; +import { EuiPageTemplate, EuiSpacer, EuiPageHeader, EuiButton, EuiButtonEmpty } from '@elastic/eui'; import { routeToConnectorEdit, routeToConnectors, routeToLogs, Section } from '../../../constants'; import { getAlertingSectionBreadcrumb } from '../../../lib/breadcrumb'; import { getCurrentDocTitle } from '../../../lib/doc_title'; @@ -20,6 +20,11 @@ import { HealthContextProvider } from '../../../context/health_context'; import { HealthCheck } from '../../../components/health_check'; import { useKibana } from '../../../../common/lib/kibana'; import ConnectorEventLogListTableWithApi from './actions_connectors_event_log_list_table'; +import { ActionConnector, EditConnectorTabs } from '../../../../types'; +import { CreateConnectorFlyout } from '../../action_connector_form/create_connector_flyout'; +import { EditConnectorFlyout } from '../../action_connector_form/edit_connector_flyout'; +import { EditConnectorProps } from './types'; +import { loadAllActions } from '../../../lib/action_connector_api'; const ConnectorsList = lazy(() => import('./actions_connectors_list')); @@ -33,7 +38,49 @@ export const ActionsConnectorsHome: React.FunctionComponent { - const { chrome, setBreadcrumbs, docLinks } = useKibana().services; + const { + chrome, + setBreadcrumbs, + docLinks, + actionTypeRegistry, + http, + notifications: { toasts }, + } = useKibana().services; + + const location = useLocation(); + + const [addFlyoutVisible, setAddFlyoutVisibility] = useState(false); + const [editConnectorProps, setEditConnectorProps] = useState({}); + const [actions, setActions] = useState([]); + const [isLoadingActions, setIsLoadingActions] = useState(true); + + const editItem = (actionConnector: ActionConnector, tab: EditConnectorTabs, isFix?: boolean) => { + setEditConnectorProps({ initialConnector: actionConnector, tab, isFix: isFix ?? false }); + }; + + const loadActions = useCallback(async () => { + setIsLoadingActions(true); + try { + const actionsResponse = await loadAllActions({ http }); + setActions(actionsResponse); + } catch (e) { + toasts.addDanger({ + title: i18n.translate( + 'xpack.triggersActionsUI.sections.connector.home.unableToLoadActionsMessage', + { + defaultMessage: 'Unable to load connectors', + } + ), + }); + } finally { + setIsLoadingActions(false); + } + }, [http, toasts]); + + useEffect(() => { + loadActions(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); const tabs: Array<{ id: Section; @@ -84,6 +131,61 @@ export const ActionsConnectorsHome: React.FunctionComponent { + return suspendedComponentWithProps( + ConnectorsList, + 'xl' + )({ + setAddFlyoutVisibility, + editItem, + isLoadingActions, + actions, + loadActions, + setActions, + }); + }; + + const createConnectorButton = ( + setAddFlyoutVisibility(true)} + isLoading={false} + > + {i18n.translate('xpack.triggersActionsUI.connectors.home.createConnector', { + defaultMessage: 'Create connector', + })} + + ); + + const documentationButton = ( + + + + ); + + let topRightSideButtons: React.ReactNode[] = []; + switch (location.pathname) { + case '/connectors': + topRightSideButtons = [createConnectorButton, documentationButton]; + break; + case '/logs': + topRightSideButtons = [documentationButton]; + break; + default: + topRightSideButtons = []; + } return ( <> - - , - ]} + rightSideItems={topRightSideButtons} tabs={tabs.map((tab) => ({ label: tab.name, onClick: () => onSectionChange(tab.id), @@ -120,6 +209,37 @@ export const ActionsConnectorsHome: React.FunctionComponent + {addFlyoutVisible && ( + { + setAddFlyoutVisibility(false); + }} + onTestConnector={(connector) => editItem(connector, EditConnectorTabs.Test)} + onConnectorCreated={loadActions} + actionTypeRegistry={actionTypeRegistry} + /> + )} + {editConnectorProps.initialConnector && ( + { + setEditConnectorProps({ + tab: editConnectorProps?.tab, + isFix: editConnectorProps?.isFix, + }); + }} + onConnectorUpdated={(connector) => { + setEditConnectorProps({ ...editConnectorProps, initialConnector: connector }); + loadActions(); + }} + actionTypeRegistry={actionTypeRegistry} + /> + )} + @@ -127,7 +247,7 @@ export const ActionsConnectorsHome: React.FunctionComponent diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx index 79ab1fdd0eec81..081b7dd1f9fd6f 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.test.tsx @@ -6,16 +6,18 @@ */ import * as React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; // eslint-disable-next-line @kbn/eslint/module_migration import { ThemeProvider } from 'styled-components'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; - import ActionsConnectorsList from './actions_connectors_list'; import { coreMock } from '@kbn/core/public/mocks'; import { ReactWrapper } from 'enzyme'; import { act } from 'react-dom/test-utils'; import { actionTypeRegistryMock } from '../../../action_type_registry.mock'; import { useKibana } from '../../../../common/lib/kibana'; +import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; jest.mock('../../../../common/lib/kibana'); import { ActionConnector, GenericValidationResult } from '../../../../types'; @@ -28,7 +30,7 @@ jest.mock('../../../lib/action_connector_api', () => ({ const useKibanaMock = useKibana as jest.Mocked; const actionTypeRegistry = actionTypeRegistryMock.create(); const mocks = coreMock.createSetup(); -const { loadAllActions, loadActionTypes } = jest.requireMock('../../../lib/action_connector_api'); +const { loadActionTypes } = jest.requireMock('../../../lib/action_connector_api'); const mockGetParams = jest.fn().mockReturnValue({}); const mockGetLocation = jest.fn().mockReturnValue({ search: '' }); const mockGetHistory = jest.fn().mockReturnValue({ push: jest.fn(), createHref: jest.fn() }); @@ -41,10 +43,7 @@ jest.mock('react-router-dom', () => ({ describe('actions_connectors_list', () => { describe('component empty', () => { - let wrapper: ReactWrapper; - - async function setup() { - loadAllActions.mockResolvedValueOnce([]); + const setup = async () => { loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -76,95 +75,106 @@ describe('actions_connectors_list', () => { show: true, }, }; - wrapper = mountWithIntl(); - - // Wait for active space to resolve before requesting the component to update - await act(async () => { - await nextTick(); - wrapper.update(); - }); - } + }; it('renders empty prompt', async () => { await setup(); - expect( - wrapper.find('[data-test-subj="createFirstConnectorEmptyPrompt"]').find('EuiEmptyPrompt') - ).toHaveLength(1); - expect( - wrapper.find('[data-test-subj="createFirstActionButton"]').find('EuiButton') - ).toHaveLength(1); + render( + + {}} + loadActions={async () => {}} + editItem={() => {}} + isLoadingActions={false} + actions={[]} + setActions={() => {}} + /> + + ); + + expect(await screen.findByTestId('createFirstConnectorEmptyPrompt')).toBeInTheDocument(); + expect(await screen.findByTestId('createFirstActionButton')).toBeInTheDocument(); }); test('if click create button should render CreateConnectorFlyout', async () => { await setup(); - wrapper.find('[data-test-subj="createFirstActionButton"]').last().simulate('click'); - expect(wrapper.find('[data-test-subj="create-connector-flyout"]').exists()).toBeTruthy(); + const setAddFlyoutVisibility = jest.fn(); + render( + + {}} + editItem={() => {}} + isLoadingActions={false} + actions={[]} + setActions={() => {}} + /> + + ); + const createFirstActionButton = await screen.findByTestId('createFirstActionButton'); + userEvent.click(createFirstActionButton); + await waitFor(() => { + expect(setAddFlyoutVisibility).toBeCalled(); + }); }); }); describe('component with items', () => { let wrapper: ReactWrapper; - - async function setup(actionConnectors?: ActionConnector[]) { - loadAllActions.mockResolvedValueOnce( - actionConnectors ?? [ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - isPreconfigured: false, - isDeprecated: false, - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - isPreconfigured: false, - isDeprecated: false, - config: {}, - }, - { - id: '3', - actionTypeId: 'test2', - description: 'My preconfigured test 2', - isMissingSecrets: true, - referencedByCount: 1, - isPreconfigured: true, - isDeprecated: false, - config: {}, - }, - { - id: '4', - actionTypeId: 'nonexistent', - description: 'My invalid connector type', - referencedByCount: 1, - isPreconfigured: false, - isDeprecated: false, - config: {}, - }, - { - id: '5', - actionTypeId: 'test3', - description: 'action with all feature ids', - referencedByCount: 1, - isPreconfigured: false, - isDeprecated: false, - config: {}, - }, - { - id: '6', - actionTypeId: 'test4', - description: 'only cases', - referencedByCount: 1, - isPreconfigured: false, - isDeprecated: false, - config: {}, - }, - ] - ); + const mockedActions = [ + { + id: '1', + actionTypeId: 'test', + isPreconfigured: false, + isDeprecated: false, + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + description: 'My test 2', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '3', + actionTypeId: 'test2', + isMissingSecrets: true, + referencedByCount: 1, + isPreconfigured: true, + isDeprecated: false, + config: {}, + }, + { + id: '4', + actionTypeId: 'nonexistent', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '5', + actionTypeId: 'test3', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '6', + actionTypeId: 'test4', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + ] as ActionConnector[]; + + async function setup(actionConnectors = mockedActions) { loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -226,15 +236,25 @@ describe('actions_connectors_list', () => { show: true, }, }; - wrapper = mountWithIntl(); + + const editItem = jest.fn(); + + wrapper = mountWithIntl( + {}} + loadActions={async () => {}} + editItem={editItem} + isLoadingActions={false} + actions={actionConnectors} + setActions={() => {}} + /> + ); // Wait for active space to resolve before requesting the component to update await act(async () => { await nextTick(); wrapper.update(); }); - - expect(loadAllActions).toHaveBeenCalled(); } it('renders table of connectors', async () => { @@ -324,7 +344,6 @@ describe('actions_connectors_list', () => { actionTypeId: 'test', name: `My test ${index}`, secrets: {}, - description: `My test ${index}`, isPreconfigured: false, isDeprecated: false, isSystemAction: false, @@ -342,20 +361,14 @@ describe('actions_connectors_list', () => { wrapper.find('[data-test-subj="pagination-button-1"]').last().simulate('click'); expect(wrapper.find('[data-test-subj="actionsTable"]').first().prop('pagination')) .toMatchInlineSnapshot(` - Object { - "initialPageIndex": 0, - "pageIndex": 1, - } - `); + Object { + "initialPageIndex": 0, + "pageIndex": 1, + } + `); }); - test('if select item for edit should render EditConnectorFlyout', async () => { - await setup(); - await wrapper.find('[data-test-subj="edit1"]').first().find('button').simulate('click'); - expect(wrapper.find('[data-test-subj="edit-connector-flyout"]').exists()).toBeTruthy(); - }); - - test('if delete item that is used in a rule should show a warning in the popup', async () => { + it('if delete item that is used in a rule should show a warning in the popup', async () => { await setup(); await wrapper.find('.euiButtonIcon').last().simulate('click'); expect(wrapper.find('[data-test-subj="deleteConnectorsConfirmation"]').exists()).toBeTruthy(); @@ -368,11 +381,153 @@ describe('actions_connectors_list', () => { }); }); + describe('check EditConnectorFlyout will open on edit connector', () => { + let wrapper: ReactWrapper; + const mockedActions = [ + { + id: '1', + actionTypeId: 'test', + isPreconfigured: false, + isDeprecated: false, + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + description: 'My test 2', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '3', + actionTypeId: 'test2', + isMissingSecrets: true, + referencedByCount: 1, + isPreconfigured: true, + isDeprecated: false, + config: {}, + }, + { + id: '4', + actionTypeId: 'nonexistent', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '5', + actionTypeId: 'test3', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + { + id: '6', + actionTypeId: 'test4', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + ] as ActionConnector[]; + + async function setup() { + loadActionTypes.mockResolvedValueOnce([ + { + id: 'test', + name: 'Test', + enabled: true, + supportedFeatureIds: ['alerting'], + }, + { + id: 'test2', + name: 'Test2', + enabled: true, + supportedFeatureIds: ['alerting', 'cases'], + }, + { + id: 'test3', + name: 'Test3', + enabled: true, + supportedFeatureIds: ['alerting', 'cases', 'siem', 'uptime'], + }, + { + id: 'test4', + name: 'Test4', + enabled: true, + supportedFeatureIds: ['cases'], + }, + ]); + + const [ + { + application: { capabilities }, + }, + ] = await mocks.getStartServices(); + + const mockedActionParamsFields = React.lazy(async () => ({ + default() { + return <>; + }, + })); + + actionTypeRegistry.get.mockReturnValue({ + id: 'test', + iconClass: 'test', + selectMessage: 'test', + validateParams: (): Promise> => { + const validationResult = { errors: {} }; + return Promise.resolve(validationResult); + }, + actionConnectorFields: null, + actionParamsFields: mockedActionParamsFields, + }); + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; + // eslint-disable-next-line react-hooks/rules-of-hooks + useKibanaMock().services.application.capabilities = { + ...capabilities, + actions: { + delete: true, + save: true, + show: true, + }, + }; + } + + it('if select item for edit should render EditConnectorFlyout', async () => { + await setup(); + const editItem = jest.fn(); + + wrapper = mountWithIntl( + {}} + loadActions={async () => {}} + editItem={editItem} + isLoadingActions={false} + actions={mockedActions} + setActions={() => {}} + /> + ); + + // Wait for active space to resolve before requesting the component to update + await act(async () => { + await nextTick(); + wrapper.update(); + }); + wrapper.find('[data-test-subj="edit1"]').first().find('button').simulate('click'); + expect(editItem).toBeCalled(); + }); + }); describe('component empty with show only capability', () => { let wrapper: ReactWrapper; async function setup() { - loadAllActions.mockResolvedValueOnce([]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -402,7 +557,17 @@ describe('actions_connectors_list', () => { delete: false, }, }; - wrapper = mountWithIntl(); + + wrapper = mountWithIntl( + {}} + loadActions={async () => {}} + editItem={() => {}} + isLoadingActions={false} + actions={[]} + setActions={() => {}} + /> + ); // Wait for active space to resolve before requesting the component to update await act(async () => { @@ -416,7 +581,7 @@ describe('actions_connectors_list', () => { expect(wrapper.find('[defaultMessage="No permissions to create connectors"]')).toHaveLength( 1 ); - expect(wrapper.find('[data-test-subj="createActionButton"]')).toHaveLength(0); + expect(wrapper.find('[data-test-subj="createConnectorButton"]')).toHaveLength(0); }); }); @@ -424,22 +589,6 @@ describe('actions_connectors_list', () => { let wrapper: ReactWrapper; async function setup() { - loadAllActions.mockResolvedValueOnce([ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - config: {}, - }, - ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -469,7 +618,35 @@ describe('actions_connectors_list', () => { }; // eslint-disable-next-line react-hooks/rules-of-hooks useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; - wrapper = mountWithIntl(); + wrapper = mountWithIntl( + {}} + loadActions={async () => {}} + editItem={() => {}} + isLoadingActions={false} + actions={ + [ + { + id: '1', + actionTypeId: 'test', + isPreconfigured: false, + isDeprecated: false, + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + referencedByCount: 1, + isPreconfigured: false, + isDeprecated: false, + config: {}, + }, + ] as ActionConnector[] + } + setActions={() => {}} + /> + ); // Wait for active space to resolve before requesting the component to update await act(async () => { @@ -494,22 +671,6 @@ describe('actions_connectors_list', () => { let wrapper: ReactWrapper; async function setup() { - loadAllActions.mockResolvedValueOnce([ - { - id: '1', - actionTypeId: 'test', - description: 'My test', - referencedByCount: 1, - config: {}, - }, - { - id: '2', - actionTypeId: 'test2', - description: 'My test 2', - referencedByCount: 1, - config: {}, - }, - ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -546,15 +707,37 @@ describe('actions_connectors_list', () => { }; // eslint-disable-next-line react-hooks/rules-of-hooks useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; - wrapper = mountWithIntl(); + wrapper = mountWithIntl( + {}} + loadActions={async () => {}} + editItem={() => {}} + isLoadingActions={false} + actions={ + [ + { + id: '1', + actionTypeId: 'test', + referencedByCount: 1, + config: {}, + }, + { + id: '2', + actionTypeId: 'test2', + referencedByCount: 1, + config: {}, + }, + ] as ActionConnector[] + } + setActions={() => {}} + /> + ); // Wait for active space to resolve before requesting the component to update await act(async () => { await nextTick(); wrapper.update(); }); - - expect(loadAllActions).toHaveBeenCalled(); } it('renders table of connectors', async () => { @@ -574,24 +757,6 @@ describe('actions_connectors_list', () => { let wrapper: ReactWrapper; async function setup() { - loadAllActions.mockResolvedValueOnce([ - { - id: '1', - actionTypeId: '.servicenow', - description: 'My test', - referencedByCount: 1, - config: { usesTableApi: true }, - isDeprecated: true, - }, - { - id: '2', - actionTypeId: '.servicenow-sir', - description: 'My test 2', - referencedByCount: 1, - config: { usesTableApi: true }, - isDeprecated: true, - }, - ]); loadActionTypes.mockResolvedValueOnce([ { id: 'test', @@ -630,7 +795,31 @@ describe('actions_connectors_list', () => { useKibanaMock().services.actionTypeRegistry = actionTypeRegistry; wrapper = mountWithIntl( ({ eui: { euiSizeS: '15px' }, darkMode: true })}> - + {}} + loadActions={async () => {}} + editItem={() => {}} + isLoadingActions={false} + actions={ + [ + { + id: '1', + actionTypeId: '.servicenow', + referencedByCount: 1, + config: { usesTableApi: true }, + isDeprecated: true, + }, + { + id: '2', + actionTypeId: '.servicenow-sir', + referencedByCount: 1, + config: { usesTableApi: true }, + isDeprecated: true, + }, + ] as Array> + } + setActions={() => {}} + /> ); @@ -639,8 +828,6 @@ describe('actions_connectors_list', () => { await nextTick(); wrapper.update(); }); - - expect(loadAllActions).toHaveBeenCalled(); } it('shows the warning icon', async () => { diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx index d7f5a2beb4c8f3..cdfde543a3a693 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/actions_connectors_list.tsx @@ -23,11 +23,10 @@ import { EuiPageTemplate, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { omit } from 'lodash'; import { useHistory, useLocation, useParams } from 'react-router-dom'; import { getConnectorCompatibility } from '@kbn/actions-plugin/common'; import { FormattedMessage } from '@kbn/i18n-react'; -import { loadAllActions, loadActionTypes, deleteActions } from '../../../lib/action_connector_api'; +import { loadActionTypes, deleteActions } from '../../../lib/action_connector_api'; import { hasDeleteActionsCapability, hasSaveActionsCapability, @@ -49,18 +48,10 @@ import { connectorDeprecatedMessage, deprecatedMessage, } from '../../../../common/connectors_selection'; -import { CreateConnectorFlyout } from '../../action_connector_form/create_connector_flyout'; -import { EditConnectorFlyout } from '../../action_connector_form/edit_connector_flyout'; import { getAlertingSectionBreadcrumb } from '../../../lib/breadcrumb'; import { getCurrentDocTitle } from '../../../lib/doc_title'; import { routeToConnectors } from '../../../constants'; -interface EditConnectorProps { - initialConnector?: ActionConnector; - tab?: EditConnectorTabs; - isFix?: boolean; -} - const ConnectorIconTipWithSpacing: React.FC = () => { return ( { ); }; -const ActionsConnectorsList: React.FunctionComponent = () => { +const ActionsConnectorsList = ({ + setAddFlyoutVisibility, + editItem, + isLoadingActions, + actions, + loadActions, + setActions, +}: { + setAddFlyoutVisibility: (state: boolean) => void; + editItem: (actionConnector: ActionConnector, tab: EditConnectorTabs, isFix?: boolean) => void; + isLoadingActions: boolean; + actions: ActionConnector[]; + loadActions: () => Promise; + setActions: (state: ActionConnector[]) => void; +}) => { const { http, notifications: { toasts }, application: { capabilities }, - actionTypeRegistry, setBreadcrumbs, chrome, docLinks, } = useKibana().services; + const { connectorId } = useParams<{ connectorId?: string }>(); const history = useHistory(); const location = useLocation(); @@ -94,18 +99,10 @@ const ActionsConnectorsList: React.FunctionComponent = () => { const canSave = hasSaveActionsCapability(capabilities); const [actionTypesIndex, setActionTypesIndex] = useState(undefined); - const [actions, setActions] = useState([]); const [pageIndex, setPageIndex] = useState(0); const [selectedItems, setSelectedItems] = useState([]); const [isLoadingActionTypes, setIsLoadingActionTypes] = useState(false); - const [isLoadingActions, setIsLoadingActions] = useState(true); - const [addFlyoutVisible, setAddFlyoutVisibility] = useState(false); - const [editConnectorProps, setEditConnectorProps] = useState({}); const [connectorsToDelete, setConnectorsToDelete] = useState([]); - useEffect(() => { - loadActions(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); const [showWarningText, setShowWarningText] = useState(false); // Set breadcrumb and page title @@ -172,7 +169,7 @@ const ActionsConnectorsList: React.FunctionComponent = () => { window.history.replaceState(null, '', linkToConnectors); } - }, [actions, connectorId, history, isLoadingActions, location]); + }, [actions, connectorId, editItem, history, isLoadingActions, location]); function setDeleteConnectorWarning(connectors: string[]) { const show = connectors.some((c) => { @@ -188,29 +185,6 @@ const ActionsConnectorsList: React.FunctionComponent = () => { setDeleteConnectorWarning(itemIds); } - async function loadActions() { - setIsLoadingActions(true); - try { - const actionsResponse = await loadAllActions({ http }); - setActions(actionsResponse); - } catch (e) { - toasts.addDanger({ - title: i18n.translate( - 'xpack.triggersActionsUI.sections.actionsConnectorsList.unableToLoadActionsMessage', - { - defaultMessage: 'Unable to load connectors', - } - ), - }); - } finally { - setIsLoadingActions(false); - } - } - - function editItem(actionConnector: ActionConnector, tab: EditConnectorTabs, isFix?: boolean) { - setEditConnectorProps({ initialConnector: actionConnector, tab, isFix: isFix ?? false }); - } - const actionsTableColumns = [ { field: 'name', @@ -434,50 +408,34 @@ const ActionsConnectorsList: React.FunctionComponent = () => { options: actionTypesList, }, ], - toolsLeft: (selectedItems.length === 0 || !canDelete - ? [] - : [ - onDelete(selectedItems)} - title={ - canDelete - ? undefined - : i18n.translate( - 'xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle', - { defaultMessage: 'Unable to delete connectors' } - ) - } - > - - , - ] - ).concat( - canSave - ? [ + toolsLeft: + selectedItems.length === 0 || !canDelete + ? [] + : [ setAddFlyoutVisibility(true)} + key="delete" + iconType="trash" + color="danger" + data-test-subj="bulkDelete" + onClick={() => onDelete(selectedItems)} + title={ + canDelete + ? undefined + : i18n.translate( + 'xpack.triggersActionsUI.sections.actionsConnectorsList.buttons.deleteDisabledTitle', + { defaultMessage: 'Unable to delete connectors' } + ) + } > , - ] - : [] - ), + ], }} /> ); @@ -546,33 +504,6 @@ const ActionsConnectorsList: React.FunctionComponent = () => { /> )} {actionConnectorTableItems.length === 0 && !canSave && } - {addFlyoutVisible ? ( - { - setAddFlyoutVisibility(false); - }} - onTestConnector={(connector) => editItem(connector, EditConnectorTabs.Test)} - onConnectorCreated={loadActions} - actionTypeRegistry={actionTypeRegistry} - /> - ) : null} - {editConnectorProps.initialConnector ? ( - { - setEditConnectorProps(omit(editConnectorProps, 'initialConnector')); - }} - onConnectorUpdated={(connector) => { - setEditConnectorProps({ ...editConnectorProps, initialConnector: connector }); - loadActions(); - }} - actionTypeRegistry={actionTypeRegistry} - /> - ) : null} ); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/types.ts new file mode 100644 index 00000000000000..abc595b98cdee5 --- /dev/null +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/actions_connectors_list/components/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { ActionConnector, EditConnectorTabs } from '../../../../types'; + +export interface EditConnectorProps { + initialConnector?: ActionConnector; + tab?: EditConnectorTabs; + isFix?: boolean; +} diff --git a/x-pack/test/functional/services/actions/common.ts b/x-pack/test/functional/services/actions/common.ts index 145f56e49a3510..60bba2b6b494d0 100644 --- a/x-pack/test/functional/services/actions/common.ts +++ b/x-pack/test/functional/services/actions/common.ts @@ -15,7 +15,7 @@ export function ActionsCommonServiceProvider({ getService, getPageObject }: FtrP return { async openNewConnectorForm(name: string) { - const createBtn = await testSubjects.find('createActionButton'); + const createBtn = await testSubjects.find('createConnectorButton'); const createBtnIsVisible = await createBtn.isDisplayed(); if (createBtnIsVisible) { await createBtn.click(); diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts index 25243b838e583a..b584c5d3a78b65 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/connectors/slack.ts @@ -36,8 +36,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); it('should only show one slack connector', async () => { - if (await testSubjects.exists('createActionButton')) { - await testSubjects.click('createActionButton'); + if (await testSubjects.exists('createConnectorButton')) { + await testSubjects.click('createConnectorButton'); } else { await testSubjects.click('createFirstActionButton'); } diff --git a/x-pack/test/functional_with_es_ssl/page_objects/triggers_actions_ui_page.ts b/x-pack/test/functional_with_es_ssl/page_objects/triggers_actions_ui_page.ts index 77c6b9b6926785..137e9ef6f6f2bc 100644 --- a/x-pack/test/functional_with_es_ssl/page_objects/triggers_actions_ui_page.ts +++ b/x-pack/test/functional_with_es_ssl/page_objects/triggers_actions_ui_page.ts @@ -51,7 +51,7 @@ export function TriggersActionsPageProvider({ getService }: FtrProviderContext) return await noPermissionsTitle.getVisibleText(); }, async clickCreateConnectorButton() { - const createBtn = await testSubjects.find('createActionButton'); + const createBtn = await testSubjects.find('createConnectorButton'); const createBtnIsVisible = await createBtn.isDisplayed(); if (createBtnIsVisible) { await createBtn.click(); diff --git a/x-pack/test_serverless/functional/page_objects/svl_triggers_actions_ui_page.ts b/x-pack/test_serverless/functional/page_objects/svl_triggers_actions_ui_page.ts index c084e3eda6a7be..a2289ce1a2662f 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_triggers_actions_ui_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_triggers_actions_ui_page.ts @@ -51,7 +51,7 @@ export function SvlTriggersActionsPageProvider({ getService }: FtrProviderContex return await noPermissionsTitle.getVisibleText(); }, async clickCreateConnectorButton() { - const createBtn = await testSubjects.find('createActionButton'); + const createBtn = await testSubjects.find('createConnectorButton'); const createBtnIsVisible = await createBtn.isDisplayed(); if (createBtnIsVisible) { await createBtn.click(); From 74c9570258f9c58d6d84272c5c96d5b5b2282d6e Mon Sep 17 00:00:00 2001 From: Julia Date: Thu, 15 Aug 2024 10:12:53 +0200 Subject: [PATCH 74/92] [MX] Break line of custom field value when it is too long (#190490) Issue: https://github.com/elastic/kibana/issues/189076 If you paste a long text in a text custom field you cannot edit it. The pencil is not visible anymore. ![Screenshot 2024-08-14 at 17 39 51](https://github.com/user-attachments/assets/e6f23843-9b79-4b6f-b4c1-464fbd04ebe0) Used `.eui-textBreakWord` class to solve the issue How to test: 1. Create a custom field for cases with really long test (but less than 160 symbols) 2. Create a case 3. See that the test is breaked. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../cases/public/components/custom_fields/text/view.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/custom_fields/text/view.tsx b/x-pack/plugins/cases/public/components/custom_fields/text/view.tsx index 239ab8a1a53872..ddd1554cbd1d66 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/text/view.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/text/view.tsx @@ -14,7 +14,14 @@ import type { CustomFieldType } from '../types'; const ViewComponent: CustomFieldType['View'] = ({ customField }) => { const value = customField?.value ?? '-'; - return {value}; + return ( + + {value} + + ); }; ViewComponent.displayName = 'View'; From 2c5ae3609050feca233f9c4dc64ffb4993c45bce Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 15 Aug 2024 13:44:48 +0200 Subject: [PATCH 75/92] [Detections] EQL query validation: Separate syntax errors into a own error type (#10181) (#190149) ## Summary Addresses https://github.com/elastic/security-team/issues/10181 This PR is a refactoring of EQL query validator: * to separate different validation errors passed from ES. Before we marked `parsing_exception`, `verification_exception` and `mapping_exception` as the same error of type `ERR_INVALID_EQL`. After these changes we will split these errors into separate ones: syntax (`parsing_exception`), invalid EQL (`verification_exception` and `mapping_exception`; can be split in future if needed) * to handle missing data source as a new EQL error of type `MISSING_DATA_SOURCE`. Before `data.search.search()` call would throw an exception in case data source does not exist and we would handle it as a failed request and show an error toast (see relevant ticket https://github.com/elastic/kibana/issues/178611). After these changes we would not show a toast and handle missing data source error as other EQL validation errors - showing an error message in the EQL query bar. This will allow us to distinguish between different types of EQL validation errors and will help to decide on whether certain errors are blocking during the rule creation/editing flow (https://github.com/elastic/kibana/issues/180407). ### Checklist Delete any items that are not applicable to this PR. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [Integration: Rule execution](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6754) (100 ESS & 100 Serverless) - [Cypress: Detection Engine](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/6766) (100 ESS & 100 Serverless) --------- Co-authored-by: Elastic Machine --- .../eql/validation/helpers.mock.ts | 26 +++ .../search_strategy/eql/validation/helpers.ts | 15 ++ .../public/common/hooks/eql/api.test.ts | 162 ++++++++++++++++++ .../public/common/hooks/eql/api.ts | 88 +++++++--- .../eql_query_bar/validators.mock.ts | 4 +- .../components/eql_query_bar/validators.ts | 22 +-- .../rule_creation/eql_rule.cy.ts | 62 +++++++ .../cypress/screens/create_new_rule.ts | 3 + 8 files changed, 342 insertions(+), 40 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/common/hooks/eql/api.test.ts diff --git a/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.mock.ts b/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.mock.ts index ca44885d164d6e..86b5d246ff378b 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.mock.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.mock.ts @@ -56,6 +56,32 @@ export const getEqlResponseWithValidationErrors = (): ErrorResponse => ({ }, }); +export const getEqlResponseWithMappingError = (): ErrorResponse => ({ + error: { + root_cause: [ + { + type: 'mapping_exception', + reason: "Inaccessible index 'restricted-*'", + }, + ], + type: 'mapping_exception', + reason: "Inaccessible index 'restricted-*'", + }, +}); + +export const getEqlResponseWithParsingError = (): ErrorResponse => ({ + error: { + root_cause: [ + { + type: 'parsing_exception', + reason: "line 1:5: missing 'where' at 'demo'", + }, + ], + type: 'parsing_exception', + reason: "line 1:5: missing 'where' at 'demo'", + }, +}); + export const getEqlResponseWithNonValidationError = (): TransportResult['body'] => ({ error: { root_cause: [ diff --git a/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.ts b/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.ts index 63a812cad759a6..c183cd7ceb6055 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/eql/validation/helpers.ts @@ -23,12 +23,27 @@ export interface ErrorResponse { const isValidationErrorType = (type: unknown): boolean => type === PARSING_ERROR_TYPE || type === VERIFICATION_ERROR_TYPE || type === MAPPING_ERROR_TYPE; +const isParsingErrorType = (type: unknown): boolean => type === PARSING_ERROR_TYPE; + +const isVerificationErrorType = (type: unknown): boolean => type === VERIFICATION_ERROR_TYPE; + +const isMappingErrorType = (type: unknown): boolean => type === MAPPING_ERROR_TYPE; + export const isErrorResponse = (response: unknown): response is ErrorResponse => has(response, 'error.type'); export const isValidationErrorResponse = (response: unknown): response is ErrorResponse => isErrorResponse(response) && isValidationErrorType(get(response, 'error.type')); +export const isParsingErrorResponse = (response: unknown): response is ErrorResponse => + isErrorResponse(response) && isParsingErrorType(get(response, 'error.type')); + +export const isVerificationErrorResponse = (response: unknown): response is ErrorResponse => + isErrorResponse(response) && isVerificationErrorType(get(response, 'error.type')); + +export const isMappingErrorResponse = (response: unknown): response is ErrorResponse => + isErrorResponse(response) && isMappingErrorType(get(response, 'error.type')); + export const getValidationErrors = (response: ErrorResponse): string[] => response.error.root_cause .filter((cause) => isValidationErrorType(cause.type)) diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/api.test.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/api.test.ts new file mode 100644 index 00000000000000..ee7c9a1515f9ee --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/eql/api.test.ts @@ -0,0 +1,162 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { of } from 'rxjs'; + +import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; +import { searchServiceMock } from '@kbn/data-plugin/public/search/mocks'; + +import { validateEql } from './api'; +import { + getEqlResponseWithMappingError, + getEqlResponseWithNonValidationError, + getEqlResponseWithParsingError, + getEqlResponseWithValidationError, + getEqlResponseWithValidationErrors, +} from '../../../../common/search_strategy/eql/validation/helpers.mock'; + +const searchMock = searchServiceMock.createStartContract(); + +const mockDataService = { + ...dataPluginMock.createStartContract(), + search: searchMock, +}; + +const triggerValidateEql = () => { + const signal = new AbortController().signal; + return validateEql({ + data: mockDataService, + dataViewTitle: 'logs-*', + query: 'any where true', + signal, + runtimeMappings: undefined, + options: undefined, + }); +}; + +describe('validateEql', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('handle EqlSearchStrategyResponse', () => { + it('should return valid set to true if validation response is not an error', async () => { + searchMock.search.mockImplementation(() => of({ rawResponse: 'Successful validation!' })); + const response = await triggerValidateEql(); + + expect(response).toEqual({ valid: true }); + }); + + it('should return EQL_ERR_INVALID_EQL error in case of `verification_exception` error', async () => { + searchMock.search.mockImplementation(() => + of({ rawResponse: getEqlResponseWithValidationError() }) + ); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { + code: 'EQL_ERR_INVALID_EQL', + messages: [ + 'Found 2 problems\nline 1:1: Unknown column [event.category]\nline 1:13: Unknown column [event.name]', + ], + }, + }); + }); + + it('should return EQL_ERR_INVALID_EQL error in case of multiple `verification_exception` errors', async () => { + searchMock.search.mockImplementation(() => + of({ rawResponse: getEqlResponseWithValidationErrors() }) + ); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { + code: 'EQL_ERR_INVALID_EQL', + messages: [ + 'Found 2 problems\nline 1:1: Unknown column [event.category]\nline 1:13: Unknown column [event.name]', + "line 1:4: mismatched input '' expecting 'where'", + ], + }, + }); + }); + + it('should return EQL_ERR_INVALID_EQL error in case of `mapping_exception` error', async () => { + searchMock.search.mockImplementation(() => + of({ rawResponse: getEqlResponseWithMappingError() }) + ); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { code: 'EQL_ERR_INVALID_EQL', messages: ["Inaccessible index 'restricted-*'"] }, + }); + }); + + it('should return EQL_ERR_INVALID_SYNTAX error in case of `parsing_exception` error', async () => { + searchMock.search.mockImplementation(() => + of({ rawResponse: getEqlResponseWithParsingError() }) + ); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { + code: 'EQL_ERR_INVALID_SYNTAX', + messages: ["line 1:5: missing 'where' at 'demo'"], + }, + }); + }); + + it('should return EQL_ERR_FAILED_REQUEST error in case of non-validation error', async () => { + searchMock.search.mockImplementation(() => + of({ rawResponse: getEqlResponseWithNonValidationError() }) + ); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { + code: 'EQL_ERR_FAILED_REQUEST', + error: expect.objectContaining( + new Error(JSON.stringify(getEqlResponseWithNonValidationError())) + ), + }, + }); + }); + + it('should return EQL_ERR_MISSING_DATA_SOURCE error in case `data.search` throws an error which starts with `index_not_found_exception`', async () => { + const message = 'index_not_found_exception Found 1 problem line -1:-1: Unknown index [*,-*]'; + searchMock.search.mockImplementation(() => { + throw new Error(message); + }); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { code: 'EQL_ERR_MISSING_DATA_SOURCE', messages: [message] }, + }); + }); + + it('should return EQL_ERR_FAILED_REQUEST error in case `data.search` throws an error', async () => { + const message = 'Internal exception'; + searchMock.search.mockImplementation(() => { + throw new Error(message); + }); + const response = await triggerValidateEql(); + + expect(response).toEqual({ + valid: false, + error: { + code: 'EQL_ERR_FAILED_REQUEST', + error: expect.objectContaining(new Error(message)), + }, + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts index 46d01bf15d5774..921d4fde4bfd0c 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts +++ b/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts @@ -15,9 +15,18 @@ import type { EqlOptionsSelected } from '../../../../common/search_strategy'; import { getValidationErrors, isErrorResponse, - isValidationErrorResponse, + isMappingErrorResponse, + isParsingErrorResponse, + isVerificationErrorResponse, } from '../../../../common/search_strategy/eql'; +export enum EQL_ERROR_CODES { + FAILED_REQUEST = 'EQL_ERR_FAILED_REQUEST', + INVALID_EQL = 'EQL_ERR_INVALID_EQL', + INVALID_SYNTAX = 'EQL_ERR_INVALID_SYNTAX', + MISSING_DATA_SOURCE = 'EQL_ERR_MISSING_DATA_SOURCE', +} + interface Params { dataViewTitle: string; query: string; @@ -34,31 +43,60 @@ export const validateEql = async ({ signal, runtimeMappings, options, -}: Params): Promise<{ valid: boolean; errors: string[] }> => { - const { rawResponse: response } = await firstValueFrom( - data.search.search( - { - params: { - index: dataViewTitle, - body: { query, runtime_mappings: runtimeMappings, size: 0 }, - timestamp_field: options?.timestampField, - tiebreaker_field: options?.tiebreakerField || undefined, - event_category_field: options?.eventCategoryField, +}: Params): Promise<{ + valid: boolean; + error?: { code: EQL_ERROR_CODES; messages?: string[]; error?: Error }; +}> => { + try { + const { rawResponse: response } = await firstValueFrom( + data.search.search( + { + params: { + index: dataViewTitle, + body: { query, runtime_mappings: runtimeMappings, size: 0 }, + timestamp_field: options?.timestampField, + tiebreaker_field: options?.tiebreakerField || undefined, + event_category_field: options?.eventCategoryField, + }, + options: { ignore: [400] }, }, - options: { ignore: [400] }, + { + strategy: EQL_SEARCH_STRATEGY, + abortSignal: signal, + } + ) + ); + if (isParsingErrorResponse(response)) { + return { + valid: false, + error: { code: EQL_ERROR_CODES.INVALID_SYNTAX, messages: getValidationErrors(response) }, + }; + } else if (isVerificationErrorResponse(response) || isMappingErrorResponse(response)) { + return { + valid: false, + error: { code: EQL_ERROR_CODES.INVALID_EQL, messages: getValidationErrors(response) }, + }; + } else if (isErrorResponse(response)) { + return { + valid: false, + error: { code: EQL_ERROR_CODES.FAILED_REQUEST, error: new Error(JSON.stringify(response)) }, + }; + } else { + return { valid: true }; + } + } catch (error) { + if (error instanceof Error && error.message.startsWith('index_not_found_exception')) { + return { + valid: false, + error: { code: EQL_ERROR_CODES.MISSING_DATA_SOURCE, messages: [error.message] }, + }; + } + return { + valid: false, + error: { + code: EQL_ERROR_CODES.FAILED_REQUEST, + error, }, - { - strategy: EQL_SEARCH_STRATEGY, - abortSignal: signal, - } - ) - ); - - if (isValidationErrorResponse(response)) { - return { valid: false, errors: getValidationErrors(response) }; - } else if (isErrorResponse(response)) { - throw new Error(JSON.stringify(response)); - } else { - return { valid: true, errors: [] }; + }; } }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.mock.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.mock.ts index 83d24114e4f860..b6c9d4d71f270a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.mock.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.mock.ts @@ -5,11 +5,11 @@ * 2.0. */ +import { EQL_ERROR_CODES } from '../../../../common/hooks/eql/api'; import type { ValidationError } from '../../../../shared_imports'; -import { ERROR_CODES } from './validators'; export const getEqlValidationError = (): ValidationError => ({ - code: ERROR_CODES.INVALID_EQL, + code: EQL_ERROR_CODES.INVALID_EQL, messages: ['line 1: WRONG\nline 2: ALSO WRONG'], message: '', }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts index b3d6abc62d0b1d..04ea9bbc43356d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/eql_query_bar/validators.ts @@ -12,15 +12,10 @@ import { isEqlRule } from '../../../../../common/detection_engine/utils'; import { KibanaServices } from '../../../../common/lib/kibana'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; import { DataSourceType } from '../../../../detections/pages/detection_engine/rules/types'; -import { validateEql } from '../../../../common/hooks/eql/api'; +import { validateEql, EQL_ERROR_CODES } from '../../../../common/hooks/eql/api'; import type { FieldValueQueryBar } from '../query_bar'; import * as i18n from './translations'; -export enum ERROR_CODES { - FAILED_REQUEST = 'ERR_FAILED_REQUEST', - INVALID_EQL = 'ERR_INVALID_EQL', -} - /** * Unlike lodash's debounce, which resolves intermediate calls with the most * recent value, this implementation waits to resolve intermediate calls until @@ -54,7 +49,7 @@ export const debounceAsync = -): Promise | void | undefined> => { +): Promise | void | undefined> => { const [{ value, formData }] = args; const { query: queryValue } = value as FieldValueQueryBar; const query = queryValue.query as string; @@ -93,14 +88,15 @@ export const eqlValidator = async ( if (response?.valid === false) { return { - code: ERROR_CODES.INVALID_EQL, + code: response.error?.code, message: '', - messages: response.errors, + messages: response.error?.messages, + error: response.error?.error, }; } } catch (error) { return { - code: ERROR_CODES.FAILED_REQUEST, + code: EQL_ERROR_CODES.FAILED_REQUEST, message: i18n.EQL_VALIDATION_REQUEST_ERROR, error, }; @@ -117,10 +113,10 @@ export const getValidationResults = ( const [error] = field.errors; const message = error.message; - if (error.code === ERROR_CODES.INVALID_EQL) { - return { isValid, message, messages: error.messages }; - } else { + if (error.code === EQL_ERROR_CODES.FAILED_REQUEST) { return { isValid, message, error: error.error }; + } else { + return { isValid, message, messages: error.messages }; } } else { return { isValid, message: '' }; diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts index 6f804f9385e634..2b0b9f3fdab619 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule.cy.ts @@ -64,6 +64,7 @@ import { EQL_OPTIONS_TIMESTAMP_INPUT, EQL_QUERY_INPUT, EQL_QUERY_VALIDATION_ERROR, + EQL_QUERY_VALIDATION_ERROR_CONTENT, RULES_CREATION_FORM, } from '../../../../screens/create_new_rule'; @@ -222,4 +223,65 @@ describe('EQL rules', { tags: ['@ess', '@serverless'] }, () => { cy.get(EQL_QUERY_VALIDATION_ERROR).should('not.exist'); }); }); + + describe('EQL query validation', () => { + it('validates missing data source', () => { + login(); + visit(CREATE_RULE_URL); + selectEqlRuleType(); + getIndexPatternClearButton().click(); + getRuleIndexInput().type('endgame-*{enter}'); + + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('exist'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('be.visible'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).type('any where true'); + + cy.get(EQL_QUERY_VALIDATION_ERROR).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR).should('have.text', '1'); + cy.get(EQL_QUERY_VALIDATION_ERROR).click(); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should( + 'have.text', + `EQL Validation Errorsindex_not_found_exception\n\tCaused by:\n\t\tverification_exception: Found 1 problem\nline -1:-1: Unknown index [*,-*]\n\tRoot causes:\n\t\tverification_exception: Found 1 problem\nline -1:-1: Unknown index [*,-*]` + ); + }); + + it('validates missing data fields', () => { + login(); + visit(CREATE_RULE_URL); + selectEqlRuleType(); + + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('exist'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('be.visible'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).type('any where field1'); + + cy.get(EQL_QUERY_VALIDATION_ERROR).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR).should('have.text', '1'); + cy.get(EQL_QUERY_VALIDATION_ERROR).click(); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should( + 'have.text', + 'EQL Validation ErrorsFound 1 problem\nline 1:11: Unknown column [field1]' + ); + }); + + it('validates syntax errors', () => { + login(); + visit(CREATE_RULE_URL); + selectEqlRuleType(); + + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('exist'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).should('be.visible'); + cy.get(RULES_CREATION_FORM).find(EQL_QUERY_INPUT).type('test any where true'); + + cy.get(EQL_QUERY_VALIDATION_ERROR).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR).should('have.text', '1'); + cy.get(EQL_QUERY_VALIDATION_ERROR).click(); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should('be.visible'); + cy.get(EQL_QUERY_VALIDATION_ERROR_CONTENT).should( + 'have.text', + `EQL Validation Errorsline 1:6: extraneous input 'any' expecting 'where'` + ); + }); + }); }); 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 46b0b3a68734ac..4e6df1ed3a7503 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 @@ -119,6 +119,9 @@ export const EQL_QUERY_VALIDATION_LABEL = '.euiFormLabel-isInvalid'; export const EQL_QUERY_VALIDATION_ERROR = '[data-test-subj="eql-validation-errors-popover-button"]'; +export const EQL_QUERY_VALIDATION_ERROR_CONTENT = + '[data-test-subj="eql-validation-errors-popover-content"]'; + export const EQL_OPTIONS_POPOVER_TRIGGER = '[data-test-subj="eql-settings-trigger"]'; export const EQL_OPTIONS_TIMESTAMP_INPUT = From 9f0108b93478362b0fc4e8ba0e390be4b162d639 Mon Sep 17 00:00:00 2001 From: Ahmad Bamieh Date: Thu, 15 Aug 2024 15:02:11 +0300 Subject: [PATCH 76/92] [i18n tooling] throw when a variable is passed to template literal in default message (#190582) With the new i18n tooling, we now allow template literals to be used for the `defaultMessage` however they cannot contain variable substitutions. This PR adds a check in the parser that throws an error when there is a variable inside the template literal asking the developer to use `values` instead. Previously the parser simply skipped extracting the message which causes confusion for developers as they expect the CI to fail on errors instead of just silently allowing it bypassing translations. Thankfully we dont have any cases in the codebase that are doing direct substituion yet so this bug fix came at the right time :) thanks @maryam-saeidi for catching it! --- .../template_literal_var.ts | 20 +++++++++++++++++++ src/dev/i18n_tools/extractors/call_expt.ts | 9 +++++++++ .../i18n_tools/extractors/formatjs.test.ts | 8 ++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/dev/i18n_tools/__fixtures__/extraction_signatures/template_literal_var.ts diff --git a/src/dev/i18n_tools/__fixtures__/extraction_signatures/template_literal_var.ts b/src/dev/i18n_tools/__fixtures__/extraction_signatures/template_literal_var.ts new file mode 100644 index 00000000000000..1c482370ad725c --- /dev/null +++ b/src/dev/i18n_tools/__fixtures__/extraction_signatures/template_literal_var.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { i18n } from '@kbn/i18n'; + +const e = new Error('Should not work'); + +i18n.translate('contains_variable', { + defaultMessage: `value passed into literal directly (e: ${e.message})`, +}); + +i18n.translate('no_variable', { + defaultMessage: `template literal without any variable expressions (e: {errorMessage})`, + values: { errorMessage: e.message }, +}); diff --git a/src/dev/i18n_tools/extractors/call_expt.ts b/src/dev/i18n_tools/extractors/call_expt.ts index 3677b71fb2bb50..df3d05dc6b73e2 100644 --- a/src/dev/i18n_tools/extractors/call_expt.ts +++ b/src/dev/i18n_tools/extractors/call_expt.ts @@ -286,6 +286,15 @@ export function extractMessageDescriptor( break; } } + } else if (typescript.isTemplateExpression(initializer)) { + initializer.forEachChild((child) => { + if (typescript.isTemplateSpan(child)) { + const messageText = initializer.getFullText(); + throw new Error( + `Template literals with variable substitution is not supported. please pass variables via the 'values' object instead. Message ${messageText}` + ); + } + }); } // {id: `id`} else if (typescript.isNoSubstitutionTemplateLiteral(initializer)) { diff --git a/src/dev/i18n_tools/extractors/formatjs.test.ts b/src/dev/i18n_tools/extractors/formatjs.test.ts index 85c1642519e807..3df36c0c7447ba 100644 --- a/src/dev/i18n_tools/extractors/formatjs.test.ts +++ b/src/dev/i18n_tools/extractors/formatjs.test.ts @@ -267,6 +267,14 @@ describe('formatJS Runner', () => { } `); }); + + it('throws when template literal has a variable', async () => { + await expect(async () => + formatJsFixtureRunner('template_literal_var.ts') + ).rejects.toMatchInlineSnapshot( + `[Error: Error parsing file template_literal_var.ts: Error: Template literals with variable substitution is not supported. please pass variables via the 'values' object instead. Message \`value passed into literal directly (e: \${e.message})\`]` + ); + }); }); describe('extraction inside react components', () => { From 9a3e1b97afcab00b976245717d45224f69f588ec Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 15 Aug 2024 08:03:57 -0400 Subject: [PATCH 77/92] Upgrade elliptic from 6.5.4 to 6.5.7 (#190558) ## Summary Upgrade elliptic from 6.5.4 to 6.5.7 Compare https://github.com/indutny/elliptic/compare/v6.5.4...v6.5.7 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0276237a1e994e..885cb260928f77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16609,9 +16609,9 @@ element-resize-detector@^1.2.2: batch-processor "1.0.0" elliptic@^6.0.0, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + version "6.5.7" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b" + integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q== dependencies: bn.js "^4.11.9" brorand "^1.1.0" From f883782b418494fbaee23eede33cc6b1035a0965 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Thu, 15 Aug 2024 14:38:15 +0200 Subject: [PATCH 78/92] Observability Onboarding: Add feedback buttons (#189160) Closes https://github.com/elastic/observability-dev/issues/3734 This PR adds positive/negative feedback buttons to the kubernetes/custom logs/auto-detect flows. The event is also enabled for fullstory. This allows us to track feedback events quantitatively and also watch specific sessions to see how users interact. Screenshot 2024-07-25 at 11 10 12 --- .../cloud_full_story/server/config.ts | 1 + .../common/telemetry_events.ts | 22 +++++ .../auto_detect/auto_detect_panel.tsx | 2 + .../quickstart_flows/custom_logs/index.tsx | 2 + .../quickstart_flows/kubernetes/index.tsx | 2 + .../shared/feedback_buttons.tsx | 86 +++++++++++++++++++ .../observability_onboarding/public/plugin.ts | 6 +- 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx diff --git a/x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts b/x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts index 09d7e08826c0fe..26ec9095cf3d57 100644 --- a/x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts +++ b/x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @@ -20,6 +20,7 @@ const configSchema = schema.object({ eventTypesAllowlist: schema.arrayOf(schema.string(), { defaultValue: [ 'Loaded Kibana', // Sent once per page refresh (potentially, once per session) + 'observability_onboarding_feedback', // Sent once per feedback click, only clickable once 'Hosts View Query Submitted', // Worst-case scenario 1 every 2 seconds 'Host Entry Clicked', // Worst-case scenario once per second - AT RISK, 'Host Flyout Filter Removed', // Worst-case scenario once per second - AT RISK, diff --git a/x-pack/plugins/observability_solution/observability_onboarding/common/telemetry_events.ts b/x-pack/plugins/observability_solution/observability_onboarding/common/telemetry_events.ts index 060c33aca7693a..cf28fde189a640 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/common/telemetry_events.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/common/telemetry_events.ts @@ -53,3 +53,25 @@ export const OBSERVABILITY_ONBOARDING_TELEMETRY_EVENT: EventTypeOpts<{ }, }, }; + +export const OBSERVABILITY_ONBOARDING_FEEDBACK_TELEMETRY_EVENT: EventTypeOpts<{ + flow: string; + feedback: string; +}> = { + eventType: 'observability_onboarding_feedback', + schema: { + flow: { + type: 'keyword', + _meta: { + description: + "The current onboarding flow user is going through (e.g. 'system_logs', 'nginx'). If not present, user is on the landing screen.", + }, + }, + feedback: { + type: 'keyword', + _meta: { + description: 'The feedback the user left (e.g. positive, negative)', + }, + }, + }, +}; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx index 155333c4a18065..35014eb8544958 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/auto_detect/auto_detect_panel.tsx @@ -33,6 +33,7 @@ import { CopyToClipboardButton } from '../shared/copy_to_clipboard_button'; import { LocatorButtonEmpty } from '../shared/locator_button_empty'; import { GetStartedPanel } from '../shared/get_started_panel'; import { isSupportedLogo, LogoIcon } from '../../shared/logo_icon'; +import { FeedbackButtons } from '../shared/feedback_buttons'; export const AutoDetectPanel: FunctionComponent = () => { const { status, data, error, refetch, installedIntegrations } = useOnboardingFlow(); @@ -245,6 +246,7 @@ export const AutoDetectPanel: FunctionComponent = () => { }, ]} /> + ); }; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/custom_logs/index.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/custom_logs/index.tsx index b1cac260e69f96..603c05d45dd8bb 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/custom_logs/index.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/custom_logs/index.tsx @@ -14,6 +14,7 @@ import { createWizardContext, Step } from '../../../context/create_wizard_contex import { ConfigureLogs } from './configure_logs'; import { Inspect } from './inspect'; import { InstallElasticAgent } from './install_elastic_agent'; +import { FeedbackButtons } from '../shared/feedback_buttons'; interface WizardState { integrationName?: string; @@ -79,6 +80,7 @@ export const CustomLogsPanel: React.FC = () => { const { handler, exact } = customLogsRoutes[path]; return ; })} + ); diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/index.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/index.tsx index b3573e4cb2f1cb..6af3e6a9f18178 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/index.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/kubernetes/index.tsx @@ -20,6 +20,7 @@ import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; import { EmptyPrompt } from '../shared/empty_prompt'; import { CommandSnippet } from './command_snippet'; import { DataIngestStatus } from './data_ingest_status'; +import { FeedbackButtons } from '../shared/feedback_buttons'; export const KubernetesPanel: React.FC = () => { const [windowLostFocus, setWindowLostFocus] = useState(false); @@ -80,6 +81,7 @@ export const KubernetesPanel: React.FC = () => { return ( + ); }; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx new file mode 100644 index 00000000000000..bf81ab02813d05 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/shared/feedback_buttons.tsx @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiHorizontalRule, +} from '@elastic/eui'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { OBSERVABILITY_ONBOARDING_FEEDBACK_TELEMETRY_EVENT } from '../../../../common/telemetry_events'; + +export type Feedback = 'positive' | 'negative'; + +const THANK_YOU_MESSAGE = i18n.translate( + 'xpack.observability_onboarding.feedbackButtons.em.thanksForYourFeedbackLabel', + { defaultMessage: 'Thanks for your feedback!' } +); + +export function FeedbackButtons({ flow }: { flow: string }) { + const { notifications, analytics } = useKibana().services; + + const handleClick = (feedback: Feedback) => { + analytics?.reportEvent(OBSERVABILITY_ONBOARDING_FEEDBACK_TELEMETRY_EVENT.eventType, { + flow, + feedback, + }); + notifications?.toasts.addSuccess(THANK_YOU_MESSAGE); + }; + + return ( + <> + + + + + + {i18n.translate('xpack.observability_onboarding.insight.feedbackButtons.title', { + defaultMessage: 'Was this helpful?', + })} + + + + + + + + handleClick('positive')} + > + {i18n.translate('xpack.observability_onboarding.insight.feedbackButtons.positive', { + defaultMessage: 'Yes', + })} + + + + + handleClick('negative')} + > + {i18n.translate('xpack.observability_onboarding.insight.feedbackButtons.negative', { + defaultMessage: 'No', + })} + + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/plugin.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/plugin.ts index abc3e5af26765e..ba745514c99c67 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/plugin.ts @@ -33,7 +33,10 @@ import { PLUGIN_ID } from '../common'; import { ObservabilityOnboardingLocatorDefinition } from './locators/onboarding_locator/locator_definition'; import { ObservabilityOnboardingPluginLocators } from './locators'; import { ConfigSchema } from '.'; -import { OBSERVABILITY_ONBOARDING_TELEMETRY_EVENT } from '../common/telemetry_events'; +import { + OBSERVABILITY_ONBOARDING_FEEDBACK_TELEMETRY_EVENT, + OBSERVABILITY_ONBOARDING_TELEMETRY_EVENT, +} from '../common/telemetry_events'; export type ObservabilityOnboardingPluginSetup = void; export type ObservabilityOnboardingPluginStart = void; @@ -122,6 +125,7 @@ export class ObservabilityOnboardingPlugin }; core.analytics.registerEventType(OBSERVABILITY_ONBOARDING_TELEMETRY_EVENT); + core.analytics.registerEventType(OBSERVABILITY_ONBOARDING_FEEDBACK_TELEMETRY_EVENT); return { locators: this.locators, From de2457fdcdf3801350ffbd12d572d0e9a1092da1 Mon Sep 17 00:00:00 2001 From: Mykola Harmash Date: Thu, 15 Aug 2024 14:46:10 +0200 Subject: [PATCH 79/92] [Observability Onboarding] Delete redundant OTel header (#190392) Closes https://github.com/elastic/kibana/issues/189699 Removes the second OTel header and adds `isTechnicalPreview` prop for the `` component to display tech preview badge. ![CleanShot 2024-08-13 at 10 55 53@2x](https://github.com/user-attachments/assets/c0cb02e9-78f5-43b6-97cc-f0d145f69208) Co-authored-by: Joe Reuter --- .../application/header/custom_header.tsx | 38 +- .../public/application/pages/otel_logs.tsx | 4 +- .../quickstart_flows/otel_logs/index.tsx | 590 ++++++++---------- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 6 files changed, 297 insertions(+), 341 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/header/custom_header.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/header/custom_header.tsx index bbd8b8aacf705c..4dbde94c2f12b7 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/header/custom_header.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/header/custom_header.tsx @@ -6,6 +6,7 @@ */ import { + EuiBetaBadge, EuiFlexGroup, EuiFlexItem, EuiPageTemplate, @@ -28,9 +29,16 @@ interface Props { euiIconType?: EuiIconType; headlineCopy: string; captionCopy: string; + isTechnicalPreview?: boolean; } -export function CustomHeader({ euiIconType, logo, headlineCopy, captionCopy }: Props) { +export function CustomHeader({ + euiIconType, + logo, + headlineCopy, + captionCopy, + isTechnicalPreview = false, +}: Props) { const theme = useEuiTheme(); const shadow = useEuiShadow('s'); return ( @@ -72,9 +80,31 @@ export function CustomHeader({ euiIconType, logo, headlineCopy, captionCopy }: P

- -

{headlineCopy}

-
+ + +

{headlineCopy}

+
+ {isTechnicalPreview && ( + + )} +

{captionCopy}

diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/pages/otel_logs.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/pages/otel_logs.tsx index 53183b57e4b2a1..0e4a8c1ad0ea6a 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/pages/otel_logs.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/pages/otel_logs.tsx @@ -25,9 +25,11 @@ export const OtelLogsPage = () => ( captionCopy={i18n.translate( 'xpack.observability_onboarding.experimentalOnboardingFlow.customHeader.otel.description', { - defaultMessage: 'Collect logs and host metrics using the OTel collector.', + defaultMessage: + 'Collect logs and host metrics using the Elastic distribution of the OTel collector.', } )} + isTechnicalPreview={true} /> } > diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx index f3f0766b999d4b..d5101790a164a2 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/otel_logs/index.tsx @@ -7,19 +7,14 @@ import React, { useEffect } from 'react'; import { - EuiBetaBadge, EuiButton, EuiCodeBlock, EuiFlexGroup, EuiFlexItem, - EuiModalBody, - EuiModalHeader, - EuiModalHeaderTitle, EuiPanel, EuiSpacer, EuiSteps, EuiText, - EuiIcon, EuiButtonGroup, EuiCopy, EuiLink, @@ -186,7 +181,7 @@ data: debug: verbosity: basic elasticsearch: - endpoints: + endpoints: - \${env:ES_ENDPOINT} api_key: \${env:ES_API_KEY} logs_dynamic_index: @@ -425,7 +420,7 @@ data: pipelines: logs: exporters: - - elasticsearch + - elasticsearch - debug processors: - k8sattributes @@ -551,10 +546,10 @@ spec: firstStepTitle: HOST_COMMAND, content: `arch=$(if ([[ $(arch) == "arm" || $(arch) == "aarch64" ]]); then echo "arm64"; else echo $(arch); fi) -curl --output elastic-distro-${agentVersion}-linux-$arch.tar.gz --url https://${AGENT_CDN_BASE_URL}/elastic-agent-${agentVersion}-linux-$arch.tar.gz --proto '=https' --tlsv1.2 -fOL && mkdir -p elastic-distro-${agentVersion}-linux-$arch && tar -xvf elastic-distro-${agentVersion}-linux-$arch.tar.gz -C "elastic-distro-${agentVersion}-linux-$arch" --strip-components=1 && cd elastic-distro-${agentVersion}-linux-$arch +curl --output elastic-distro-${agentVersion}-linux-$arch.tar.gz --url https://${AGENT_CDN_BASE_URL}/elastic-agent-${agentVersion}-linux-$arch.tar.gz --proto '=https' --tlsv1.2 -fOL && mkdir -p elastic-distro-${agentVersion}-linux-$arch && tar -xvf elastic-distro-${agentVersion}-linux-$arch.tar.gz -C "elastic-distro-${agentVersion}-linux-$arch" --strip-components=1 && cd elastic-distro-${agentVersion}-linux-$arch sudo setcap 'cap_dac_read_search=ep' ./data/elastic-agent-*/elastic-agent - + rm ./otel.yml && cp ./otel_samples/platformlogs_hostmetrics.yml ./otel.yml && mkdir -p ./data/otelcol && sed -i 's#\\\${env:STORAGE_DIR}#'"$PWD"/data/otelcol'#g' ./otel.yml && sed -i 's#\\\${env:ELASTIC_ENDPOINT}#${setup?.elasticsearchUrl}#g' ./otel.yml && sed -i 's/\\\${env:ELASTIC_API_KEY}/${apiKeyData?.apiKeyEncoded}/g' ./otel.yml`, start: './otelcol --config otel.yml', type: 'copy', @@ -565,8 +560,8 @@ rm ./otel.yml && cp ./otel_samples/platformlogs_hostmetrics.yml ./otel.yml && mk firstStepTitle: HOST_COMMAND, content: `arch=$(if [[ $(arch) == "arm64" ]]; then echo "aarch64"; else echo $(arch); fi) -curl --output elastic-distro-${agentVersion}-darwin-$arch.tar.gz --url https://${AGENT_CDN_BASE_URL}/elastic-agent-${agentVersion}-darwin-$arch.tar.gz --proto '=https' --tlsv1.2 -fOL && mkdir -p "elastic-distro-${agentVersion}-darwin-$arch" && tar -xvf elastic-distro-${agentVersion}-darwin-$arch.tar.gz -C "elastic-distro-${agentVersion}-darwin-$arch" --strip-components=1 && cd elastic-distro-${agentVersion}-darwin-$arch - +curl --output elastic-distro-${agentVersion}-darwin-$arch.tar.gz --url https://${AGENT_CDN_BASE_URL}/elastic-agent-${agentVersion}-darwin-$arch.tar.gz --proto '=https' --tlsv1.2 -fOL && mkdir -p "elastic-distro-${agentVersion}-darwin-$arch" && tar -xvf elastic-distro-${agentVersion}-darwin-$arch.tar.gz -C "elastic-distro-${agentVersion}-darwin-$arch" --strip-components=1 && cd elastic-distro-${agentVersion}-darwin-$arch + rm ./otel.yml && cp ./otel_samples/platformlogs_hostmetrics.yml ./otel.yml && mkdir -p ./data/otelcol && sed -i '' 's#\\\${env:STORAGE_DIR}#'"$PWD"/data/otelcol'#g' ./otel.yml && sed -i '' 's#\\\${env:ELASTIC_ENDPOINT}#${setup?.elasticsearchUrl}#g' ./otel.yml && sed -i '' 's/\\\${env:ELASTIC_API_KEY}/${apiKeyData?.apiKeyEncoded}/g' ./otel.yml`, start: './otelcol --config otel.yml', type: 'copy', @@ -578,350 +573,285 @@ rm ./otel.yml && cp ./otel_samples/platformlogs_hostmetrics.yml ./otel.yml && mk const selectedContent = installTabContents.find((tab) => tab.id === selectedTab)!; return ( - - - - - {http && ( - - - - - - )} - - - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.otelLogsModalHeaderTitleLabel', - { defaultMessage: 'OpenTelemetry' } + + + + {error && ( + + + + )} + + ({ + id, + label: name, + }))} + type="single" + idSelected={selectedTab} + onChange={(id: string) => { + setSelectedTab(id); + }} + /> + +

{selectedContent.firstStepTitle}

+
+ + + {selectedContent.content} + - - - + + {selectedContent.type === 'download' ? ( + + {i18n.translate( + 'xpack.observability_onboarding.installOtelCollector.configStep.downloadConfigButton', + { defaultMessage: 'Download manifest' } + )} + + ) : ( + + {(copy) => ( + + {i18n.translate( + 'xpack.observability_onboarding.installOtelCollector.configStep.copyCommand', + { defaultMessage: 'Copy to clipboard' } + )} + + )} + )} - tooltipPosition={'right'} - /> +
- -

- {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.p.collectLogsWithOpenTelemetryLabel', - { - defaultMessage: - 'Collect logs and host metrics using the Elastic distribution of the OTel collector.', - } + ), + }, + { + title: i18n.translate('xpack.observability_onboarding.otelLogsPanel.steps.start', { + defaultMessage: 'Start the collector', + }), + children: ( + + - - - - - - - - - - {error && ( - - - - )} - - ({ - id, - label: name, - }))} - type="single" - idSelected={selectedTab} - onChange={(id: string) => { - setSelectedTab(id); - }} - /> - -

{selectedContent.firstStepTitle}

-
- - - {selectedContent.content} - - - - - {selectedContent.type === 'download' ? ( - - {i18n.translate( - 'xpack.observability_onboarding.installOtelCollector.configStep.downloadConfigButton', - { defaultMessage: 'Download manifest' } - )} - - ) : ( - - {(copy) => ( - - {i18n.translate( - 'xpack.observability_onboarding.installOtelCollector.configStep.copyCommand', - { defaultMessage: 'Copy to clipboard' } - )} - - )} - - )} - - -
- ), - }, - { - title: i18n.translate('xpack.observability_onboarding.otelLogsPanel.steps.start', { - defaultMessage: 'Start the collector', - }), - children: ( - - +

+ {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.historicalDataDescription', + { + defaultMessage: 'New log messages are collected from the setup onward.', + } )} - color="warning" - iconType="iInCircle" - > +

+ {selectedTab !== 'kubernetes' && (

{i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.historicalDataDescription', + 'xpack.observability_onboarding.otelLogsPanel.historicalDataDescription2', { - defaultMessage: 'New log messages are collected from the setup onward.', + defaultMessage: + 'The default log path is /var/log/*. You can change this path in the otel.yml file if needed.', } )}

- {selectedTab !== 'kubernetes' && ( + )} +
+ + {selectedContent.prompt} + {selectedContent.start && ( + <> +

{i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.historicalDataDescription2', + 'xpack.observability_onboarding.otelLogsPanel.p.startTheCollectorLabel', { - defaultMessage: - 'The default log path is /var/log/*. You can change this path in the otel.yml file if needed.', + defaultMessage: 'Run the following command to start the collector', } )}

+
+ + + )} +
+ ), + }, + { + title: i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.steps.visualize', + { + defaultMessage: 'Visualize your data', + } + ), + children: ( + <> + +

+ {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.waitForTheDataLabel', + { + defaultMessage: + 'After running the previous command, come back and view your data.', + } )} - - - {selectedContent.prompt} - {selectedContent.start && ( - <> - -

+

+
+ + + + + + + + {deeplinks?.logs && ( + <> + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.viewAndAnalyzeYourTextLabel', + { defaultMessage: 'View and analyze your logs' } + )} + + + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.exploreLogs', + { + defaultMessage: 'Open Logs Explorer', + } + )} + + + + )} + + {deeplinks?.metrics && ( + <> + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.viewAndAnalyzeYourMetricsTextLabel', + { defaultMessage: 'View and analyze your metrics' } + )} + + + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.exploreMetrics', + { + defaultMessage: 'Open Hosts', + } + )} + + + + )} + + + + + + {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.p.startTheCollectorLabel', - { - defaultMessage: 'Run the following command to start the collector', - } + 'xpack.observability_onboarding.otelLogsPanel.documentationLink', + { defaultMessage: 'Open documentation' } )} -

-
- - - )} -
- ), - }, - { - title: i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.steps.visualize', - { - defaultMessage: 'Visualize your data', - } - ), - children: ( - <> - -

- {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.waitForTheDataLabel', - { - defaultMessage: - 'After running the previous command, come back and view your data.', - } - )} -

-
- - - - - - - - {deeplinks?.logs && ( - <> - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.viewAndAnalyzeYourTextLabel', - { defaultMessage: 'View and analyze your logs' } - )} - - - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.exploreLogs', - { - defaultMessage: 'Open Logs Explorer', - } - )} - - - - )} - - {deeplinks?.metrics && ( - <> - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.viewAndAnalyzeYourMetricsTextLabel', - { defaultMessage: 'View and analyze your metrics' } - )} - - - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.exploreMetrics', - { - defaultMessage: 'Open Hosts', - } - )} - - - - )} - - - - - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.documentationLink', - { defaultMessage: 'Open documentation' } - )} - - ), - }} - /> - - - ), - }, - ]} - /> - + + ), + }} + /> +
+ + ), + }, + ]} + /> + - - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.feedbackButtons.label', - { - defaultMessage: 'Was this helpful or were there any problems?', - } - )} - - + + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.feedbackButtons.label', + { + defaultMessage: 'Was this helpful or were there any problems?', + } + )} + + - - - {i18n.translate( - 'xpack.observability_onboarding.otelLogsPanel.feedbackButtons.title', - { - defaultMessage: 'Give feedback', - } - )} - - - + + + {i18n.translate( + 'xpack.observability_onboarding.otelLogsPanel.feedbackButtons.title', + { + defaultMessage: 'Give feedback', + } + )} + + - + ); }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c81296b9f0263e..2eaadfbe53987d 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -32414,8 +32414,6 @@ "xpack.observability_onboarding.otelLogsPanel.historicalDataDescription2": "Le chemin des logs par défaut est /var/log/*. Vous pouvez si nécessaire modifier ce chemin dans le fichier otel.yml.", "xpack.observability_onboarding.otelLogsPanel.kubernetesApplyCommandPromptLabel": "À partir du répertoire où le manifeste est téléchargé, exécutez la commande suivante pour installer le collecteur sur chaque nœud de votre cluster :", "xpack.observability_onboarding.otelLogsPanel.limitationTitle": "Informations sur la configuration", - "xpack.observability_onboarding.otelLogsPanel.otelLogsModalHeaderTitleLabel": "OpenTelemetry", - "xpack.observability_onboarding.otelLogsPanel.p.collectLogsWithOpenTelemetryLabel": "Collectez les logs et les métriques de l'hôte à l'aide de la distribution Elastic du collecteur OTel.", "xpack.observability_onboarding.otelLogsPanel.p.runTheCommandOnYourHostLabel": "Exécutez la commande suivante sur votre hôte pour télécharger et configurer le collecteur.", "xpack.observability_onboarding.otelLogsPanel.p.startTheCollectorLabel": "Exécutez la commande suivante pour lancer le collecteur", "xpack.observability_onboarding.otelLogsPanel.steps.downloadManifest": "Télécharger le manifeste :", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index a5354d20fc39f4..c0b643bd017924 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -32398,8 +32398,6 @@ "xpack.observability_onboarding.otelLogsPanel.historicalDataDescription2": "デフォルトのログのパスは/var/log/*です。必要に応じて、otel.ymlファイルでこのパスを変更できます。", "xpack.observability_onboarding.otelLogsPanel.kubernetesApplyCommandPromptLabel": "マニフェストがダウンロードされるディレクトリから、次のコマンドを実行し、クラスターのすべてのノードでコレクターをインストールします。", "xpack.observability_onboarding.otelLogsPanel.limitationTitle": "構成情報", - "xpack.observability_onboarding.otelLogsPanel.otelLogsModalHeaderTitleLabel": "OpenTelemetry", - "xpack.observability_onboarding.otelLogsPanel.p.collectLogsWithOpenTelemetryLabel": "OTelコレクターのElasticディストリビューションを使用して、ログとホストメトリックを収集します。", "xpack.observability_onboarding.otelLogsPanel.p.runTheCommandOnYourHostLabel": "ホストで次のコマンドを実行して、コレクターをダウンロード、構成します。", "xpack.observability_onboarding.otelLogsPanel.p.startTheCollectorLabel": "コレクターを開始するには、次のコマンドを実行してください", "xpack.observability_onboarding.otelLogsPanel.steps.downloadManifest": "マニフェストをダウンロード:", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b5ba7135c77612..c0f00339083b4a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -32438,8 +32438,6 @@ "xpack.observability_onboarding.otelLogsPanel.historicalDataDescription2": "默认日志路径为 /var/log/*。如果需要,可以在 otel.yml 文件中更改此路径。", "xpack.observability_onboarding.otelLogsPanel.kubernetesApplyCommandPromptLabel": "从下载清单的目录中,运行以下命令以在您集群的每个节点上安装收集器:", "xpack.observability_onboarding.otelLogsPanel.limitationTitle": "配置信息", - "xpack.observability_onboarding.otelLogsPanel.otelLogsModalHeaderTitleLabel": "OpenTelemetry", - "xpack.observability_onboarding.otelLogsPanel.p.collectLogsWithOpenTelemetryLabel": "使用 OTel 收集器的 Elastic 发行版收集日志和主机指标。", "xpack.observability_onboarding.otelLogsPanel.p.runTheCommandOnYourHostLabel": "在您的主机上运行以下命令,以下载和配置收集器。", "xpack.observability_onboarding.otelLogsPanel.p.startTheCollectorLabel": "运行以下命令以启动收集器", "xpack.observability_onboarding.otelLogsPanel.steps.downloadManifest": "下载清单:", From 6cb7019055968eeb16eab502352285cdb1d75878 Mon Sep 17 00:00:00 2001 From: mohamedhamed-ahmed Date: Thu, 15 Aug 2024 16:02:02 +0300 Subject: [PATCH 80/92] [Dataset Quality] Add Missing Data-Test-Subject Attributes (#190564) closes [3841](https://github.com/elastic/observability-dev/issues/3841) --- .../components/common/descriptive_switch.tsx | 11 +++- .../dataset_quality/table/columns.tsx | 51 +++++++++++++------ .../dataset_quality/table/table.tsx | 2 + 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/observability_solution/dataset_quality/public/components/common/descriptive_switch.tsx b/x-pack/plugins/observability_solution/dataset_quality/public/components/common/descriptive_switch.tsx index a7db9596b85347..1bacebed91c0be 100644 --- a/x-pack/plugins/observability_solution/dataset_quality/public/components/common/descriptive_switch.tsx +++ b/x-pack/plugins/observability_solution/dataset_quality/public/components/common/descriptive_switch.tsx @@ -13,6 +13,7 @@ interface DescriptiveSwitchProps { checked: boolean; tooltipText: string; onToggle: () => void; + testSubject: string; } export const DescriptiveSwitch = ({ @@ -20,10 +21,18 @@ export const DescriptiveSwitch = ({ checked, tooltipText, onToggle, + testSubject, }: DescriptiveSwitchProps) => { return ( - + {label} 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 9a0b1f21ff9f13..bea56c8957fa47 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 @@ -18,6 +18,7 @@ import { EuiText, formatNumber, EuiSkeletonRectangle, + EuiTableHeader, } from '@elastic/eui'; import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import { ES_FIELD_TYPES, KBN_FIELD_TYPES } from '@kbn/field-types'; @@ -208,7 +209,9 @@ export const getDatasetQualityTableColumns = ({ `, }, { - name: nameColumnName, + name: ( + {nameColumnName} + ), field: 'title', sortable: true, render: (title: string, dataStreamStat: DataStreamStat) => { @@ -230,7 +233,11 @@ export const getDatasetQualityTableColumns = ({ }, }, { - name: namespaceColumnName, + name: ( + + {namespaceColumnName} + + ), field: 'namespace', sortable: true, render: (_, dataStreamStat: DataStreamStat) => ( @@ -241,7 +248,11 @@ export const getDatasetQualityTableColumns = ({ ...(isSizeStatsAvailable && canUserMonitorDataset && canUserMonitorAnyDataStream ? [ { - name: sizeColumnName, + name: ( + + {sizeColumnName} + + ), field: 'sizeBytes', sortable: true, render: (_: any, dataStreamStat: DataStreamStat) => { @@ -270,12 +281,14 @@ export const getDatasetQualityTableColumns = ({ : []), { name: ( - - - {`${datasetQualityColumnName} `} - - - + + + + {`${datasetQualityColumnName} `} + + + + ), field: 'degradedDocs.percentage', sortable: true, @@ -286,12 +299,14 @@ export const getDatasetQualityTableColumns = ({ }, { name: ( - - - {`${degradedDocsColumnName} `} - - - + + + + {`${degradedDocsColumnName} `} + + + + ), field: 'degradedDocs.percentage', sortable: true, @@ -307,7 +322,11 @@ export const getDatasetQualityTableColumns = ({ ...(canUserMonitorDataset && canUserMonitorAnyDataStream ? [ { - name: lastActivityColumnName, + name: ( + + {lastActivityColumnName} + + ), field: 'lastActivity', render: (timestamp: number, { userPrivileges, title }: DataStreamStat) => ( { { /> {canUserMonitorDataset && canUserMonitorAnyDataStream && ( Date: Thu, 15 Aug 2024 15:21:33 +0200 Subject: [PATCH 81/92] Changed API endpoint from access: 'internal' to access: 'public' (#190316) ## Summary Changed acces to `public` for `/internal/security/analytics/_record_violations` endpoint. Kibana reports Content-Security-Policy (CSP) violations and Permission-Policy violations to the `/internal/security/analytics/_record_violations` endpoint. This endpoint was marked as `internal`, which didn't work because reports are sent by browser. __Fixes: https://github.com/elastic/kibana-team/issues/1024__ Co-authored-by: Elastic Machine --- .../security/server/routes/analytics/record_violations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security/server/routes/analytics/record_violations.ts b/x-pack/plugins/security/server/routes/analytics/record_violations.ts index 9ee4e1c66be3ea..826a304f1656e6 100644 --- a/x-pack/plugins/security/server/routes/analytics/record_violations.ts +++ b/x-pack/plugins/security/server/routes/analytics/record_violations.ts @@ -161,7 +161,7 @@ export function defineRecordViolations({ router, analyticsService }: RouteDefini * This endpoint is called by the browser in the background so `kbn-xsrf` header is not sent. */ xsrfRequired: false, - access: 'internal', + access: 'public', body: { /** * Both `application/reports+json` (CSP3 spec) and `application/csp-report` (Safari) are From 90a435cf8f22ed97ca867c24e1594340904275d1 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 15 Aug 2024 15:47:36 +0200 Subject: [PATCH 82/92] [Config] Fix handling of splittable subkeys when processing values (#190590) ## Summary Follow up from https://github.com/elastic/kibana/pull/178841 ## Release note We fixed a bug when processing YAML configuration that contains dotted notation in objects in arrays. This can manifest as a validation error causing Kibana to not start. --- .../src/__fixtures__/unsplittable_3.yml | 7 +++++ .../kbn-config/src/raw/read_config.test.ts | 27 +++++++++++++++++++ packages/kbn-config/src/raw/read_config.ts | 4 ++- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/kbn-config/src/__fixtures__/unsplittable_3.yml diff --git a/packages/kbn-config/src/__fixtures__/unsplittable_3.yml b/packages/kbn-config/src/__fixtures__/unsplittable_3.yml new file mode 100644 index 00000000000000..8e206af4b02289 --- /dev/null +++ b/packages/kbn-config/src/__fixtures__/unsplittable_3.yml @@ -0,0 +1,7 @@ + +'[foo.bar]': "foobar" +list: + - id: "id1" + '[a.b]': ['foo', 'bar'] + test.this.out: ['foo', 'bar'] + diff --git a/packages/kbn-config/src/raw/read_config.test.ts b/packages/kbn-config/src/raw/read_config.test.ts index 4a3754def8ae73..b7beb85d47147c 100644 --- a/packages/kbn-config/src/raw/read_config.test.ts +++ b/packages/kbn-config/src/raw/read_config.test.ts @@ -131,6 +131,33 @@ test('supports unsplittable key syntax on nested list', () => { `); }); +test('supports unsplittable key syntax on nested list with splittable subkeys', () => { + const config = getConfigFromFiles([fixtureFile('/unsplittable_3.yml')]); + + expect(config).toMatchInlineSnapshot(` + Object { + "foo.bar": "foobar", + "list": Array [ + Object { + "a.b": Array [ + "foo", + "bar", + ], + "id": "id1", + "test": Object { + "this": Object { + "out": Array [ + "foo", + "bar", + ], + }, + }, + }, + ], + } + `); +}); + test('supports var:default syntax', () => { process.env.KBN_ENV_VAR1 = 'val1'; diff --git a/packages/kbn-config/src/raw/read_config.ts b/packages/kbn-config/src/raw/read_config.ts index 1126ac1bc3f815..8836c16664e5e0 100644 --- a/packages/kbn-config/src/raw/read_config.ts +++ b/packages/kbn-config/src/raw/read_config.ts @@ -59,7 +59,9 @@ function processEntryValue(value: any) { delete value[subKey]; set(value, [unsplitKey], processEntryValue(subVal)); } else { - set(value, subKey, processEntryValue(subVal)); + const subKeySplits = splitKey(subKey); + if (subKeySplits.length > 1) delete value[subKey]; + set(value, subKeySplits, processEntryValue(subVal)); } } } else if (typeof value === 'string') { From da1db2cdebfa28d0b9743e7e7038042aa7cfe09a Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 15 Aug 2024 15:52:02 +0200 Subject: [PATCH 83/92] [FTR] [deployment agnostic tests] move saml roles setup to kbn/es (#190489) ## Summary closes #190212 This PR moves realm roles and mapping creation from FTR service to `kbn/es` package in oder to configure ES properly when you start servers with ` node scripts/functional_tests_server.js --config ` It allows to start servers and investigate test scenario manually (e.g. reproduce failure) Thanks a lot to @azasypkin for ideas how to simplify and minimize the code change. Instead of 2 API calls to ES in FTR service we copy roles.yml to ES config directory before its start and create role mapping via API (but using template) as a part of security setup How to test: ``` node scripts/functional_tests_server.js --config x-pack/test/api_integration/deployment_agnostic/stateful.config.ts curl -X GET "http://localhost:9220/_security/role_mapping" -H "Content-Type: application/json" -u elastic:changeme ``` you should get the valid mapping back Note: if you try to load Kibana manually, it won't work due to missing mock-idp-plugin in stateful #190221 But automated tests are functional and can be run via script. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Aleh Zasypkin --- packages/kbn-es/src/cluster.ts | 13 +++-- packages/kbn-es/src/cluster_exec_options.ts | 2 +- .../kbn-es/src/install/install_archive.ts | 20 ++++++- .../kbn-es/src/install/install_snapshot.ts | 2 + packages/kbn-es/src/install/install_source.ts | 2 + packages/kbn-es/src/install/types.ts | 3 ++ .../src/integration_tests/cluster.test.ts | 1 + .../kbn-es/src/utils/extract_config_files.ts | 4 +- packages/kbn-es/src/utils/index.ts | 2 +- .../services/saml_auth/get_auth_provider.ts | 32 ++---------- .../services/saml_auth/saml_auth_provider.ts | 5 +- .../saml_auth/serverless/auth_provider.ts | 2 +- .../saml_auth/stateful/admin_mapping.json | 46 ---------------- .../saml_auth/stateful/auth_provider.ts | 2 +- .../saml_auth/stateful/create_role_mapping.ts | 52 ------------------- .../tsconfig.json | 1 - packages/kbn-test/src/es/test_es_cluster.ts | 3 +- .../default_configs/stateful.config.base.ts | 8 +++ .../security_solution_serverless_utils.ts | 6 --- 19 files changed, 58 insertions(+), 148 deletions(-) delete mode 100644 packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/admin_mapping.json delete mode 100644 packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/create_role_mapping.ts diff --git a/packages/kbn-es/src/cluster.ts b/packages/kbn-es/src/cluster.ts index 65e232a9bbd488..6644e6828f41bf 100644 --- a/packages/kbn-es/src/cluster.ts +++ b/packages/kbn-es/src/cluster.ts @@ -18,6 +18,7 @@ import { promisify } from 'util'; import { CA_CERT_PATH, ES_NOPASSWORD_P12_PATH, extract } from '@kbn/dev-utils'; import { ToolingLog } from '@kbn/tooling-log'; import treeKill from 'tree-kill'; +import { MOCK_IDP_REALM_NAME, ensureSAMLRoleMapping } from '@kbn/mock-idp-utils'; import { downloadSnapshot, installSnapshot, installSource, installArchive } from './install'; import { ES_BIN, ES_PLUGIN_BIN, ES_KEYSTORE_BIN } from './paths'; import { @@ -312,7 +313,7 @@ export class Cluster { */ private exec(installPath: string, opts: EsClusterExecOptions) { const { - skipNativeRealmSetup = false, + skipSecuritySetup = false, reportTime = () => {}, startTime, skipReadyCheck, @@ -437,8 +438,8 @@ export class Cluster { }); } - // once the cluster is ready setup the native realm - if (!skipNativeRealmSetup) { + // once the cluster is ready setup the realm + if (!skipSecuritySetup) { const nativeRealm = new NativeRealm({ log: this.log, elasticPassword: options.password, @@ -446,8 +447,12 @@ export class Cluster { }); await nativeRealm.setPasswords(options); - } + const samlRealmConfigPrefix = `authc.realms.saml.${MOCK_IDP_REALM_NAME}.`; + if (args.some((arg) => arg.includes(samlRealmConfigPrefix))) { + await ensureSAMLRoleMapping(client); + } + } this.log.success('kbn/es setup complete'); }); diff --git a/packages/kbn-es/src/cluster_exec_options.ts b/packages/kbn-es/src/cluster_exec_options.ts index 362af62c579547..2cbefe06095e1b 100644 --- a/packages/kbn-es/src/cluster_exec_options.ts +++ b/packages/kbn-es/src/cluster_exec_options.ts @@ -7,7 +7,7 @@ */ export interface EsClusterExecOptions { - skipNativeRealmSetup?: boolean; + skipSecuritySetup?: boolean; reportTime?: (...args: any[]) => void; startTime?: number; esArgs?: string[] | string; diff --git a/packages/kbn-es/src/install/install_archive.ts b/packages/kbn-es/src/install/install_archive.ts index 2bfef3ab7abeff..c9f3ab3cc274c3 100644 --- a/packages/kbn-es/src/install/install_archive.ts +++ b/packages/kbn-es/src/install/install_archive.ts @@ -18,7 +18,7 @@ import { ToolingLog } from '@kbn/tooling-log'; import { BASE_PATH, ES_CONFIG, ES_KEYSTORE_BIN } from '../paths'; import { Artifact } from '../artifact'; import { parseSettings, SettingsFilter } from '../settings'; -import { log as defaultLog } from '../utils/log'; +import { log as defaultLog, isFile, copyFileSync } from '../utils'; import { InstallArchiveOptions } from './types'; const isHttpUrl = (str: string) => { @@ -41,6 +41,7 @@ export async function installArchive(archive: string, options?: InstallArchiveOp log = defaultLog, esArgs = [], disableEsTmpDir = process.env.FTR_DISABLE_ES_TMPDIR?.toLowerCase() === 'true', + resources, } = options || {}; let dest = archive; @@ -84,6 +85,23 @@ export async function installArchive(archive: string, options?: InstallArchiveOp ...parseSettings(esArgs, { filter: SettingsFilter.SecureOnly }), ]); + // copy resources to ES config directory + if (resources) { + resources.forEach((resource) => { + if (!isFile(resource)) { + throw new Error( + `Invalid resource: '${resource}'.\nOnly valid files can be copied to ES config directory` + ); + } + + const filename = path.basename(resource); + const destPath = path.resolve(installPath, 'config', filename); + + copyFileSync(resource, destPath); + log.info('moved %s in config to %s', resource, destPath); + }); + } + return { installPath, disableEsTmpDir }; } diff --git a/packages/kbn-es/src/install/install_snapshot.ts b/packages/kbn-es/src/install/install_snapshot.ts index e4a7fbd678f780..49f5d26df4ad6c 100644 --- a/packages/kbn-es/src/install/install_snapshot.ts +++ b/packages/kbn-es/src/install/install_snapshot.ts @@ -51,6 +51,7 @@ export async function installSnapshot({ log = defaultLog, esArgs, useCached = false, + resources, }: InstallSnapshotOptions) { const { downloadPath } = await downloadSnapshot({ license, @@ -68,5 +69,6 @@ export async function installSnapshot({ installPath, log, esArgs, + resources, }); } diff --git a/packages/kbn-es/src/install/install_source.ts b/packages/kbn-es/src/install/install_source.ts index b3fca2b2ac0461..6bec4a5d764d97 100644 --- a/packages/kbn-es/src/install/install_source.ts +++ b/packages/kbn-es/src/install/install_source.ts @@ -33,6 +33,7 @@ export async function installSource({ installPath = path.resolve(basePath, 'source'), log = defaultLog, esArgs, + resources, }: InstallSourceOptions) { log.info('source path: %s', chalk.bold(sourcePath)); log.info('install path: %s', chalk.bold(installPath)); @@ -59,6 +60,7 @@ export async function installSource({ installPath, log, esArgs, + resources, }); } diff --git a/packages/kbn-es/src/install/types.ts b/packages/kbn-es/src/install/types.ts index 6217f5b93c7f6c..6db62b28eae708 100644 --- a/packages/kbn-es/src/install/types.ts +++ b/packages/kbn-es/src/install/types.ts @@ -17,6 +17,7 @@ export interface InstallSourceOptions { installPath?: string; log?: ToolingLog; esArgs?: string[]; + resources?: string[]; } export interface DownloadSnapshotOptions { @@ -26,6 +27,7 @@ export interface DownloadSnapshotOptions { installPath?: string; log?: ToolingLog; useCached?: boolean; + resources?: string[]; } export interface InstallSnapshotOptions extends DownloadSnapshotOptions { @@ -42,4 +44,5 @@ export interface InstallArchiveOptions { esArgs?: string[]; /** Disable creating a temp directory, allowing ES to write to OS's /tmp directory */ disableEsTmpDir?: boolean; + resources?: string[]; } diff --git a/packages/kbn-es/src/integration_tests/cluster.test.ts b/packages/kbn-es/src/integration_tests/cluster.test.ts index 0ef9803539fdd7..d63b81c9a771ee 100644 --- a/packages/kbn-es/src/integration_tests/cluster.test.ts +++ b/packages/kbn-es/src/integration_tests/cluster.test.ts @@ -311,6 +311,7 @@ describe('#installArchive()', () => { esArgs: ['foo=true'], log, disableEsTmpDir: true, + resources: ['path/to/resource'], }; const cluster = new Cluster({ log }); await cluster.installArchive('bar', options); diff --git a/packages/kbn-es/src/utils/extract_config_files.ts b/packages/kbn-es/src/utils/extract_config_files.ts index 908005887dbc01..52e382a64fe8bc 100644 --- a/packages/kbn-es/src/utils/extract_config_files.ts +++ b/packages/kbn-es/src/utils/extract_config_files.ts @@ -43,11 +43,11 @@ export function extractConfigFiles( return localConfig; } -function isFile(dest = '') { +export function isFile(dest = '') { return fs.existsSync(dest) && fs.statSync(dest).isFile(); } -function copyFileSync(src: string, dest: string) { +export function copyFileSync(src: string, dest: string) { const destPath = path.dirname(dest); if (!fs.existsSync(destPath)) { diff --git a/packages/kbn-es/src/utils/index.ts b/packages/kbn-es/src/utils/index.ts index 04e94d109f58f2..f3457fc958b53f 100644 --- a/packages/kbn-es/src/utils/index.ts +++ b/packages/kbn-es/src/utils/index.ts @@ -10,7 +10,7 @@ export { cache } from './cache'; export { log } from './log'; export { parseEsLog } from './parse_es_log'; export { findMostRecentlyChanged } from './find_most_recently_changed'; -export { extractConfigFiles } from './extract_config_files'; +export { extractConfigFiles, isFile, copyFileSync } from './extract_config_files'; // @ts-expect-error not typed yet export { NativeRealm, SYSTEM_INDICES_SUPERUSER } from './native_realm'; export { buildSnapshot } from './build_snapshot'; diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/get_auth_provider.ts b/packages/kbn-ftr-common-functional-services/services/saml_auth/get_auth_provider.ts index 3f1ec7af917ffb..dfe6d83908a000 100644 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/get_auth_provider.ts +++ b/packages/kbn-ftr-common-functional-services/services/saml_auth/get_auth_provider.ts @@ -6,20 +6,12 @@ * Side Public License, v 1. */ -import fs from 'fs'; import { type Config } from '@kbn/test'; -import { ToolingLog } from '@kbn/tooling-log'; -import { MOCK_IDP_REALM_NAME } from '@kbn/mock-idp-utils'; -import { KibanaServer } from '../..'; - import { ServerlessAuthProvider } from './serverless/auth_provider'; import { StatefulAuthProvider } from './stateful/auth_provider'; -import { createRole, createRoleMapping } from './stateful/create_role_mapping'; - -const STATEFUL_ADMIN_ROLE_MAPPING_PATH = './stateful/admin_mapping'; export interface AuthProvider { - getSupportedRoleDescriptors(): any; + getSupportedRoleDescriptors(): Record; getDefaultRole(): string; getRolesDefinitionPath(): string; getCommonRequestHeader(): { [key: string]: string }; @@ -28,26 +20,10 @@ export interface AuthProvider { export interface AuthProviderProps { config: Config; - kibanaServer: KibanaServer; - log: ToolingLog; } -export const getAuthProvider = async (props: AuthProviderProps) => { - const { config, log, kibanaServer } = props; +export const getAuthProvider = (props: AuthProviderProps) => { + const { config } = props; const isServerless = !!props.config.get('serverless'); - if (isServerless) { - return new ServerlessAuthProvider(config); - } - - const provider = new StatefulAuthProvider(); - // TODO: Move it to @kbn-es package, so that roles and its mapping are created before FTR services loading starts. - // 'viewer' and 'editor' roles are available by default, but we have to create 'admin' role - const adminRoleMapping = JSON.parse( - fs.readFileSync(require.resolve(STATEFUL_ADMIN_ROLE_MAPPING_PATH), 'utf8') - ); - await createRole({ roleName: 'admin', roleMapping: adminRoleMapping, kibanaServer, log }); - const roles = Object.keys(provider.getSupportedRoleDescriptors()); - // Creating roles mapping for mock-idp - await createRoleMapping({ name: MOCK_IDP_REALM_NAME, roles, config, log }); - return provider; + return isServerless ? new ServerlessAuthProvider(config) : new StatefulAuthProvider(); }; diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/saml_auth_provider.ts b/packages/kbn-ftr-common-functional-services/services/saml_auth/saml_auth_provider.ts index 4e79cad6561971..af5dec4efea59f 100644 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/saml_auth_provider.ts +++ b/packages/kbn-ftr-common-functional-services/services/saml_auth/saml_auth_provider.ts @@ -20,14 +20,13 @@ export interface RoleCredentials { cookieHeader: { Cookie: string }; } -export async function SamlAuthProvider({ getService }: FtrProviderContext) { +export function SamlAuthProvider({ getService }: FtrProviderContext) { const config = getService('config'); const log = getService('log'); - const kibanaServer = getService('kibanaServer'); const supertestWithoutAuth = getService('supertestWithoutAuth'); const isCloud = !!process.env.TEST_CLOUD; - const authRoleProvider = await getAuthProvider({ config, kibanaServer, log }); + const authRoleProvider = getAuthProvider({ config }); const supportedRoleDescriptors = authRoleProvider.getSupportedRoleDescriptors(); const supportedRoles = Object.keys(supportedRoleDescriptors); diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/serverless/auth_provider.ts b/packages/kbn-ftr-common-functional-services/services/saml_auth/serverless/auth_provider.ts index eecbe3a5862f22..d8cb8ae9b5f0df 100644 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/serverless/auth_provider.ts +++ b/packages/kbn-ftr-common-functional-services/services/saml_auth/serverless/auth_provider.ts @@ -49,7 +49,7 @@ export class ServerlessAuthProvider implements AuthProvider { this.rolesDefinitionPath = resolve(SERVERLESS_ROLES_ROOT_PATH, this.projectType, 'roles.yml'); } - getSupportedRoleDescriptors(): any { + getSupportedRoleDescriptors(): Record { return readRolesDescriptorsFromResource(this.rolesDefinitionPath); } getDefaultRole(): string { diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/admin_mapping.json b/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/admin_mapping.json deleted file mode 100644 index f8544f16bd2395..00000000000000 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/admin_mapping.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "kibana":[ - { - "base":[ - "all" - ], - "feature":{ - - }, - "spaces":[ - "*" - ] - } - ], - "elasticsearch":{ - "cluster":[ - "all" - ], - "indices":[ - { - "names":[ - "*" - ], - "privileges":[ - "all" - ], - "allow_restricted_indices":false - }, - { - "names":[ - "*" - ], - "privileges":[ - "monitor", - "read", - "read_cross_cluster", - "view_index_metadata" - ], - "allow_restricted_indices":true - } - ], - "run_as":[ - - ] - } -} \ No newline at end of file diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/auth_provider.ts b/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/auth_provider.ts index cf27fd9d5d5060..4dfe8ce6550d73 100644 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/auth_provider.ts +++ b/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/auth_provider.ts @@ -17,7 +17,7 @@ import { export class StatefulAuthProvider implements AuthProvider { private readonly rolesDefinitionPath = resolve(REPO_ROOT, STATEFUL_ROLES_ROOT_PATH, 'roles.yml'); - getSupportedRoleDescriptors(): any { + getSupportedRoleDescriptors(): Record { return readRolesDescriptorsFromResource(this.rolesDefinitionPath); } getDefaultRole() { diff --git a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/create_role_mapping.ts b/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/create_role_mapping.ts deleted file mode 100644 index 1e9b897362dc69..00000000000000 --- a/packages/kbn-ftr-common-functional-services/services/saml_auth/stateful/create_role_mapping.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 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 { Config, createEsClientForFtrConfig } from '@kbn/test'; -import { ToolingLog } from '@kbn/tooling-log'; -import { KibanaServer } from '../../..'; - -export interface CreateRoleProps { - roleName: string; - roleMapping: string[]; - kibanaServer: KibanaServer; - log: ToolingLog; -} - -export interface CreateRoleMappingProps { - name: string; - roles: string[]; - config: Config; - log: ToolingLog; -} - -export async function createRole(props: CreateRoleProps) { - const { roleName, roleMapping, kibanaServer, log } = props; - log.debug(`Adding a role: ${roleName}`); - const { status, statusText } = await kibanaServer.request({ - path: `/api/security/role/${roleName}`, - method: 'PUT', - body: roleMapping, - retries: 0, - }); - if (status !== 204) { - throw new Error(`Expected status code of 204, received ${status} ${statusText}`); - } -} - -export async function createRoleMapping(props: CreateRoleMappingProps) { - const { name, roles, config, log } = props; - log.debug(`Creating a role mapping: {realm.name: ${name}, roles: ${roles}}`); - const esClient = createEsClientForFtrConfig(config); - await esClient.security.putRoleMapping({ - name, - roles, - enabled: true, - // @ts-ignore - rules: { field: { 'realm.name': name } }, - }); -} diff --git a/packages/kbn-ftr-common-functional-services/tsconfig.json b/packages/kbn-ftr-common-functional-services/tsconfig.json index ff10ec6c9d5fb8..56a442ad2f5a99 100644 --- a/packages/kbn-ftr-common-functional-services/tsconfig.json +++ b/packages/kbn-ftr-common-functional-services/tsconfig.json @@ -18,7 +18,6 @@ "@kbn/expect", "@kbn/repo-info", "@kbn/es", - "@kbn/mock-idp-utils" ], "exclude": [ "target/**/*", diff --git a/packages/kbn-test/src/es/test_es_cluster.ts b/packages/kbn-test/src/es/test_es_cluster.ts index a2078a1e56e16b..df83fa89cf607f 100644 --- a/packages/kbn-test/src/es/test_es_cluster.ts +++ b/packages/kbn-test/src/es/test_es_cluster.ts @@ -202,6 +202,7 @@ export function createTestEsCluster< license, basePath, esArgs, + resources: files, }; return new (class TestCluster { @@ -297,7 +298,7 @@ export function createTestEsCluster< // If we have multiple nodes, we shouldn't try setting up the native realm // right away or wait for ES to be green, the cluster isn't ready. So we only // set it up after the last node is started. - skipNativeRealmSetup: this.nodes.length > 1 && i < this.nodes.length - 1, + skipSecuritySetup: this.nodes.length > 1 && i < this.nodes.length - 1, skipReadyCheck: this.nodes.length > 1 && i < this.nodes.length - 1, onEarlyExit, writeLogsToPath, diff --git a/x-pack/test/api_integration/deployment_agnostic/default_configs/stateful.config.base.ts b/x-pack/test/api_integration/deployment_agnostic/default_configs/stateful.config.base.ts index 458f78a3dd86f4..2fd2d61e1cf817 100644 --- a/x-pack/test/api_integration/deployment_agnostic/default_configs/stateful.config.base.ts +++ b/x-pack/test/api_integration/deployment_agnostic/default_configs/stateful.config.base.ts @@ -18,6 +18,10 @@ import { systemIndicesSuperuser, FtrConfigProviderContext, } from '@kbn/test'; +import path from 'path'; +// @ts-expect-error we have to check types with "allowJs: false" for now, causing this import to fail +import { REPO_ROOT } from '@kbn/repo-info'; +import { STATEFUL_ROLES_ROOT_PATH } from '@kbn/es'; import { DeploymentAgnosticCommonServices, services } from '../services'; interface CreateTestConfigOptions { @@ -85,6 +89,10 @@ export function createStatefulTestConfig { cleanCredentials(role); - // load service to call it outside mocha context - await svlUserManager.init(); const credentials = await svlUserManager.createM2mApiKeyWithRoleScope(role); rolesCredentials.set(role, credentials); @@ -66,8 +62,6 @@ export function SecuritySolutionServerlessUtils({ return { getUsername: async (role = 'admin') => { - // load service to call it outside mocha context - await svlUserManager.init(); const { username } = await svlUserManager.getUserData(role); return username; From bb2cc70a3b9abec090da1e2fac3439a9e53ccb60 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Thu, 15 Aug 2024 08:07:16 -0600 Subject: [PATCH 84/92] [ES|QL] improve test case generator script (#190441) ## Summary Fixes a bug I introduced in https://github.com/elastic/kibana/pull/189941 Co-authored-by: Elastic Machine --- .../generate_function_validation_tests.ts | 4 +- .../esql_validation_meta_tests.json | 148 ++++++++++++++++++ .../src/validation/validation.test.ts | 84 ++++++++++ 3 files changed, 234 insertions(+), 2 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts index 3118c78f0dbf7b..02e37108db7b89 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts @@ -21,8 +21,8 @@ import { SupportedDataType, FunctionDefinition, dataTypes, - isSupportedDataType, fieldTypes, + isFieldType, } from '../src/definitions/types'; import { FUNCTION_DESCRIBE_BLOCK_NAME } from '../src/validation/function_describe_block_name'; import { getMaxMinNumberOfParams } from '../src/validation/helpers'; @@ -1110,7 +1110,7 @@ function getFieldMapping( return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type as string; - if (isSupportedDataType(typeString)) { + if (isFieldType(typeString)) { if (useLiterals && literalOptions) { return { name: `"${literalOptions[0]}"`, diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 21af463f8edeb1..91a4f120cf2ddb 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -31920,6 +31920,62 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = max(textField)", + "error": [ + "Argument of [max] must be [double], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(textField)", + "error": [ + "Argument of [max] must be [double], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | where max(textField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(textField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(textField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(textField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(textField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(textField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, { "query": "from a_index | stats var = min(doubleField)", "error": [], @@ -32504,6 +32560,62 @@ ], "warning": [] }, + { + "query": "from a_index | stats var = min(textField)", + "error": [ + "Argument of [min] must be [double], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(textField)", + "error": [ + "Argument of [min] must be [double], found value [textField] type [text]" + ], + "warning": [] + }, + { + "query": "from a_index | where min(textField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(textField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(textField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(textField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(textField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(textField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, { "query": "from a_index | stats var = count(textField)", "error": [], @@ -34937,6 +35049,42 @@ ], "warning": [] }, + { + "query": "from a_index | stats by bucket(dateField, textField)", + "error": [ + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, textField)", + "error": [ + "Argument of [bin] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | sort bucket(dateField, textField)", + "error": [ + "SORT does not support function bucket" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(\"2022\", textField)", + "error": [ + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats bucket(concat(\"20\", \"22\"), textField)", + "error": [ + "Argument of [bucket] must be [date], found value [concat(\"20\",\"22\")] type [keyword]", + "Argument of [bucket] must be a constant, received [textField]" + ], + "warning": [] + }, { "query": "from a_index | stats var = percentile(doubleField, doubleField)", "error": [ diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index 1b8097cac54409..15ca9cbfe6fbf4 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -12284,6 +12284,38 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats max(concat("20", "22"))', [ 'Argument of [max] must be [double], found value [concat("20","22")] type [keyword]', ]); + + testErrorsAndWarnings('from a_index | stats var = max(textField)', [ + 'Argument of [max] must be [double], found value [textField] type [text]', + ]); + + testErrorsAndWarnings('from a_index | stats max(textField)', [ + 'Argument of [max] must be [double], found value [textField] type [text]', + ]); + + testErrorsAndWarnings('from a_index | where max(textField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(textField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(textField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(textField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(textField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(textField) > 0', [ + 'EVAL does not support function max', + ]); }); describe('min', () => { @@ -12606,6 +12638,38 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | stats min(concat("20", "22"))', [ 'Argument of [min] must be [double], found value [concat("20","22")] type [keyword]', ]); + + testErrorsAndWarnings('from a_index | stats var = min(textField)', [ + 'Argument of [min] must be [double], found value [textField] type [text]', + ]); + + testErrorsAndWarnings('from a_index | stats min(textField)', [ + 'Argument of [min] must be [double], found value [textField] type [text]', + ]); + + testErrorsAndWarnings('from a_index | where min(textField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(textField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(textField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(textField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(textField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(textField) > 0', [ + 'EVAL does not support function min', + ]); }); describe('count', () => { @@ -14564,6 +14628,26 @@ describe('validation logic', () => { 'Argument of [bin] must be a constant, received [longField]', ] ); + + testErrorsAndWarnings('from a_index | stats by bucket(dateField, textField)', [ + 'Argument of [bucket] must be a constant, received [textField]', + ]); + + testErrorsAndWarnings('from a_index | stats by bin(dateField, textField)', [ + 'Argument of [bin] must be a constant, received [textField]', + ]); + + testErrorsAndWarnings('from a_index | sort bucket(dateField, textField)', [ + 'SORT does not support function bucket', + ]); + + testErrorsAndWarnings('from a_index | stats bucket("2022", textField)', [ + 'Argument of [bucket] must be a constant, received [textField]', + ]); + testErrorsAndWarnings('from a_index | stats bucket(concat("20", "22"), textField)', [ + 'Argument of [bucket] must be [date], found value [concat("20","22")] type [keyword]', + 'Argument of [bucket] must be a constant, received [textField]', + ]); }); describe('percentile', () => { From 32044868b8ec97294e24fe4ff4260f1602868dc9 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 15 Aug 2024 09:19:09 -0500 Subject: [PATCH 85/92] [sonarqube] Disable cron (#190611) OOM issues, will follow up in https://github.com/elastic/kibana/pull/190547 --- catalog-info.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/catalog-info.yaml b/catalog-info.yaml index 47fd1049e2fed6..865723fbe0976a 100644 --- a/catalog-info.yaml +++ b/catalog-info.yaml @@ -119,10 +119,6 @@ spec: repository: elastic/kibana provider_settings: trigger_mode: none - schedules: - daily: - branch: main - cronline: "@daily" pipeline_file: ".buildkite/pipelines/sonarqube.yml" teams: kibana-operations: From d0709f790bd98053607f98e4adb2c8b11ea0fa53 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Thu, 15 Aug 2024 16:29:28 +0200 Subject: [PATCH 86/92] Fix Risk Entity Calculation MKI test (#190585) ## Summary When the Entity Calculation API is called, the risk engine is also running and inserting documents into the risk score index. That is why we can't assert that only the API will insert documents into the index. To make the test more reliable, I updated the code to wait for the risk engine to run before calling the API. This way, we can assert that the document produced by the API is created after it is called. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../risk_score_entity_calculation.ts | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts index e35ea16c87f1a5..214c531bd6ab60 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts @@ -57,9 +57,8 @@ export default ({ getService }: FtrProviderContext): void => { return result; }; - const calculateEntityRiskScoreAfterRuleCreationAndExecution = async ( + const createRuleAndWaitExecution = async ( documentId: string, - identifier: string, { alerts = 1, riskScore = 21, @@ -67,7 +66,9 @@ export default ({ getService }: FtrProviderContext): void => { }: { alerts?: number; riskScore?: number; maxSignals?: number } = {} ) => { await createAndSyncRuleAndAlerts({ query: `id: ${documentId}`, alerts, riskScore, maxSignals }); + }; + const calculateEntityRiskScore = async (identifier: string) => { return await calculateEntityRiskScores({ body: { identifier_type: 'host', @@ -102,9 +103,7 @@ export default ({ getService }: FtrProviderContext): void => { beforeEach(async () => { await deleteAllAlerts(supertest, log, es); await deleteAllRules(supertest, log); - await cleanRiskEngine({ kibanaServer, es, log }); - await riskEngineRoutes.init(); }); afterEach(async () => { @@ -118,11 +117,11 @@ export default ({ getService }: FtrProviderContext): void => { it('calculates and persists risk score for entity', async () => { const documentId = uuidv4(); await indexListOfDocuments([buildDocument({ host: { name: 'host-1' } }, documentId)]); + await createRuleAndWaitExecution(documentId); + await riskEngineRoutes.init(); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 1 }); - const results = await calculateEntityRiskScoreAfterRuleCreationAndExecution( - documentId, - 'host-1' - ); + const results = await calculateEntityRiskScore('host-1'); const expectedScore = { calculated_level: 'Unknown', @@ -139,13 +138,14 @@ export default ({ getService }: FtrProviderContext): void => { expect(score).to.eql(expectedScore); expect(results.success).to.be(true); - await waitForRiskScoresToBePresent({ es, log }); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 2 }); const persistedScores = await readRiskScores(es); - expect(persistedScores.length).to.eql(1); - const [persistedScore] = normalizeScores(persistedScores); + expect(persistedScores.length).to.greaterThan(1); // the risk score is calculated once by the risk engine and a second time by the API + const [persistedScoreByApi, persistedScoreByEngine] = normalizeScores(persistedScores); - expect(persistedScore).to.eql(expectedScore); + expect(persistedScoreByApi).to.eql(expectedScore); + expect(persistedScoreByApi).to.eql(persistedScoreByEngine); }); describe('with asset criticality data', () => { @@ -167,11 +167,12 @@ export default ({ getService }: FtrProviderContext): void => { const documentId = uuidv4(); await indexListOfDocuments([buildDocument({ host: { name: 'host-1' } }, documentId)]); await waitForAssetCriticalityToBePresent({ es, log }); + await createRuleAndWaitExecution(documentId); + await riskEngineRoutes.init(); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 1 }); + + const results = await calculateEntityRiskScore('host-1'); - const results = await calculateEntityRiskScoreAfterRuleCreationAndExecution( - documentId, - 'host-1' - ); const expectedScore = { criticality_level: 'high_impact', criticality_modifier: 1.5, @@ -188,20 +189,21 @@ export default ({ getService }: FtrProviderContext): void => { expect(results.success).to.be(true); expect(score).to.eql(expectedScore); - await waitForRiskScoresToBePresent({ es, log }); + await waitForRiskScoresToBePresent({ es, log, scoreCount: 2 }); const persistedScores = await readRiskScores(es); - expect(persistedScores.length).to.eql(1); - const [persistedScore] = normalizeScores(persistedScores); + expect(persistedScores.length).to.greaterThan(1); // the risk score is calculated once by the risk engine and a second time by the API + const [persistedScoreByApi, persistedScoreByEngine] = normalizeScores(persistedScores); + expect(persistedScoreByApi).to.eql(expectedScore); + expect(persistedScoreByApi).to.eql(persistedScoreByEngine); - expect(persistedScore).to.eql(expectedScore); const [rawScore] = persistedScores; expect( rawScore.host?.risk.category_1_score! + rawScore.host?.risk.category_2_score! ).to.be.within( - persistedScore.calculated_score_norm! - 0.000000000000001, - persistedScore.calculated_score_norm! + 0.000000000000001 + persistedScoreByApi.calculated_score_norm! - 0.000000000000001, + persistedScoreByApi.calculated_score_norm! + 0.000000000000001 ); }); }); From cdda9905a49570df9f41a7311edf123e09680a9d Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Thu, 15 Aug 2024 16:38:30 +0200 Subject: [PATCH 87/92] [ES|QL] Distinguish the aliases from the indices (#190394) ## Summary Closes https://github.com/elastic/kibana/issues/190329 We were already suggesting aliases but we were not labelling them correctly. ![image (57)](https://github.com/user-attachments/assets/9d6d92db-aac1-4e9f-869e-3a204f819949) ### Checklist - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../src/__tests__/helpers.ts | 1 + .../src/autocomplete/autocomplete.ts | 4 +-- .../src/autocomplete/factories.ts | 9 +++-- .../src/shared/types.ts | 1 + .../kbn-text-based-editor/src/helpers.test.ts | 34 +++++++++++++++++-- packages/kbn-text-based-editor/src/helpers.ts | 12 +++++-- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 9 files changed, 51 insertions(+), 13 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts index 273679ab1f267d..020ee21940fd04 100644 --- a/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/__tests__/helpers.ts @@ -72,6 +72,7 @@ export function getCallbackMocks() { indexes.map((name) => ({ name, hidden: name.startsWith('.'), + type: 'Index', })) ), getPolicies: jest.fn(async () => policies), diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 5afdcb8bccfb72..1ccc6d6e62bf5f 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -349,8 +349,8 @@ function getSourcesRetriever(resourceRetriever?: ESQLCallbacks) { return buildSourcesDefinitions( list .filter(({ hidden }) => !hidden) - .map(({ name, dataStreams, title }) => { - return { name, isIntegration: Boolean(dataStreams && dataStreams.length), title }; + .map(({ name, dataStreams, title, type }) => { + return { name, isIntegration: Boolean(dataStreams && dataStreams.length), title, type }; }) ); }; diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index f4c9ad82b80cf3..30772d6e070fce 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -187,9 +187,9 @@ export const buildVariablesDefinitions = (variables: string[]): SuggestionRawDef })); export const buildSourcesDefinitions = ( - sources: Array<{ name: string; isIntegration: boolean; title?: string }> + sources: Array<{ name: string; isIntegration: boolean; title?: string; type?: string }> ): SuggestionRawDefinition[] => - sources.map(({ name, isIntegration, title }) => ({ + sources.map(({ name, isIntegration, title, type }) => ({ label: title ?? name, text: getSafeInsertSourceText(name) + (!isIntegration ? ' ' : ''), isSnippet: isIntegration, @@ -199,7 +199,10 @@ export const buildSourcesDefinitions = ( defaultMessage: `Integration`, }) : i18n.translate('kbn-esql-validation-autocomplete.esql.autocomplete.sourceDefinition', { - defaultMessage: `Index`, + defaultMessage: '{type}', + values: { + type: type ?? 'Index', + }, }), sortText: 'A', command: TRIGGER_SUGGESTION_COMMAND, diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/types.ts b/packages/kbn-esql-validation-autocomplete/src/shared/types.ts index 08e1cdccc37a31..04a8365c5e51c4 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/types.ts @@ -20,6 +20,7 @@ export interface ESQLCallbacks { hidden: boolean; title?: string; dataStreams?: Array<{ name: string; title?: string }>; + type?: string; } >; getFieldsFor?: CallbackFn<{ query: string }, ESQLRealField>; diff --git a/packages/kbn-text-based-editor/src/helpers.test.ts b/packages/kbn-text-based-editor/src/helpers.test.ts index 797e68ce990560..c8b46a75ce4449 100644 --- a/packages/kbn-text-based-editor/src/helpers.test.ts +++ b/packages/kbn-text-based-editor/src/helpers.test.ts @@ -249,8 +249,36 @@ describe('helpers', function () { }; const indices = await getIndicesList(updatedDataViewsMock); expect(indices).toStrictEqual([ - { name: '.system1', hidden: true }, - { name: 'logs', hidden: false }, + { name: '.system1', hidden: true, type: 'Index' }, + { name: 'logs', hidden: false, type: 'Index' }, + ]); + }); + + it('should type correctly the aliases', async function () { + const dataViewsMock = dataViewPluginMocks.createStartContract(); + const updatedDataViewsMock = { + ...dataViewsMock, + getIndices: jest.fn().mockResolvedValue([ + { + name: 'alias1', + title: 'system1', + tags: [ + { + name: 'Alias', + type: 'alias', + }, + ], + }, + { + name: 'logs', + title: 'logs', + }, + ]), + }; + const indices = await getIndicesList(updatedDataViewsMock); + expect(indices).toStrictEqual([ + { name: 'alias1', hidden: false, type: 'Alias' }, + { name: 'logs', hidden: false, type: 'Index' }, ]); }); }); @@ -283,7 +311,7 @@ describe('helpers', function () { ]), }; const indices = await getRemoteIndicesList(updatedDataViewsMock); - expect(indices).toStrictEqual([{ name: 'remote:logs', hidden: false }]); + expect(indices).toStrictEqual([{ name: 'remote:logs', hidden: false, type: 'Index' }]); }); }); }); diff --git a/packages/kbn-text-based-editor/src/helpers.ts b/packages/kbn-text-based-editor/src/helpers.ts index 95652a942d7ddb..9e3bea6ee0abf7 100644 --- a/packages/kbn-text-based-editor/src/helpers.ts +++ b/packages/kbn-text-based-editor/src/helpers.ts @@ -209,7 +209,11 @@ export const getIndicesList = async (dataViews: DataViewsPublicPluginStart) => { pattern: '*', isRollupIndex: () => false, }); - return indices.map((index) => ({ name: index.name, hidden: index.name.startsWith('.') })); + + return indices.map((index) => { + const [tag] = index?.tags ?? []; + return { name: index.name, hidden: index.name.startsWith('.'), type: tag?.name ?? 'Index' }; + }); }; export const getRemoteIndicesList = async (dataViews: DataViewsPublicPluginStart) => { @@ -223,7 +227,10 @@ export const getRemoteIndicesList = async (dataViews: DataViewsPublicPluginStart return !index.startsWith('.') && !Boolean(source.item.indices); }); - return finalIndicesList.map((source) => ({ name: source.name, hidden: false })); + return finalIndicesList.map((source) => { + const [tag] = source?.tags ?? []; + return { name: source.name, hidden: false, type: tag?.name ?? 'Index' }; + }); }; // refresh the esql cache entry after 10 minutes @@ -261,6 +268,7 @@ const getIntegrations = async (core: CoreStart) => { hidden: false, title: source.title, dataStreams: source.dataStreams, + type: 'Integration', })) ?? [] ); }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 2eaadfbe53987d..b134c6acfc580a 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5301,7 +5301,6 @@ "kbn-esql-validation-autocomplete.esql.autocomplete.noPoliciesLabelsFound": "Cliquez pour créer", "kbn-esql-validation-autocomplete.esql.autocomplete.pipeDoc": "Barre verticale (|)", "kbn-esql-validation-autocomplete.esql.autocomplete.semiColonDoc": "Point-virgule (;)", - "kbn-esql-validation-autocomplete.esql.autocomplete.sourceDefinition": "Index", "kbn-esql-validation-autocomplete.esql.autocomplete.valueDefinition": "Valeur littérale", "kbn-esql-validation-autocomplete.esql.autocomplete.variableDefinition": "Variable spécifiée par l'utilisateur dans la requête ES|QL", "kbn-esql-validation-autocomplete.esql.definition.addDoc": "Ajouter (+)", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index c0b643bd017924..39b898482ad06e 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5298,7 +5298,6 @@ "kbn-esql-validation-autocomplete.esql.autocomplete.pipeDoc": "パイプ(|)", "kbn-esql-validation-autocomplete.esql.autocomplete.policyDefinition": "{count, plural, other {インデックス}}で定義されたポリシー:{indices}", "kbn-esql-validation-autocomplete.esql.autocomplete.semiColonDoc": "セミコロン(;)", - "kbn-esql-validation-autocomplete.esql.autocomplete.sourceDefinition": "インデックス", "kbn-esql-validation-autocomplete.esql.autocomplete.valueDefinition": "リテラル値", "kbn-esql-validation-autocomplete.esql.autocomplete.variableDefinition": "ES|QLクエリーでユーザーが指定した変数", "kbn-esql-validation-autocomplete.esql.definition.addDoc": "加算(+)", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index c0f00339083b4a..0d6c56ae59a358 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5306,7 +5306,6 @@ "kbn-esql-validation-autocomplete.esql.autocomplete.pipeDoc": "管道符 (|)", "kbn-esql-validation-autocomplete.esql.autocomplete.policyDefinition": "策略在{count, plural, other {索引}}上定义:{indices}", "kbn-esql-validation-autocomplete.esql.autocomplete.semiColonDoc": "分号 (;)", - "kbn-esql-validation-autocomplete.esql.autocomplete.sourceDefinition": "索引", "kbn-esql-validation-autocomplete.esql.autocomplete.valueDefinition": "文本值", "kbn-esql-validation-autocomplete.esql.autocomplete.variableDefinition": "用户在 ES|QL 查询中指定的变量", "kbn-esql-validation-autocomplete.esql.definition.addDoc": "添加 (+)", From 9568729be05384d7616b5af6bcf325408ba7dfe9 Mon Sep 17 00:00:00 2001 From: Marius Dragomir Date: Thu, 15 Aug 2024 10:43:11 -0400 Subject: [PATCH 88/92] [QA]Fix monaco console request in stack functional integration. (#190570) ## Summary Switches to the correct method for sending a request to the dev console. Previous one was using the old Ace eaditor dev console. --- .../test/stack_functional_integration/apps/ccs/ccs_console.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/test/stack_functional_integration/apps/ccs/ccs_console.js b/x-pack/test/stack_functional_integration/apps/ccs/ccs_console.js index 940e624336cafe..01205ed528a1c3 100644 --- a/x-pack/test/stack_functional_integration/apps/ccs/ccs_console.js +++ b/x-pack/test/stack_functional_integration/apps/ccs/ccs_console.js @@ -30,7 +30,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.console.monaco.clearEditorText(); }); it('it should be able to access remote data', async () => { - await PageObjects.console.enterRequest( + await PageObjects.console.monaco.enterText( '\nGET ftr-remote:makelogs工程-*/_search\n {\n "query": {\n "bool": {\n "must": [\n {"match": {"extension" : "jpg"} \n}\n}\n}\n}\n}' ); await PageObjects.console.clickPlay(); From f904104f23dc087065ed42a46f8497d2215443ed Mon Sep 17 00:00:00 2001 From: Ignacio Rivas Date: Thu, 15 Aug 2024 16:44:47 +0200 Subject: [PATCH 89/92] [Console] Allow users to copy requests as specific languages (#189976) --- package.json | 1 + .../console/common/constants/copy_as.ts | 19 ++ src/plugins/console/common/constants/index.ts | 1 + .../components/context_menu/context_menu.tsx | 264 ++++++++++++++++++ .../monaco/components/context_menu/index.ts | 9 + .../context_menu/language_selector_modal.tsx | 144 ++++++++++ .../editor/monaco/components/index.ts | 9 + .../editor/monaco/monaco_editor.tsx | 18 +- .../monaco/monaco_editor_actions_provider.ts | 2 +- src/plugins/console/public/plugin.ts | 2 + src/plugins/console/public/services/api.ts | 27 ++ src/plugins/console/public/services/http.ts | 23 ++ src/plugins/console/public/services/index.ts | 3 + .../console/public/services/storage.ts | 1 + .../console/public/services/use_request.ts | 22 ++ src/plugins/console/public/shared_imports.ts | 6 + .../routes/api/__mocks__/request.mock.ts | 16 ++ .../routes/api/__mocks__/routes.mock.ts | 52 ++++ .../convert_request_handler.test.ts | 90 ++++++ .../convert_request_to_language/index.ts | 79 ++++++ .../api/console/proxy/validation_config.ts | 4 +- src/plugins/console/server/routes/index.ts | 2 + .../apps/console/monaco/_context_menu.ts | 88 ++++-- test/functional/page_objects/console_page.ts | 33 +++ yarn.lock | 52 +++- 25 files changed, 937 insertions(+), 30 deletions(-) create mode 100644 src/plugins/console/common/constants/copy_as.ts create mode 100644 src/plugins/console/public/application/containers/editor/monaco/components/context_menu/context_menu.tsx create mode 100644 src/plugins/console/public/application/containers/editor/monaco/components/context_menu/index.ts create mode 100644 src/plugins/console/public/application/containers/editor/monaco/components/context_menu/language_selector_modal.tsx create mode 100644 src/plugins/console/public/application/containers/editor/monaco/components/index.ts create mode 100644 src/plugins/console/public/services/api.ts create mode 100644 src/plugins/console/public/services/http.ts create mode 100644 src/plugins/console/public/services/use_request.ts create mode 100644 src/plugins/console/server/routes/api/__mocks__/request.mock.ts create mode 100644 src/plugins/console/server/routes/api/__mocks__/routes.mock.ts create mode 100644 src/plugins/console/server/routes/api/console/convert_request_to_language/convert_request_handler.test.ts create mode 100644 src/plugins/console/server/routes/api/console/convert_request_to_language/index.ts diff --git a/package.json b/package.json index 635fb90eddcd83..9fc403e945eb02 100644 --- a/package.json +++ b/package.json @@ -120,6 +120,7 @@ "@elastic/numeral": "^2.5.1", "@elastic/react-search-ui": "^1.20.2", "@elastic/react-search-ui-views": "^1.20.2", + "@elastic/request-converter": "^8.15.3", "@elastic/request-crypto": "2.0.2", "@elastic/search-ui": "^1.20.2", "@elastic/search-ui-app-search-connector": "^1.20.2", diff --git a/src/plugins/console/common/constants/copy_as.ts b/src/plugins/console/common/constants/copy_as.ts new file mode 100644 index 00000000000000..a7b6c80685939a --- /dev/null +++ b/src/plugins/console/common/constants/copy_as.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 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. + */ + +// Default language for the language selector +export const DEFAULT_LANGUAGE = 'curl'; +// These values are the ones that should match the available languages from the +// `@elastic/request-converter` package but since it cannot run on client side, +// we hardcode the available languages in order to avoid having to make an extra +// request to fetch them. +export const AVAILABLE_LANGUAGES = [ + { value: 'curl', label: 'curl' }, + { value: 'javascript', label: 'JavaScript' }, + { value: 'python', label: 'Python' }, +]; diff --git a/src/plugins/console/common/constants/index.ts b/src/plugins/console/common/constants/index.ts index 4e0df53fdd513c..209b47419fc3e3 100644 --- a/src/plugins/console/common/constants/index.ts +++ b/src/plugins/console/common/constants/index.ts @@ -16,3 +16,4 @@ export { MANUAL_SUBFOLDER, } from './autocomplete_definitions'; export { DEFAULT_INPUT_VALUE } from './editor_input'; +export { DEFAULT_LANGUAGE, AVAILABLE_LANGUAGES } from './copy_as'; diff --git a/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/context_menu.tsx b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/context_menu.tsx new file mode 100644 index 00000000000000..acdbd037048664 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/context_menu.tsx @@ -0,0 +1,264 @@ +/* + * Copyright 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, { useState } from 'react'; +import { + EuiIcon, + EuiContextMenuPanel, + EuiContextMenuItem, + EuiPopover, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiLoadingSpinner, +} from '@elastic/eui'; +import { NotificationsSetup } from '@kbn/core/public'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { i18n } from '@kbn/i18n'; +import { LanguageSelectorModal } from './language_selector_modal'; +import { convertRequestToLanguage } from '../../../../../../services'; +import type { EditorRequest } from '../../types'; + +import { useServicesContext } from '../../../../../contexts'; +import { StorageKeys } from '../../../../../../services'; +import { DEFAULT_LANGUAGE, AVAILABLE_LANGUAGES } from '../../../../../../../common/constants'; + +interface Props { + getRequests: () => Promise; + getDocumentation: () => Promise; + autoIndent: (ev: React.MouseEvent) => void; + notifications: NotificationsSetup; +} + +const DELAY_FOR_HIDING_SPINNER = 500; + +const getLanguageLabelByValue = (value: string) => { + return AVAILABLE_LANGUAGES.find((lang) => lang.value === value)?.label || DEFAULT_LANGUAGE; +}; + +export const ContextMenu = ({ + getRequests, + getDocumentation, + autoIndent, + notifications, +}: Props) => { + // Get default language from local storage + const { + services: { storage, esHostService }, + } = useServicesContext(); + const defaultLanguage = storage.get(StorageKeys.DEFAULT_LANGUAGE, DEFAULT_LANGUAGE); + + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [isRequestConverterLoading, setRequestConverterLoading] = useState(false); + const [isLanguageSelectorVisible, setLanguageSelectorVisibility] = useState(false); + const [currentLanguage, setCurrentLanguage] = useState(defaultLanguage); + + const copyText = async (text: string) => { + if (window.navigator?.clipboard) { + await window.navigator.clipboard.writeText(text); + return; + } + throw new Error('Could not copy to clipboard!'); + }; + + // This function will convert all the selected requests to the language by + // calling convertRequestToLanguage and then copy the data to clipboard. + const copyAs = async (language?: string) => { + // Get the language we want to convert the requests to + const withLanguage = language || currentLanguage; + // Get all the selected requests + const requests = await getRequests(); + + const { data: requestsAsCode, error: requestError } = await convertRequestToLanguage({ + language: withLanguage, + esHost: esHostService.getHost(), + requests, + }); + + if (requestError) { + notifications.toasts.addDanger({ + title: i18n.translate('console.consoleMenu.copyAsFailedMessage', { + defaultMessage: + '{requestsCount, plural, one {Request} other {Requests}} could not be copied to clipboard', + values: { requestsCount: requests.length }, + }), + }); + + return; + } + + notifications.toasts.addSuccess({ + title: i18n.translate('console.consoleMenu.copyAsSuccessMessage', { + defaultMessage: + '{requestsCount, plural, one {Request} other {Requests}} copied to clipboard as {language}', + values: { language: getLanguageLabelByValue(withLanguage), requestsCount: requests.length }, + }), + }); + + await copyText(requestsAsCode); + }; + + const onCopyAsSubmit = async (language?: string) => { + const withLanguage = language || currentLanguage; + + // Close language selector modal + setLanguageSelectorVisibility(false); + // Show loading spinner + setRequestConverterLoading(true); + + // When copying as worked as expected, close the context menu popover + copyAs(withLanguage) + .then(() => { + setIsPopoverOpen(false); + }) + .finally(() => { + // Delay hiding the spinner to avoid flickering between the spinner and + // the change language button + setTimeout(() => { + setRequestConverterLoading(false); + }, DELAY_FOR_HIDING_SPINNER); + }); + }; + + const changeDefaultLanguage = (language: string) => { + if (currentLanguage !== language) { + storage.set(StorageKeys.DEFAULT_LANGUAGE, language); + } + + setCurrentLanguage(language); + }; + + const closePopover = () => { + setIsPopoverOpen(false); + }; + + const openDocs = async () => { + closePopover(); + const documentation = await getDocumentation(); + if (!documentation) { + notifications.toasts.addWarning({ + title: i18n.translate('console.consoleMenu.missingDocumentationPage', { + defaultMessage: 'Documentation page is not yet available for this API.', + }), + }); + return; + } + window.open(documentation, '_blank'); + }; + + const handleAutoIndent = (event: React.MouseEvent) => { + closePopover(); + autoIndent(event); + }; + + const button = ( + setIsPopoverOpen((prev) => !prev)} + data-test-subj="toggleConsoleMenu" + aria-label={i18n.translate('console.requestOptionsButtonAriaLabel', { + defaultMessage: 'Request options', + })} + > + + + ); + + const items = [ + { + e.preventDefault(); + const target = e.target as HTMLButtonElement; + + if (target.dataset.name === 'changeLanguage') { + setLanguageSelectorVisibility(true); + return; + } + + onCopyAsSubmit(); + }} + icon="copyClipboard" + > + + + + + + + + {getLanguageLabelByValue(currentLanguage)} + + + + + {isRequestConverterLoading ? ( + + ) : ( + // The EuiContextMenuItem renders itself as a button already, so we need to + // force the link to not be a button in order to prevent A11Y issues. + + Change + + )} + + + , + + + , + + + , + ]; + + return ( + <> + + + + {isLanguageSelectorVisible && ( + setLanguageSelectorVisibility(false)} + onSubmit={onCopyAsSubmit} + /> + )} + + ); +}; diff --git a/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/index.ts b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/index.ts new file mode 100644 index 00000000000000..6ef3a8fab51bf1 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright 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 { ContextMenu } from './context_menu'; diff --git a/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/language_selector_modal.tsx b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/language_selector_modal.tsx new file mode 100644 index 00000000000000..8ce76675b4336b --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/components/context_menu/language_selector_modal.tsx @@ -0,0 +1,144 @@ +/* + * Copyright 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, { useState, useMemo } from 'react'; +import { + EuiButton, + EuiModal, + EuiModalBody, + EuiButtonEmpty, + EuiModalFooter, + EuiModalHeader, + EuiModalHeaderTitle, + useGeneratedHtmlId, + EuiSelectable, + EuiSelectableOption, + EuiLink, + EuiTextColor, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { AVAILABLE_LANGUAGES } from '../../../../../../../common/constants'; + +interface Props { + closeModal: () => void; + onSubmit: (language: string) => void; + currentLanguage: string; + changeDefaultLanguage: (lang: string) => void; +} + +const DEFAULT_BADGE = ( + + + {i18n.translate('console.requestPanel.contextMenu.defaultSelectedLanguage', { + defaultMessage: 'Default', + })} + + +); + +export const LanguageSelectorModal = ({ + closeModal, + onSubmit, + currentLanguage, + changeDefaultLanguage, +}: Props) => { + const modalTitleId = useGeneratedHtmlId(); + const [selectedLanguage, setSelectedLanguage] = useState(currentLanguage); + const [options, setOptions] = useState( + AVAILABLE_LANGUAGES.map( + (lang): EuiSelectableOption => ({ + label: lang.label, + key: lang.value, + 'data-test-subj': `languageOption-${lang.value}`, + }) + ) + ); + + const noOptionsSelected = options.every((option) => !option.checked); + + const optionsList = useMemo(() => { + return options.map((option) => ({ + ...option, + ...(noOptionsSelected && option.key === selectedLanguage && { checked: 'on' }), + append: + option.key === selectedLanguage ? ( + DEFAULT_BADGE + ) : ( + setSelectedLanguage(option.key!)} + data-test-subj={`changeDefaultLanguageTo-${option.key}`} + > + {i18n.translate('console.requestPanel.contextMenu.defaultSelectedLanguage', { + defaultMessage: 'Set as default', + })} + + ), + })); + }, [options, selectedLanguage, noOptionsSelected]); + + const onCopyCode = () => { + const selectedOption = options.find((option) => option.checked); + const language = selectedOption?.key || selectedLanguage; + + // If the default language is changed, update the local storage setting + if (currentLanguage !== language) { + changeDefaultLanguage(selectedLanguage); + } + + onSubmit(language); + }; + + const onCloseModal = () => { + changeDefaultLanguage(selectedLanguage); + closeModal(); + }; + + return ( + + + + + + + + + setOptions(changedOptions)} + singleSelection="always" + listProps={{ + onFocusBadge: false, + isVirtualized: false, + }} + > + {(list) => list} + + + + + + + + + + + + + ); +}; diff --git a/src/plugins/console/public/application/containers/editor/monaco/components/index.ts b/src/plugins/console/public/application/containers/editor/monaco/components/index.ts new file mode 100644 index 00000000000000..6ef3a8fab51bf1 --- /dev/null +++ b/src/plugins/console/public/application/containers/editor/monaco/components/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright 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 { ContextMenu } from './context_menu'; diff --git a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx index d8fe60dc8c5e94..e1d72fa979b43f 100644 --- a/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx +++ b/src/plugins/console/public/application/containers/editor/monaco/monaco_editor.tsx @@ -13,7 +13,7 @@ import { CodeEditor } from '@kbn/code-editor'; import { CONSOLE_LANG_ID, CONSOLE_THEME_ID, monaco } from '@kbn/monaco'; import { i18n } from '@kbn/i18n'; import { useSetInputEditor } from '../../../hooks'; -import { ConsoleMenu } from '../../../components'; +import { ContextMenu } from './components'; import { useServicesContext, useEditorReadContext, @@ -26,6 +26,7 @@ import { useResizeCheckerUtils, useKeyboardCommandsUtils, } from './hooks'; +import type { EditorRequest } from './types'; import { MonacoEditorActionsProvider } from './monaco_editor_actions_provider'; import { getSuggestionProvider } from './monaco_editor_suggestion_provider'; @@ -36,7 +37,7 @@ export interface EditorProps { export const MonacoEditor = ({ initialTextValue }: EditorProps) => { const context = useServicesContext(); const { - services: { notifications, esHostService, settings: settingsService, autocompleteInfo }, + services: { notifications, settings: settingsService, autocompleteInfo }, docLinkVersion, config: { isDevMode }, } = context; @@ -55,10 +56,11 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => { const [editorActionsCss, setEditorActionsCss] = useState({}); const setInputEditor = useSetInputEditor(); - const getCurlCallback = useCallback(async (): Promise => { - const curl = await actionsProvider.current?.getCurl(esHostService.getHost()); - return curl ?? ''; - }, [esHostService]); + + const getRequestsCallback = useCallback(async (): Promise => { + const requests = await actionsProvider.current?.getRequests(); + return requests ?? []; + }, []); const getDocumenationLink = useCallback(async () => { return actionsProvider.current!.getDocumentationLink(docLinkVersion); @@ -156,8 +158,8 @@ export const MonacoEditor = ({ initialTextValue }: EditorProps) => {
- stringifyRequest(parsedRequest) diff --git a/src/plugins/console/public/plugin.ts b/src/plugins/console/public/plugin.ts index 2728629d288b88..27b8fc1af8ccf9 100644 --- a/src/plugins/console/public/plugin.ts +++ b/src/plugins/console/public/plugin.ts @@ -26,6 +26,7 @@ import { EmbeddableConsoleInfo, createStorage, setStorage, + httpService, } from './services'; export class ConsoleUIPlugin @@ -52,6 +53,7 @@ export class ConsoleUIPlugin dev: { enableMonaco: isMonacoEnabled }, } = this.ctx.config.get(); + httpService.setup(http); this.autocompleteInfo.setup(http); setAutocompleteInfo(this.autocompleteInfo); diff --git a/src/plugins/console/public/services/api.ts b/src/plugins/console/public/services/api.ts new file mode 100644 index 00000000000000..77b84b1483c8a2 --- /dev/null +++ b/src/plugins/console/public/services/api.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { sendRequest } from './use_request'; +import type { EditorRequest } from '../application/containers/editor/monaco/types'; + +export async function convertRequestToLanguage({ + requests, + language, + esHost, +}: { + language: string; + esHost: string; + requests: EditorRequest[]; +}) { + return sendRequest({ + path: `/api/console/convert_request_to_language`, + method: 'post', + query: { language, esHost }, + body: requests, + }); +} diff --git a/src/plugins/console/public/services/http.ts b/src/plugins/console/public/services/http.ts new file mode 100644 index 00000000000000..afcf5595c55cf5 --- /dev/null +++ b/src/plugins/console/public/services/http.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 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 { HttpSetup } from '@kbn/core/public'; + +export class HttpService { + private client: any; + + public setup(httpClient: HttpSetup): void { + this.client = httpClient; + } + + public get httpClient(): HttpSetup { + return this.client; + } +} + +export const httpService = new HttpService(); diff --git a/src/plugins/console/public/services/index.ts b/src/plugins/console/public/services/index.ts index 669ed890729dcf..43b603b82b3d6f 100644 --- a/src/plugins/console/public/services/index.ts +++ b/src/plugins/console/public/services/index.ts @@ -17,3 +17,6 @@ export { ENTITIES, } from './autocomplete'; export { EmbeddableConsoleInfo } from './embeddable_console'; +export { httpService } from './http'; + +export { convertRequestToLanguage } from './api'; diff --git a/src/plugins/console/public/services/storage.ts b/src/plugins/console/public/services/storage.ts index b38cc2925dfb1d..b211724e088724 100644 --- a/src/plugins/console/public/services/storage.ts +++ b/src/plugins/console/public/services/storage.ts @@ -15,6 +15,7 @@ export enum StorageKeys { WIDTH = 'widths', FOLDS = 'folds', VARIABLES = 'variables', + DEFAULT_LANGUAGE = 'defaultLanguage', } export class Storage { diff --git a/src/plugins/console/public/services/use_request.ts b/src/plugins/console/public/services/use_request.ts new file mode 100644 index 00000000000000..bb8926ef04454e --- /dev/null +++ b/src/plugins/console/public/services/use_request.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 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 { + SendRequestConfig, + SendRequestResponse, + sendRequest as _sendRequest, + Error, +} from '../shared_imports'; + +import { httpService } from './http'; + +export const sendRequest = ( + config: SendRequestConfig +): Promise> => { + return _sendRequest(httpService.httpClient, config); +}; diff --git a/src/plugins/console/public/shared_imports.ts b/src/plugins/console/public/shared_imports.ts index 779a2b9ee1c0af..88c162bbbf48cc 100644 --- a/src/plugins/console/public/shared_imports.ts +++ b/src/plugins/console/public/shared_imports.ts @@ -15,3 +15,9 @@ export { sendRequest, collapseLiteralStrings, expandLiteralStrings }; export { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; export { toMountPoint } from '@kbn/react-kibana-mount'; + +export type { + SendRequestConfig, + SendRequestResponse, + Error, +} from '@kbn/es-ui-shared-plugin/public'; diff --git a/src/plugins/console/server/routes/api/__mocks__/request.mock.ts b/src/plugins/console/server/routes/api/__mocks__/request.mock.ts new file mode 100644 index 00000000000000..b3809ce432ce33 --- /dev/null +++ b/src/plugins/console/server/routes/api/__mocks__/request.mock.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 const createRequestMock = (opts?: { + headers?: any; + params?: Record; + query?: Record; + body?: Record; +}) => { + return Object.assign({ headers: {} }, opts || {}); +}; diff --git a/src/plugins/console/server/routes/api/__mocks__/routes.mock.ts b/src/plugins/console/server/routes/api/__mocks__/routes.mock.ts new file mode 100644 index 00000000000000..9aeff818b67152 --- /dev/null +++ b/src/plugins/console/server/routes/api/__mocks__/routes.mock.ts @@ -0,0 +1,52 @@ +/* + * Copyright 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 { AwaitedProperties } from '@kbn/utility-types'; +import { RequestHandler, RequestHandlerContext } from '@kbn/core/server'; +import { + elasticsearchServiceMock, + savedObjectsClientMock, + deprecationsServiceMock, +} from '@kbn/core/server/mocks'; + +export const savedObjectsClient = savedObjectsClientMock.create(); +export const routeHandlerContextMock = { + core: { + elasticsearch: { + client: elasticsearchServiceMock.createScopedClusterClient(), + }, + savedObjects: { getClient: () => savedObjectsClient }, + deprecations: { client: deprecationsServiceMock.createClient() }, + }, +} as unknown as AwaitedProperties; + +export const createMockRouter = () => { + const paths: Record>> = {}; + + const assign = + (method: string) => + ({ path }: { path: string }, handler: RequestHandler) => { + paths[method] = { + ...(paths[method] || {}), + ...{ [path]: handler }, + }; + }; + + return { + getHandler({ method, pathPattern }: { method: string; pathPattern: string }) { + return paths[method][pathPattern]; + }, + get: assign('get'), + post: assign('post'), + put: assign('put'), + patch: assign('patch'), + delete: assign('delete'), + }; +}; + +export type MockRouter = ReturnType; diff --git a/src/plugins/console/server/routes/api/console/convert_request_to_language/convert_request_handler.test.ts b/src/plugins/console/server/routes/api/console/convert_request_to_language/convert_request_handler.test.ts new file mode 100644 index 00000000000000..ec567c8e20f82c --- /dev/null +++ b/src/plugins/console/server/routes/api/console/convert_request_to_language/convert_request_handler.test.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { kibanaResponseFactory } from '@kbn/core/server'; +import { createMockRouter, MockRouter, routeHandlerContextMock } from '../../__mocks__/routes.mock'; +import { createRequestMock } from '../../__mocks__/request.mock'; +import { handleEsError } from '../../../../shared_imports'; + +import { registerConvertRequestRoute } from '.'; + +jest.mock('@elastic/request-converter', () => ({ + convertRequests: (request: string, language: string, options: any) => { + return Promise.resolve({ + converted: true, + meta: { + request, + language, + options, + }, + }); + }, +})); + +describe('Console convert request to language route', () => { + let mockRouter: MockRouter; + let routeDependencies: any; + + beforeEach(() => { + mockRouter = createMockRouter(); + routeDependencies = { + router: mockRouter, + lib: { handleEsError }, + }; + registerConvertRequestRoute(routeDependencies); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + describe('GET /api/console/convert_request_to_language', () => { + it('Correctly validates url validation config', async () => { + const resp = await routeDependencies.router.getHandler({ + method: 'post', + pathPattern: '/api/console/convert_request_to_language', + })( + routeHandlerContextMock, + createRequestMock({ + query: { + method: 'PUT', + path: '_ingest/geoip/database/geoip2_enterprise', + language: 'javascript', + esHost: 'http://localhost:9200', + }, + body: [ + '{\n "name": "GeoIP2-Enterprise",\n "maxmind": {\n "account_id": "1234567"\n }\n}', + ], + }), + kibanaResponseFactory + ); + + expect(resp.status).toEqual(200); + expect(resp.payload.converted).toBe(true); + }); + + it('Throws error if some params are missing', async () => { + const resp = await routeDependencies.router.getHandler({ + method: 'post', + pathPattern: '/api/console/convert_request_to_language', + })( + routeHandlerContextMock, + createRequestMock({ + query: { + method: 'GET', + path: '_ingest/geoip/database/geoip2_enterprise', + esHost: 'http://localhost:9200', + }, + }), + kibanaResponseFactory + ); + + expect(resp.status).toEqual(200); + }); + }); +}); diff --git a/src/plugins/console/server/routes/api/console/convert_request_to_language/index.ts b/src/plugins/console/server/routes/api/console/convert_request_to_language/index.ts new file mode 100644 index 00000000000000..5dac3eb15d6682 --- /dev/null +++ b/src/plugins/console/server/routes/api/console/convert_request_to_language/index.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { RequestHandler } from '@kbn/core/server'; +import { schema, TypeOf } from '@kbn/config-schema'; +import { convertRequests } from '@elastic/request-converter'; +import { RouteDependencies } from '../../..'; + +import { acceptedHttpVerb, nonEmptyString } from '../proxy/validation_config'; + +const routeValidationConfig = { + query: schema.object({ + language: schema.string(), + esHost: schema.string(), + }), + body: schema.maybe( + schema.arrayOf( + schema.object({ + method: acceptedHttpVerb, + url: nonEmptyString, + data: schema.arrayOf(schema.string()), + }) + ) + ), +}; + +export type Query = TypeOf; +export type Body = TypeOf; + +export const registerConvertRequestRoute = ({ + router, + lib: { handleEsError }, +}: RouteDependencies) => { + const handler: RequestHandler = async (ctx, req, response) => { + const { body, query } = req; + const { language, esHost } = query; + + try { + // Iterate over each request and build all the requests into a single string + // that can be passed to the request-converter library + let devtoolsScript = ''; + (body || []).forEach((request) => { + devtoolsScript += `${request.method} ${request.url}\n` as string; + if (request.data && request.data.length > 0) { + // We dont care about newlines in the data passed to the request-converter + // since the library will format the data anyway. + // This is specifically important as they rely requests using the ndjson format. + devtoolsScript += request.data.map((data) => data.replaceAll('\n', ' ')).join('\n'); + } + }); + + const codeSnippet = await convertRequests(devtoolsScript, language, { + checkOnly: false, + printResponse: true, + complete: true, + elasticsearchUrl: esHost, + }); + + return response.ok({ + body: codeSnippet as string, + }); + } catch (error) { + return handleEsError({ error, response }); + } + }; + + router.post( + { + path: '/api/console/convert_request_to_language', + validate: routeValidationConfig, + }, + handler + ); +}; diff --git a/src/plugins/console/server/routes/api/console/proxy/validation_config.ts b/src/plugins/console/server/routes/api/console/proxy/validation_config.ts index 9a3ee2efd66c1e..129ff1df7f6919 100644 --- a/src/plugins/console/server/routes/api/console/proxy/validation_config.ts +++ b/src/plugins/console/server/routes/api/console/proxy/validation_config.ts @@ -11,7 +11,7 @@ import { schema, TypeOf } from '@kbn/config-schema'; export type Query = TypeOf; export type Body = TypeOf; -const acceptedHttpVerb = schema.string({ +export const acceptedHttpVerb = schema.string({ validate: (method) => { return ['HEAD', 'GET', 'POST', 'PUT', 'DELETE', 'PATCH'].some( (verb) => verb.toLowerCase() === method.toLowerCase() @@ -21,7 +21,7 @@ const acceptedHttpVerb = schema.string({ }, }); -const nonEmptyString = schema.string({ +export const nonEmptyString = schema.string({ validate: (s) => (s === '' ? 'Expected non-empty string' : undefined), }); diff --git a/src/plugins/console/server/routes/index.ts b/src/plugins/console/server/routes/index.ts index e1a036f55a62cf..033659a62e4414 100644 --- a/src/plugins/console/server/routes/index.ts +++ b/src/plugins/console/server/routes/index.ts @@ -18,6 +18,7 @@ import { registerEsConfigRoute } from './api/console/es_config'; import { registerProxyRoute } from './api/console/proxy'; import { registerSpecDefinitionsRoute } from './api/console/spec_definitions'; import { registerAutocompleteEntitiesRoute } from './api/console/autocomplete_entities'; +import { registerConvertRequestRoute } from './api/console/convert_request_to_language'; export interface ProxyDependencies { readLegacyESConfig: () => Promise; @@ -44,4 +45,5 @@ export const registerRoutes = (dependencies: RouteDependencies) => { registerProxyRoute(dependencies); registerSpecDefinitionsRoute(dependencies); registerAutocompleteEntitiesRoute(dependencies); + registerConvertRequestRoute(dependencies); }; diff --git a/test/functional/apps/console/monaco/_context_menu.ts b/test/functional/apps/console/monaco/_context_menu.ts index f74e9d28142427..0fbcb123937db5 100644 --- a/test/functional/apps/console/monaco/_context_menu.ts +++ b/test/functional/apps/console/monaco/_context_menu.ts @@ -13,6 +13,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const log = getService('log'); const retry = getService('retry'); const PageObjects = getPageObjects(['common', 'console']); + const testSubjects = getService('testSubjects'); const browser = getService('browser'); const toasts = getService('toasts'); @@ -31,36 +32,89 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(PageObjects.console.isContextMenuOpen()).to.be.eql(true); }); - it('should have options to copy as curl, open documentation, and auto indent', async () => { + it('should have options to copy as, open documentation, and auto indent', async () => { await PageObjects.console.clickContextMenu(); expect(PageObjects.console.isContextMenuOpen()).to.be.eql(true); - expect(PageObjects.console.isCopyAsCurlButtonVisible()).to.be.eql(true); + expect(PageObjects.console.isCopyAsButtonVisible()).to.be.eql(true); expect(PageObjects.console.isOpenDocumentationButtonVisible()).to.be.eql(true); expect(PageObjects.console.isAutoIndentButtonVisible()).to.be.eql(true); }); - it('should copy as curl and show toast when copy as curl button is clicked', async () => { - await PageObjects.console.clickContextMenu(); - await PageObjects.console.clickCopyAsCurlButton(); + describe('Copy as', () => { + beforeEach(async () => { + await PageObjects.common.navigateToApp('console'); + await PageObjects.console.closeHelpIfExists(); + await PageObjects.console.monaco.clearEditorText(); + await PageObjects.console.monaco.enterText('GET _search'); + }); + + it('by default it should copy as curl and show toast when copy as button is clicked', async () => { + await PageObjects.console.clickContextMenu(); + await PageObjects.console.clickCopyAsButton(); + + const resultToast = await toasts.getElementByIndex(1); + const toastText = await resultToast.getVisibleText(); + + if (toastText.includes('Write permission denied')) { + log.debug('Write permission denied, skipping test'); + return; + } + + expect(toastText).to.be('Request copied to clipboard as curl'); + + const canReadClipboard = await browser.checkBrowserPermission('clipboard-read'); + if (canReadClipboard) { + const clipboardText = await browser.getClipboardValue(); + expect(clipboardText).to.contain('curl -X GET'); + } + }); + + it.skip('allows to change default language', async () => { + await PageObjects.console.clickContextMenu(); + + // By default should be copy as cURL + let copyAsButton = await testSubjects.find('consoleMenuCopyAsButton'); + let buttonLabel = await copyAsButton.getVisibleText(); + expect(buttonLabel).to.contain('curl'); + + // Select python as default language + await PageObjects.console.changeDefaultLanguage('python'); + // Wait until async operation is done + await PageObjects.common.sleep(2000); + // Open the context menu once again + await PageObjects.console.clickContextMenu(); + + // By default should be copy as cURL + copyAsButton = await testSubjects.find('consoleMenuCopyAsButton'); + buttonLabel = await copyAsButton.getVisibleText(); + expect(buttonLabel).to.contain('Python'); + }); + + it('allows to select a different language to copy as and should copy it right away to clipboard', async () => { + await PageObjects.console.clickContextMenu(); + await PageObjects.console.changeLanguageAndCopy('javascript'); - const resultToast = await toasts.getElementByIndex(1); - const toastText = await resultToast.getVisibleText(); + const resultToast = await toasts.getElementByIndex(1); + const toastText = await resultToast.getVisibleText(); - if (toastText.includes('Write permission denied')) { - log.debug('Write permission denied, skipping test'); - return; - } + if (toastText.includes('Write permission denied')) { + log.debug('Write permission denied, skipping test'); + return; + } - expect(toastText).to.be('Request copied as cURL'); + expect(toastText).to.be('Request copied to clipboard as JavaScript'); - const canReadClipboard = await browser.checkBrowserPermission('clipboard-read'); - if (canReadClipboard) { - const clipboardText = await browser.getClipboardValue(); - expect(clipboardText).to.contain('curl -XGET'); - } + const canReadClipboard = await browser.checkBrowserPermission('clipboard-read'); + if (canReadClipboard) { + const clipboardText = await browser.getClipboardValue(); + expect(clipboardText).to.contain('require("@elastic/elasticsearch")'); + } + }); }); it('should open documentation when open documentation button is clicked', async () => { + await PageObjects.console.monaco.clearEditorText(); + await PageObjects.console.monaco.enterText('GET _search'); await PageObjects.console.clickContextMenu(); await PageObjects.console.clickOpenDocumentationButton(); diff --git a/test/functional/page_objects/console_page.ts b/test/functional/page_objects/console_page.ts index 942f9f998afb98..fcc971343cc420 100644 --- a/test/functional/page_objects/console_page.ts +++ b/test/functional/page_objects/console_page.ts @@ -638,11 +638,44 @@ export class ConsolePageObject extends FtrService { return await this.testSubjects.exists('a11y-overlay'); } + public async isCopyAsButtonVisible() { + return await this.testSubjects.exists('consoleMenuCopyAsButton'); + } + public async clickCopyAsCurlButton() { const button = await this.testSubjects.find('consoleMenuCopyAsCurl'); await button.click(); } + public async changeLanguageAndCopy(language: string) { + const openModalButton = await this.testSubjects.find('changeLanguageButton'); + await openModalButton.click(); + + const changeLangButton = await this.testSubjects.find(`languageOption-${language}`); + await changeLangButton.click(); + + const submitButton = await this.testSubjects.find('copyAsLanguageSubmit'); + await submitButton.click(); + } + + public async changeDefaultLanguage(language: string) { + const openModalButton = await this.testSubjects.find('changeLanguageButton'); + await openModalButton.click(); + + const changeDefaultLangButton = await this.testSubjects.find( + `changeDefaultLanguageTo-${language}` + ); + await changeDefaultLangButton.click(); + + const submitButton = await this.testSubjects.find('copyAsLanguageSubmit'); + await submitButton.click(); + } + + public async clickCopyAsButton() { + const button = await this.testSubjects.find('consoleMenuCopyAsButton'); + await button.click(); + } + public async clickOpenDocumentationButton() { const button = await this.testSubjects.find('consoleMenuOpenDocs'); await button.click(); diff --git a/yarn.lock b/yarn.lock index 885cb260928f77..0ceb5fdc498c21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1857,6 +1857,17 @@ "@elastic/react-search-ui-views" "1.20.2" "@elastic/search-ui" "1.20.2" +"@elastic/request-converter@^8.15.3": + version "8.15.3" + resolved "https://registry.yarnpkg.com/@elastic/request-converter/-/request-converter-8.15.3.tgz#0d2753e689a8e5c1f1167a883f8beb863b31b3f0" + integrity sha512-sUhVQReQ1VPn4qRlsYyjDOp340LZxYmaQCcu1HgKSYr1NR7pdSUhbSxmEbl/sH4HXh7Avq4bRf14vBvtHi19kA== + dependencies: + child-process-promise "^2.2.1" + commander "^12.1.0" + find-my-way-ts "^0.1.2" + handlebars "^4.7.8" + prettier "^2.8.8" + "@elastic/request-crypto@2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@elastic/request-crypto/-/request-crypto-2.0.2.tgz#4e5216783be82371012857a76da75195828d3f45" @@ -14104,6 +14115,15 @@ cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" +child-process-promise@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074" + integrity sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog== + dependencies: + cross-spawn "^4.0.2" + node-version "^1.0.0" + promise-polyfill "^6.0.1" + chokidar@3.5.3, chokidar@^2.1.2, chokidar@^2.1.8, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -14564,6 +14584,11 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -14957,6 +14982,14 @@ cronstrue@^1.51.0: resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.51.0.tgz#7a63153d61d940344049037628da38a60784c8e2" integrity sha512-fSRAz/MV0TRjeNZKAsovmH/MSsly7+8np4XsfsrjOOz7sjxLrE9SmedRYAs3nPAtLLC5UsMpvenjXYRz463bMA== +cross-spawn@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA== + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -18148,6 +18181,11 @@ find-cypress-specs@^1.41.4: spec-change "^1.10.0" ts-node "^10.9.1" +find-my-way-ts@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/find-my-way-ts/-/find-my-way-ts-0.1.5.tgz#9de9494f19e0319d4f6366bb91d6bf7952af7874" + integrity sha512-4GOTMrpGQVzsCH2ruUn2vmwzV/02zF4q+ybhCIrw/Rkt3L8KWcycdC6aJMctJzwN4fXD4SD5F/4B9Sksh5rE0A== + find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" @@ -19188,7 +19226,7 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== -handlebars@4.7.8, handlebars@^4.7.6, handlebars@^4.7.7: +handlebars@4.7.8, handlebars@^4.7.6, handlebars@^4.7.7, handlebars@^4.7.8: version "4.7.8" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== @@ -22586,7 +22624,7 @@ lru-cache@10.2.0, "lru-cache@^9.1.1 || ^10.0.0": resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== -lru-cache@^4.0.0, lru-cache@^4.1.5: +lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -24153,6 +24191,11 @@ node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: dependencies: "@babel/parser" "^7.21.8" +node-version@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" + integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== + nodemailer@^6.9.14: version "6.9.14" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.14.tgz#845fda981f9fd5ac264f4446af908a7c78027f75" @@ -26019,6 +26062,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" + integrity sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ== + promise-polyfill@^8.1.3: version "8.1.3" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" From 66a10805df2e1e2ba96f00ac9ffa75c6d205ae4f Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Thu, 15 Aug 2024 16:54:23 +0200 Subject: [PATCH 90/92] [Observability Onboarding] Link to right APM onboarding from the panel (#190598) The APM and OpenTelemetry tiles on the "Add data" page always link to the`/onboarding` page. However, on stateful, it should be `/tutorial` instead (this is also what the "Add data" button in the top right of the APM page links to). This PR fixes the links, so the tiles link to the new streamlined onboarding flow for serverless and to the old one for stateful. On the new flow the "OpenTelemetry" tab is automatically selected. In this fix, this isn't done for the old onboarding flow, as this would require further changes. These can be done as a follow-up separate to this PR to get the fix in place for 8.15.1 --- .../use_custom_cards_for_category.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/onboarding_flow_form/use_custom_cards_for_category.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/application/onboarding_flow_form/use_custom_cards_for_category.ts index 39f3de40450e73..2a36869574ebfe 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/onboarding_flow_form/use_custom_cards_for_category.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/onboarding_flow_form/use_custom_cards_for_category.ts @@ -23,7 +23,11 @@ export function useCustomCardsForCategory( const history = useHistory(); const location = useLocation(); const { - services: { application, http }, + services: { + application, + http, + context: { isServerless }, + }, } = useKibana(); const getUrlForApp = application?.getUrlForApp; @@ -32,6 +36,9 @@ export function useCustomCardsForCategory( const { href: otelLogsUrl } = reactRouterNavigate(history, `/otel-logs/${location.search}`); const { href: kubernetesUrl } = reactRouterNavigate(history, `/kubernetes/${location.search}`); + const apmUrl = `${getUrlForApp?.('apm')}/${isServerless ? 'onboarding' : 'tutorial'}`; + const otelApmUrl = isServerless ? `${apmUrl}?agent=openTelemetry` : apmUrl; + const otelCard: VirtualCard = { id: 'otel-logs', type: 'virtual', @@ -68,7 +75,7 @@ export function useCustomCardsForCategory( src: 'apmApp', }, ], - url: `${getUrlForApp?.('apm')}/onboarding` ?? '', + url: apmUrl, version: '', integration: '', }, @@ -85,7 +92,7 @@ export function useCustomCardsForCategory( src: http?.staticAssets.getPluginAssetHref('opentelemetry.svg') ?? '', }, ], - url: `${getUrlForApp?.('apm')}/onboarding?agent=openTelemetry` ?? '', + url: otelApmUrl, version: '', integration: '', }, From ae6c1f62130b2fc7085116a78cc4f401a3700a80 Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Thu, 15 Aug 2024 17:00:31 +0200 Subject: [PATCH 91/92] [eem] update builtin definitions (#188351) ## Summary Update built in definitions on plugin start. The update overwrites index templates and ingest pipelines with the latest versions but has to delete the transforms since we can only update a subset of settings in the [update api](https://www.elastic.co/guide/en/elasticsearch/reference/current/update-transform.html) which does not include the aggregations. ## Testing ### api tests Since the upgrade logic happens in plugin startup method we cannot directly trigger it from api tests without some tweaks. I've added a [fixture plugin](https://github.com/elastic/kibana/blob/a87ae8b2109bbbbe24e99638782fd73b165289f2/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/plugin.ts) that is launched in the entity manager test server, this plugin creates a test route exposing the upgrade api which can then be called in api tests. ### manual - install builtin definitions `PUT kbn:/internal/api/entities/managed/enablement` - bump builtin [service definition](https://github.com/elastic/kibana/blob/main/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/built_in/services.ts#L23) version - restart kibana server - logs should output `[INFO ][plugins.entityManager] Updating built-in entity definition [builtin_services] from v0.1.0 to v` - `GET kbn:/internal/api/entities/definition` should output the new definition - verify latest version of definition components are installed --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + package.json | 1 + .../check_registered_types.test.ts | 2 +- tsconfig.base.json | 2 + .../src/schema/entity_definition.ts | 9 + .../entity_manager/common/errors.ts | 1 + .../entity_manager/common/helpers.test.ts | 22 - .../entity_manager/common/helpers.ts | 19 - .../entity_manager/kibana.jsonc | 2 +- .../lib/entities/delete_entity_definition.ts | 23 +- .../lib/entities/find_entity_definition.ts | 29 +- .../fixtures/builtin_entity_definition.ts | 24 ++ .../helpers/fixtures/entity_definition.ts | 2 +- .../lib/entities/helpers/fixtures/index.ts | 1 + .../entities/helpers/generate_component_id.ts | 8 + .../generate_history_processors.test.ts.snap | 2 +- .../generate_latest_processors.test.ts.snap | 2 +- .../install_entity_definition.test.ts | 377 ++++++++++++++---- .../lib/entities/install_entity_definition.ts | 323 +++++++++------ .../lib/entities/save_entity_definition.ts | 37 +- .../entities_history_template.test.ts.snap | 2 +- .../entities_latest_template.test.ts.snap | 2 +- .../entities_history_template.test.ts | 6 +- .../templates/entities_history_template.ts | 6 +- .../entities_latest_template.test.ts | 6 +- .../templates/entities_latest_template.ts | 6 +- .../generate_history_transform.test.ts.snap | 2 +- .../generate_latest_transform.test.ts.snap | 2 +- .../transform/validate_transform_ids.ts | 9 +- .../server/lib/entities/types.ts | 4 + .../entities/uninstall_entity_definition.ts | 37 +- .../lib/entities/upgrade_entity_definition.ts | 53 +++ .../server/lib/manage_index_templates.ts | 47 ++- .../entity_manager/server/plugin.ts | 47 +-- .../server/routes/enablement/check.ts | 20 +- .../server/routes/enablement/disable.ts | 1 + .../server/routes/enablement/enable.ts | 16 +- .../server/saved_objects/entity_definition.ts | 15 + .../entity_manager/server/types.ts | 2 + .../entity_manager/tsconfig.json | 1 + .../entity_manager/builtin_definitions.ts | 192 +++++++++ .../apis/entity_manager/config.ts | 9 + .../apis/entity_manager/enablement.ts | 111 ------ .../fixture_plugin/kibana.jsonc | 15 + .../fixture_plugin/package.json | 13 + .../fixture_plugin/server/index.ts | 13 + .../fixture_plugin/server/plugin.ts | 74 ++++ .../fixture_plugin/tsconfig.json | 22 + .../apis/entity_manager/helpers/request.ts | 12 + .../apis/entity_manager/index.ts | 2 +- yarn.lock | 4 + 51 files changed, 1160 insertions(+), 478 deletions(-) delete mode 100644 x-pack/plugins/observability_solution/entity_manager/common/helpers.test.ts delete mode 100644 x-pack/plugins/observability_solution/entity_manager/common/helpers.ts create mode 100644 x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts create mode 100644 x-pack/plugins/observability_solution/entity_manager/server/lib/entities/upgrade_entity_definition.ts create mode 100644 x-pack/test/api_integration/apis/entity_manager/builtin_definitions.ts delete mode 100644 x-pack/test/api_integration/apis/entity_manager/enablement.ts create mode 100644 x-pack/test/api_integration/apis/entity_manager/fixture_plugin/kibana.jsonc create mode 100644 x-pack/test/api_integration/apis/entity_manager/fixture_plugin/package.json create mode 100644 x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/index.ts create mode 100644 x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/plugin.ts create mode 100644 x-pack/test/api_integration/apis/entity_manager/fixture_plugin/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 37941842c0fca0..388254c88f7ae6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -395,6 +395,7 @@ x-pack/plugins/encrypted_saved_objects @elastic/kibana-security x-pack/plugins/enterprise_search @elastic/search-kibana x-pack/plugins/observability_solution/entities_data_access @elastic/obs-entities x-pack/packages/kbn-entities-schema @elastic/obs-entities +x-pack/test/api_integration/apis/entity_manager/fixture_plugin @elastic/obs-entities x-pack/plugins/observability_solution/entity_manager @elastic/obs-entities examples/error_boundary @elastic/appex-sharedux packages/kbn-es @elastic/kibana-operations diff --git a/package.json b/package.json index 9fc403e945eb02..4a6b3d024963ee 100644 --- a/package.json +++ b/package.json @@ -457,6 +457,7 @@ "@kbn/enterprise-search-plugin": "link:x-pack/plugins/enterprise_search", "@kbn/entities-data-access-plugin": "link:x-pack/plugins/observability_solution/entities_data_access", "@kbn/entities-schema": "link:x-pack/packages/kbn-entities-schema", + "@kbn/entity-manager-fixture-plugin": "link:x-pack/test/api_integration/apis/entity_manager/fixture_plugin", "@kbn/entityManager-plugin": "link:x-pack/plugins/observability_solution/entity_manager", "@kbn/error-boundary-example-plugin": "link:examples/error_boundary", "@kbn/es-errors": "link:packages/kbn-es-errors", 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 b965b48762879e..d01051ed5fc780 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 @@ -90,7 +90,7 @@ describe('checking migration metadata changes on all registered SO types', () => "endpoint:unified-user-artifact-manifest": "71c7fcb52c658b21ea2800a6b6a76972ae1c776e", "endpoint:user-artifact-manifest": "1c3533161811a58772e30cdc77bac4631da3ef2b", "enterprise_search_telemetry": "9ac912e1417fc8681e0cd383775382117c9e3d3d", - "entity-definition": "331a2ba0ee9f24936ef049683549c8af7e46f03a", + "entity-definition": "61be3e95966045122b55e181bb39658b1dc9bbe9", "entity-discovery-api-key": "c267a65c69171d1804362155c1378365f5acef88", "epm-packages": "8042d4a1522f6c4e6f5486e791b3ffe3a22f88fd", "epm-packages-assets": "7a3e58efd9a14191d0d1a00b8aaed30a145fd0b1", diff --git a/tsconfig.base.json b/tsconfig.base.json index 3192d741b3b1a3..ebc0883991d5ab 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -784,6 +784,8 @@ "@kbn/entities-data-access-plugin/*": ["x-pack/plugins/observability_solution/entities_data_access/*"], "@kbn/entities-schema": ["x-pack/packages/kbn-entities-schema"], "@kbn/entities-schema/*": ["x-pack/packages/kbn-entities-schema/*"], + "@kbn/entity-manager-fixture-plugin": ["x-pack/test/api_integration/apis/entity_manager/fixture_plugin"], + "@kbn/entity-manager-fixture-plugin/*": ["x-pack/test/api_integration/apis/entity_manager/fixture_plugin/*"], "@kbn/entityManager-plugin": ["x-pack/plugins/observability_solution/entity_manager"], "@kbn/entityManager-plugin/*": ["x-pack/plugins/observability_solution/entity_manager/*"], "@kbn/error-boundary-example-plugin": ["examples/error_boundary"], diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts b/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts index bcb26cf8818dbd..8ff710adc1e629 100644 --- a/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts +++ b/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts @@ -48,6 +48,15 @@ export const entityDefinitionSchema = z.object({ ), }) ), + installStatus: z.optional( + z.union([ + z.literal('installing'), + z.literal('upgrading'), + z.literal('installed'), + z.literal('failed'), + ]) + ), + installStartedAt: z.optional(z.string()), }); export type EntityDefinition = z.infer; diff --git a/x-pack/plugins/observability_solution/entity_manager/common/errors.ts b/x-pack/plugins/observability_solution/entity_manager/common/errors.ts index 0c141b71b6b7e4..9ef591dab89bc1 100644 --- a/x-pack/plugins/observability_solution/entity_manager/common/errors.ts +++ b/x-pack/plugins/observability_solution/entity_manager/common/errors.ts @@ -10,3 +10,4 @@ export const ERROR_API_KEY_NOT_VALID = 'api_key_not_valid'; export const ERROR_API_KEY_SERVICE_DISABLED = 'api_key_service_disabled'; export const ERROR_PARTIAL_BUILTIN_INSTALLATION = 'partial_builtin_installation'; export const ERROR_DEFINITION_STOPPED = 'error_definition_stopped'; +export const ERROR_BUILTIN_UPGRADE_REQUIRED = 'builtin_upgrade_required'; diff --git a/x-pack/plugins/observability_solution/entity_manager/common/helpers.test.ts b/x-pack/plugins/observability_solution/entity_manager/common/helpers.test.ts deleted file mode 100644 index 50ce0caeba0a38..00000000000000 --- a/x-pack/plugins/observability_solution/entity_manager/common/helpers.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { getEntityHistoryIndexTemplateV1, getEntityLatestIndexTemplateV1 } from './helpers'; - -describe('helpers', () => { - it('getEntityHistoryIndexTemplateV1 should return the correct value', () => { - const definitionId = 'test'; - const result = getEntityHistoryIndexTemplateV1(definitionId); - expect(result).toEqual('entities_v1_history_test_index_template'); - }); - - it('getEntityLatestIndexTemplateV1 should return the correct value', () => { - const definitionId = 'test'; - const result = getEntityLatestIndexTemplateV1(definitionId); - expect(result).toEqual('entities_v1_latest_test_index_template'); - }); -}); diff --git a/x-pack/plugins/observability_solution/entity_manager/common/helpers.ts b/x-pack/plugins/observability_solution/entity_manager/common/helpers.ts deleted file mode 100644 index f18e8526c0c218..00000000000000 --- a/x-pack/plugins/observability_solution/entity_manager/common/helpers.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 { - ENTITY_BASE_PREFIX, - ENTITY_SCHEMA_VERSION_V1, - ENTITY_HISTORY, - ENTITY_LATEST, -} from '@kbn/entities-schema'; - -export const getEntityHistoryIndexTemplateV1 = (definitionId: string) => - `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_${ENTITY_HISTORY}_${definitionId}_index_template` as const; - -export const getEntityLatestIndexTemplateV1 = (definitionId: string) => - `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_${ENTITY_LATEST}_${definitionId}_index_template` as const; diff --git a/x-pack/plugins/observability_solution/entity_manager/kibana.jsonc b/x-pack/plugins/observability_solution/entity_manager/kibana.jsonc index 0b292b322c74b3..efd6d3a445b3f6 100644 --- a/x-pack/plugins/observability_solution/entity_manager/kibana.jsonc +++ b/x-pack/plugins/observability_solution/entity_manager/kibana.jsonc @@ -6,7 +6,7 @@ "plugin": { "id": "entityManager", "configPath": ["xpack", "entityManager"], - "requiredPlugins": ["security", "encryptedSavedObjects"], + "requiredPlugins": ["security", "encryptedSavedObjects", "licensing"], "browser": true, "server": true, "requiredBundles": [] diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_entity_definition.ts index ff47af01f7ed23..93f1f045b16d61 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/delete_entity_definition.ts @@ -5,27 +5,22 @@ * 2.0. */ -import { Logger, SavedObjectsClientContract } from '@kbn/core/server'; +import { SavedObjectsClientContract, SavedObjectsErrorHelpers } from '@kbn/core/server'; import { EntityDefinition } from '@kbn/entities-schema'; import { SO_ENTITY_DEFINITION_TYPE } from '../../saved_objects'; import { EntityDefinitionNotFound } from './errors/entity_not_found'; export async function deleteEntityDefinition( soClient: SavedObjectsClientContract, - definition: EntityDefinition, - logger: Logger + definition: EntityDefinition ) { - const response = await soClient.find({ - type: SO_ENTITY_DEFINITION_TYPE, - page: 1, - perPage: 1, - filter: `${SO_ENTITY_DEFINITION_TYPE}.attributes.id:(${definition.id})`, - }); + try { + await soClient.delete(SO_ENTITY_DEFINITION_TYPE, definition.id); + } catch (err) { + if (SavedObjectsErrorHelpers.isNotFoundError(err)) { + throw new EntityDefinitionNotFound(`Entity definition with [${definition.id}] not found.`); + } - if (response.total === 0) { - logger.error(`Unable to delete entity definition [${definition.id}] because it doesn't exist.`); - throw new EntityDefinitionNotFound(`Entity definition with [${definition.id}] not found.`); + throw err; } - - await soClient.delete(SO_ENTITY_DEFINITION_TYPE, response.saved_objects[0].id); } diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/find_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/find_entity_definition.ts index ccc28db103153c..d683c39a44890f 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/find_entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/find_entity_definition.ts @@ -11,12 +11,16 @@ import { EntityDefinition } from '@kbn/entities-schema'; import { SO_ENTITY_DEFINITION_TYPE } from '../../saved_objects'; import { generateHistoryTransformId, + generateHistoryBackfillTransformId, generateHistoryIngestPipelineId, + generateHistoryIndexTemplateId, generateLatestTransformId, generateLatestIngestPipelineId, + generateLatestIndexTemplateId, } from './helpers/generate_component_id'; import { BUILT_IN_ID_PREFIX } from './built_in'; import { EntityDefinitionWithState } from './types'; +import { isBackfillEnabled } from './helpers/is_backfill_enabled'; export async function findEntityDefinitions({ soClient, @@ -60,19 +64,32 @@ async function getEntityDefinitionState( ) { const historyIngestPipelineId = generateHistoryIngestPipelineId(definition); const latestIngestPipelineId = generateLatestIngestPipelineId(definition); - const [ingestPipelines, transforms] = await Promise.all([ - esClient.ingest.getPipeline({ - id: `${historyIngestPipelineId},${latestIngestPipelineId}`, + const transformIds = [ + generateHistoryTransformId(definition), + generateLatestTransformId(definition), + ...(isBackfillEnabled(definition) ? [generateHistoryBackfillTransformId(definition)] : []), + ]; + const [ingestPipelines, indexTemplatesInstalled, transforms] = await Promise.all([ + esClient.ingest.getPipeline( + { + id: `${historyIngestPipelineId},${latestIngestPipelineId}`, + }, + { ignore: [404] } + ), + esClient.indices.existsIndexTemplate({ + name: `${ + (generateLatestIndexTemplateId(definition), generateHistoryIndexTemplateId(definition)) + }`, }), esClient.transform.getTransformStats({ - transform_id: [generateHistoryTransformId(definition), generateLatestTransformId(definition)], + transform_id: transformIds, }), ]); const ingestPipelinesInstalled = !!( ingestPipelines[historyIngestPipelineId] && ingestPipelines[latestIngestPipelineId] ); - const transformsInstalled = transforms.count === 2; + const transformsInstalled = transforms.count === transformIds.length; const transformsRunning = transformsInstalled && transforms.transforms.every( @@ -80,7 +97,7 @@ async function getEntityDefinitionState( ); return { - installed: ingestPipelinesInstalled && transformsInstalled, + installed: ingestPipelinesInstalled && transformsInstalled && indexTemplatesInstalled, running: transformsRunning, }; } diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts new file mode 100644 index 00000000000000..5092e2caa5d78c --- /dev/null +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { entityDefinitionSchema } from '@kbn/entities-schema'; +export const builtInEntityDefinition = entityDefinitionSchema.parse({ + id: 'builtin_mock_entity_definition', + version: '1.0.0', + name: 'Mock builtin definition', + type: 'service', + indexPatterns: ['kbn-data-forge-fake_stack.*'], + managed: true, + history: { + timestampField: '@timestamp', + interval: '1m', + }, + identityFields: ['log.logger', { field: 'event.category', optional: true }], + displayNameTemplate: '{{log.logger}}{{#event.category}}:{{.}}{{/event.category}}', + metadata: ['tags', 'host.name', 'host.os.name', { source: '_index', destination: 'sourceIndex' }], + metrics: [], +}); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts index 2d6bceda8b077e..727f73a044c4f9 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts @@ -8,7 +8,7 @@ import { entityDefinitionSchema } from '@kbn/entities-schema'; export const rawEntityDefinition = { id: 'admin-console-services', - version: '999.999.999', + version: '1.0.0', name: 'Services for Admin Console', type: 'service', indexPatterns: ['kbn-data-forge-fake_stack.*'], diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/index.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/index.ts index eae0e8e8afc9ac..c24dcee1f8cf71 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/index.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/fixtures/index.ts @@ -7,3 +7,4 @@ export { entityDefinition } from './entity_definition'; export { entityDefinitionWithBackfill } from './entity_definition_with_backfill'; +export { builtInEntityDefinition } from './builtin_entity_definition'; diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/generate_component_id.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/generate_component_id.ts index 2aa3fb992c9ca0..3afb6034e6a171 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/generate_component_id.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/helpers/generate_component_id.ts @@ -6,6 +6,7 @@ */ import { + ENTITY_BASE_PREFIX, ENTITY_HISTORY, ENTITY_LATEST, ENTITY_SCHEMA_VERSION_V1, @@ -38,6 +39,10 @@ export function generateHistoryIndexName(definition: EntityDefinition) { }); } +export function generateHistoryIndexTemplateId(definition: EntityDefinition) { + return `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_${ENTITY_HISTORY}_${definition.id}_index_template` as const; +} + // Latest function generateLatestId(definition: EntityDefinition) { return `${ENTITY_LATEST_PREFIX_V1}-${definition.id}` as const; @@ -53,3 +58,6 @@ export function generateLatestIndexName(definition: EntityDefinition) { definitionId: definition.id, }); } + +export const generateLatestIndexTemplateId = (definition: EntityDefinition) => + `${ENTITY_BASE_PREFIX}_${ENTITY_SCHEMA_VERSION_V1}_${ENTITY_LATEST}_${definition.id}_index_template` as const; diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_history_processors.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_history_processors.test.ts.snap index 9e62633a0a7d6c..a013388882a3ff 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_history_processors.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_history_processors.test.ts.snap @@ -23,7 +23,7 @@ Array [ Object { "set": Object { "field": "entity.definitionVersion", - "value": "999.999.999", + "value": "1.0.0", }, }, Object { diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap index c5fd8986c35db0..f866e34fbb69b9 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap @@ -23,7 +23,7 @@ Array [ Object { "set": Object { "field": "entity.definitionVersion", - "value": "999.999.999", + "value": "1.0.0", }, }, Object { diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts index 2a5bc3b01f938d..e09496762d921e 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.test.ts @@ -5,23 +5,32 @@ * 2.0. */ +import semver from 'semver'; +import moment from 'moment'; import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; import { savedObjectsClientMock } from '@kbn/core-saved-objects-api-server-mocks'; import { loggerMock } from '@kbn/logging-mocks'; import { EntityDefinition } from '@kbn/entities-schema'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { installBuiltInEntityDefinitions } from './install_entity_definition'; -import { builtInServicesFromLogsEntityDefinition } from './built_in/services'; +import { + installBuiltInEntityDefinitions, + installEntityDefinition, +} from './install_entity_definition'; import { SO_ENTITY_DEFINITION_TYPE } from '../../saved_objects'; import { + generateHistoryIndexTemplateId, generateHistoryIngestPipelineId, generateHistoryTransformId, + generateLatestIndexTemplateId, generateLatestIngestPipelineId, generateLatestTransformId, } from './helpers/generate_component_id'; import { generateHistoryTransform } from './transform/generate_history_transform'; import { generateLatestTransform } from './transform/generate_latest_transform'; +import { entityDefinition as mockEntityDefinition } from './helpers/fixtures/entity_definition'; +import { EntityDefinitionIdInvalid } from './errors/entity_definition_id_invalid'; +import { EntityIdConflict } from './errors/entity_id_conflict_error'; const assertHasCreatedDefinition = ( definition: EntityDefinition, @@ -29,10 +38,22 @@ const assertHasCreatedDefinition = ( esClient: ElasticsearchClient ) => { expect(soClient.create).toBeCalledTimes(1); - expect(soClient.create).toBeCalledWith(SO_ENTITY_DEFINITION_TYPE, definition, { - id: definition.id, - overwrite: true, - managed: definition.managed, + expect(soClient.create).toBeCalledWith( + SO_ENTITY_DEFINITION_TYPE, + { + ...definition, + installStatus: 'installing', + installStartedAt: expect.any(String), + }, + { + id: definition.id, + overwrite: true, + managed: definition.managed, + } + ); + expect(soClient.update).toBeCalledTimes(1); + expect(soClient.update).toBeCalledWith(SO_ENTITY_DEFINITION_TYPE, definition.id, { + installStatus: 'installed', }); expect(esClient.indices.putIndexTemplate).toBeCalledTimes(2); @@ -49,50 +70,118 @@ const assertHasCreatedDefinition = ( expect(esClient.ingest.putPipeline).toBeCalledTimes(2); expect(esClient.ingest.putPipeline).toBeCalledWith({ - id: generateHistoryIngestPipelineId(builtInServicesFromLogsEntityDefinition), + id: generateHistoryIngestPipelineId(definition), processors: expect.anything(), _meta: { - definitionVersion: '1.0.0', - managed: true, + definitionVersion: definition.version, + managed: definition.managed, }, }); expect(esClient.ingest.putPipeline).toBeCalledWith({ - id: generateLatestIngestPipelineId(builtInServicesFromLogsEntityDefinition), + id: generateLatestIngestPipelineId(definition), processors: expect.anything(), _meta: { - definitionVersion: '1.0.0', - managed: true, + definitionVersion: definition.version, + managed: definition.managed, }, }); expect(esClient.transform.putTransform).toBeCalledTimes(2); - expect(esClient.transform.putTransform).toBeCalledWith( - generateHistoryTransform(builtInServicesFromLogsEntityDefinition) + expect(esClient.transform.putTransform).toBeCalledWith(generateHistoryTransform(definition)); + expect(esClient.transform.putTransform).toBeCalledWith(generateLatestTransform(definition)); +}; + +const assertHasUpgradedDefinition = ( + definition: EntityDefinition, + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +) => { + expect(soClient.update).toBeCalledTimes(2); + expect(soClient.update).toBeCalledWith(SO_ENTITY_DEFINITION_TYPE, definition.id, { + ...definition, + installStatus: 'upgrading', + installStartedAt: expect.any(String), + }); + expect(soClient.update).toBeCalledWith(SO_ENTITY_DEFINITION_TYPE, definition.id, { + installStatus: 'installed', + }); + + expect(esClient.indices.putIndexTemplate).toBeCalledTimes(2); + expect(esClient.indices.putIndexTemplate).toBeCalledWith( + expect.objectContaining({ + name: `entities_v1_history_${definition.id}_index_template`, + }) ); - expect(esClient.transform.putTransform).toBeCalledWith( - generateLatestTransform(builtInServicesFromLogsEntityDefinition) + expect(esClient.indices.putIndexTemplate).toBeCalledWith( + expect.objectContaining({ + name: `entities_v1_latest_${definition.id}_index_template`, + }) ); + + expect(esClient.ingest.putPipeline).toBeCalledTimes(2); + expect(esClient.ingest.putPipeline).toBeCalledWith({ + id: generateHistoryIngestPipelineId(definition), + processors: expect.anything(), + _meta: { + definitionVersion: definition.version, + managed: definition.managed, + }, + }); + expect(esClient.ingest.putPipeline).toBeCalledWith({ + id: generateLatestIngestPipelineId(definition), + processors: expect.anything(), + _meta: { + definitionVersion: definition.version, + managed: definition.managed, + }, + }); + + expect(esClient.transform.putTransform).toBeCalledTimes(2); + expect(esClient.transform.putTransform).toBeCalledWith(generateHistoryTransform(definition)); + expect(esClient.transform.putTransform).toBeCalledWith(generateLatestTransform(definition)); }; -const assertHasStartedTransform = (definition: EntityDefinition, esClient: ElasticsearchClient) => { - expect(esClient.transform.startTransform).toBeCalledTimes(2); - expect(esClient.transform.startTransform).toBeCalledWith( +const assertHasDeletedDefinition = ( + definition: EntityDefinition, + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +) => { + assertHasDeletedTransforms(definition, esClient); + + expect(esClient.ingest.deletePipeline).toBeCalledTimes(2); + expect(esClient.ingest.deletePipeline).toBeCalledWith( { - transform_id: generateHistoryTransformId(builtInServicesFromLogsEntityDefinition), + id: generateHistoryIngestPipelineId(definition), }, - expect.anything() + { ignore: [404] } ); - expect(esClient.transform.startTransform).toBeCalledWith( + expect(esClient.ingest.deletePipeline).toBeCalledWith( { - transform_id: generateLatestTransformId(builtInServicesFromLogsEntityDefinition), + id: generateLatestIngestPipelineId(definition), }, - expect.anything() + { ignore: [404] } ); + + expect(esClient.indices.deleteIndexTemplate).toBeCalledTimes(2); + expect(esClient.indices.deleteIndexTemplate).toBeCalledWith( + { + name: generateHistoryIndexTemplateId(definition), + }, + { ignore: [404] } + ); + expect(esClient.indices.deleteIndexTemplate).toBeCalledWith( + { + name: generateLatestIndexTemplateId(definition), + }, + { ignore: [404] } + ); + + expect(soClient.delete).toBeCalledTimes(1); + expect(soClient.delete).toBeCalledWith(SO_ENTITY_DEFINITION_TYPE, definition.id); }; -const assertHasUninstalledDefinition = ( +const assertHasDeletedTransforms = ( definition: EntityDefinition, - soClient: SavedObjectsClientContract, esClient: ElasticsearchClient ) => { expect(esClient.transform.stopTransform).toBeCalledTimes(2); @@ -122,28 +211,92 @@ const assertHasUninstalledDefinition = ( ); expect(esClient.transform.deleteTransform).toBeCalledTimes(2); - expect(esClient.ingest.deletePipeline).toBeCalledTimes(2); - expect(soClient.delete).toBeCalledTimes(1); - - expect(esClient.indices.deleteIndexTemplate).toBeCalledTimes(2); - expect(esClient.indices.deleteIndexTemplate).toBeCalledWith( - { - name: `entities_v1_history_${definition.id}_index_template`, - }, - { ignore: [404] } - ); - expect(esClient.indices.deleteIndexTemplate).toBeCalledWith( - { - name: `entities_v1_latest_${definition.id}_index_template`, - }, - { ignore: [404] } - ); }; describe('install_entity_definition', () => { + describe('installEntityDefinition', () => { + it('should reject invalid ids', async () => { + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + const soClient = savedObjectsClientMock.create(); + + await expect( + installEntityDefinition({ + esClient, + soClient, + definition: { id: 'a'.repeat(40) } as EntityDefinition, + logger: loggerMock.create(), + }) + ).rejects.toThrow(EntityDefinitionIdInvalid); + }); + + it('should reject if id already exists', async () => { + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + const soClient = savedObjectsClientMock.create(); + soClient.find.mockResolvedValueOnce({ + saved_objects: [ + { + id: mockEntityDefinition.id, + type: 'entity-definition', + references: [], + score: 0, + attributes: { + ...mockEntityDefinition, + installStatus: 'installed', + }, + }, + ], + total: 1, + page: 1, + per_page: 10, + }); + + await expect( + installEntityDefinition({ + esClient, + soClient, + definition: mockEntityDefinition, + logger: loggerMock.create(), + }) + ).rejects.toThrow(EntityIdConflict); + }); + + it('should install a definition', async () => { + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + const soClient = savedObjectsClientMock.create(); + soClient.find.mockResolvedValue({ saved_objects: [], total: 0, page: 1, per_page: 10 }); + + await installEntityDefinition({ + esClient, + soClient, + definition: mockEntityDefinition, + logger: loggerMock.create(), + }); + + assertHasCreatedDefinition(mockEntityDefinition, soClient, esClient); + }); + + it('should rollback the installation on failure', async () => { + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + const soClient = savedObjectsClientMock.create(); + soClient.find.mockResolvedValue({ saved_objects: [], total: 0, page: 1, per_page: 10 }); + esClient.transform.putTransform.mockRejectedValue(new Error('cannot install transform')); + + await expect( + installEntityDefinition({ + esClient, + soClient, + definition: mockEntityDefinition, + logger: loggerMock.create(), + }) + ).rejects.toThrow(/cannot install transform/); + + assertHasDeletedDefinition(mockEntityDefinition, soClient, esClient); + }); + }); + describe('installBuiltInEntityDefinitions', () => { - it('should install and start definition when not found', async () => { - const builtInDefinitions = [builtInServicesFromLogsEntityDefinition]; + it('should install definition when not found', async () => { + const builtInDefinitions = [mockEntityDefinition]; const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; const soClient = savedObjectsClientMock.create(); soClient.find.mockResolvedValue({ saved_objects: [], total: 0, page: 1, per_page: 10 }); @@ -151,94 +304,158 @@ describe('install_entity_definition', () => { await installBuiltInEntityDefinitions({ esClient, soClient, - builtInDefinitions, + definitions: builtInDefinitions, logger: loggerMock.create(), }); - assertHasCreatedDefinition(builtInServicesFromLogsEntityDefinition, soClient, esClient); - assertHasStartedTransform(builtInServicesFromLogsEntityDefinition, esClient); + assertHasCreatedDefinition(mockEntityDefinition, soClient, esClient); }); it('should reinstall when partial state found', async () => { - const builtInDefinitions = [builtInServicesFromLogsEntityDefinition]; + const builtInDefinitions = [mockEntityDefinition]; const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; // mock partially installed definition esClient.ingest.getPipeline.mockResolvedValue({}); esClient.transform.getTransformStats.mockResolvedValue({ transforms: [], count: 0 }); const soClient = savedObjectsClientMock.create(); - const definitionSOResult = { + + soClient.find.mockResolvedValueOnce({ saved_objects: [ { - id: builtInServicesFromLogsEntityDefinition.id, + id: mockEntityDefinition.id, type: 'entity-definition', references: [], score: 0, - attributes: builtInServicesFromLogsEntityDefinition, + attributes: { + ...mockEntityDefinition, + installStatus: 'installed', + }, }, ], total: 1, page: 1, per_page: 10, + }); + + await installBuiltInEntityDefinitions({ + esClient, + soClient, + definitions: builtInDefinitions, + logger: loggerMock.create(), + }); + + assertHasDeletedTransforms(mockEntityDefinition, esClient); + assertHasUpgradedDefinition(mockEntityDefinition, soClient, esClient); + }); + + it('should reinstall when outdated version', async () => { + const updatedDefinition = { + ...mockEntityDefinition, + version: semver.inc(mockEntityDefinition.version, 'major') ?? '0.0.0', }; - soClient.find - .mockResolvedValueOnce(definitionSOResult) - .mockResolvedValueOnce(definitionSOResult) - .mockResolvedValueOnce({ - saved_objects: [], - total: 0, - page: 1, - per_page: 10, - }); + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; + const soClient = savedObjectsClientMock.create(); + + soClient.find.mockResolvedValueOnce({ + saved_objects: [ + { + id: mockEntityDefinition.id, + type: 'entity-definition', + references: [], + score: 0, + attributes: { + ...mockEntityDefinition, + installStatus: 'installed', + }, + }, + ], + total: 1, + page: 1, + per_page: 10, + }); await installBuiltInEntityDefinitions({ esClient, soClient, - builtInDefinitions, + definitions: [updatedDefinition], logger: loggerMock.create(), }); - assertHasUninstalledDefinition(builtInServicesFromLogsEntityDefinition, soClient, esClient); - assertHasCreatedDefinition(builtInServicesFromLogsEntityDefinition, soClient, esClient); - assertHasStartedTransform(builtInServicesFromLogsEntityDefinition, esClient); + assertHasDeletedTransforms(mockEntityDefinition, esClient); + assertHasUpgradedDefinition(updatedDefinition, soClient, esClient); }); - it('should start a stopped definition', async () => { - const builtInDefinitions = [builtInServicesFromLogsEntityDefinition]; + it('should reinstall when stale upgrade', async () => { + const updatedDefinition = { + ...mockEntityDefinition, + version: semver.inc(mockEntityDefinition.version, 'major') ?? '0.0.0', + }; const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; - // mock installed but stopped definition - esClient.ingest.getPipeline.mockResolvedValue({ - [generateHistoryIngestPipelineId(builtInServicesFromLogsEntityDefinition)]: {}, - [generateLatestIngestPipelineId(builtInServicesFromLogsEntityDefinition)]: {}, + const soClient = savedObjectsClientMock.create(); + + soClient.find.mockResolvedValueOnce({ + saved_objects: [ + { + id: mockEntityDefinition.id, + type: 'entity-definition', + references: [], + score: 0, + attributes: { + ...mockEntityDefinition, + // upgrading for 1h + installStatus: 'upgrading', + installStartedAt: moment().subtract(1, 'hour').toISOString(), + }, + }, + ], + total: 1, + page: 1, + per_page: 10, }); - esClient.transform.getTransformStats.mockResolvedValue({ - // @ts-expect-error - transforms: [{ state: 'stopped' }, { state: 'stopped' }], - count: 2, + + await installBuiltInEntityDefinitions({ + esClient, + soClient, + definitions: [updatedDefinition], + logger: loggerMock.create(), }); + + assertHasDeletedTransforms(mockEntityDefinition, esClient); + assertHasUpgradedDefinition(updatedDefinition, soClient, esClient); + }); + + it('should reinstall when failed installation', async () => { + const esClient = elasticsearchClientMock.createScopedClusterClient().asCurrentUser; const soClient = savedObjectsClientMock.create(); - soClient.find.mockResolvedValue({ + + soClient.find.mockResolvedValueOnce({ saved_objects: [ { - id: builtInServicesFromLogsEntityDefinition.id, + id: mockEntityDefinition.id, type: 'entity-definition', references: [], score: 0, - attributes: builtInServicesFromLogsEntityDefinition, + attributes: { + ...mockEntityDefinition, + installStatus: 'failed', + installStartedAt: new Date().toISOString(), + }, }, ], total: 1, page: 1, per_page: 10, }); + await installBuiltInEntityDefinitions({ esClient, soClient, - builtInDefinitions, + definitions: [mockEntityDefinition], logger: loggerMock.create(), }); - expect(soClient.create).toHaveBeenCalledTimes(0); - assertHasStartedTransform(builtInServicesFromLogsEntityDefinition, esClient); + assertHasDeletedTransforms(mockEntityDefinition, esClient); + assertHasUpgradedDefinition(mockEntityDefinition, soClient, esClient); }); }); }); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.ts index 83b4671490ff7c..cbebbb804d538a 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/install_entity_definition.ts @@ -5,14 +5,15 @@ * 2.0. */ +import semver from 'semver'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { EntityDefinition } from '@kbn/entities-schema'; import { Logger } from '@kbn/logging'; import { - getEntityHistoryIndexTemplateV1, - getEntityLatestIndexTemplateV1, -} from '../../../common/helpers'; + generateHistoryIndexTemplateId, + generateLatestIndexTemplateId, +} from './helpers/generate_component_id'; import { createAndInstallHistoryIngestPipeline, createAndInstallLatestIngestPipeline, @@ -26,18 +27,23 @@ import { validateDefinitionCanCreateValidTransformIds } from './transform/valida import { deleteEntityDefinition } from './delete_entity_definition'; import { deleteHistoryIngestPipeline, deleteLatestIngestPipeline } from './delete_ingest_pipeline'; import { findEntityDefinitions } from './find_entity_definition'; -import { saveEntityDefinition } from './save_entity_definition'; -import { startTransform } from './start_transform'; +import { + entityDefinitionExists, + saveEntityDefinition, + updateEntityDefinition, +} from './save_entity_definition'; import { stopAndDeleteHistoryBackfillTransform, stopAndDeleteHistoryTransform, stopAndDeleteLatestTransform, } from './stop_and_delete_transform'; -import { uninstallEntityDefinition } from './uninstall_entity_definition'; import { isBackfillEnabled } from './helpers/is_backfill_enabled'; import { deleteTemplate, upsertTemplate } from '../manage_index_templates'; -import { getEntitiesLatestIndexTemplateConfig } from './templates/entities_latest_template'; -import { getEntitiesHistoryIndexTemplateConfig } from './templates/entities_history_template'; +import { generateEntitiesLatestIndexTemplateConfig } from './templates/entities_latest_template'; +import { generateEntitiesHistoryIndexTemplateConfig } from './templates/entities_history_template'; +import { EntityIdConflict } from './errors/entity_id_conflict_error'; +import { EntityDefinitionNotFound } from './errors/entity_not_found'; +import { EntityDefinitionWithState } from './types'; export interface InstallDefinitionParams { esClient: ElasticsearchClient; @@ -46,110 +52,77 @@ export interface InstallDefinitionParams { logger: Logger; } +const throwIfRejected = (values: Array | PromiseRejectedResult>) => { + const rejectedPromise = values.find( + (value) => value.status === 'rejected' + ) as PromiseRejectedResult; + if (rejectedPromise) { + throw new Error(rejectedPromise.reason); + } + return values; +}; + +// install an entity definition from scratch with all its required components +// after verifying that the definition id is valid and available. +// attempt to remove all installed components if the installation fails. export async function installEntityDefinition({ esClient, soClient, definition, logger, }: InstallDefinitionParams): Promise { - const installState = { - ingestPipelines: { - history: false, - latest: false, - }, - transforms: { - history: false, - backfill: false, - latest: false, - }, - definition: false, - indexTemplates: { - history: false, - latest: false, - }, - }; + validateDefinitionCanCreateValidTransformIds(definition); try { - logger.debug(() => `Installing definition ${JSON.stringify(definition)}`); - - validateDefinitionCanCreateValidTransformIds(definition); - - const entityDefinition = await saveEntityDefinition(soClient, definition); - installState.definition = true; + if (await entityDefinitionExists(soClient, definition.id)) { + throw new EntityIdConflict( + `Entity definition with [${definition.id}] already exists.`, + definition + ); + } - // install scoped index template - await upsertTemplate({ - esClient, - logger, - template: getEntitiesHistoryIndexTemplateConfig(definition), - }); - installState.indexTemplates.history = true; - await upsertTemplate({ - esClient, - logger, - template: getEntitiesLatestIndexTemplateConfig(definition), + const entityDefinition = await saveEntityDefinition(soClient, { + ...definition, + installStatus: 'installing', + installStartedAt: new Date().toISOString(), }); - installState.indexTemplates.latest = true; - - // install ingest pipelines - logger.debug(`Installing ingest pipelines for definition ${definition.id}`); - await createAndInstallHistoryIngestPipeline(esClient, entityDefinition, logger); - installState.ingestPipelines.history = true; - await createAndInstallLatestIngestPipeline(esClient, entityDefinition, logger); - installState.ingestPipelines.latest = true; - - // install transforms - logger.debug(`Installing transforms for definition ${definition.id}`); - await createAndInstallHistoryTransform(esClient, entityDefinition, logger); - installState.transforms.history = true; - if (isBackfillEnabled(entityDefinition)) { - await createAndInstallHistoryBackfillTransform(esClient, entityDefinition, logger); - installState.transforms.backfill = true; - } - await createAndInstallLatestTransform(esClient, entityDefinition, logger); - installState.transforms.latest = true; - return entityDefinition; + return await install({ esClient, soClient, logger, definition: entityDefinition }); } catch (e) { logger.error(`Failed to install entity definition ${definition.id}: ${e}`); - // Clean up anything that was successful. - if (installState.definition) { - await deleteEntityDefinition(soClient, definition, logger); - } - if (installState.ingestPipelines.history) { - await deleteHistoryIngestPipeline(esClient, definition, logger); - } - if (installState.ingestPipelines.latest) { - await deleteLatestIngestPipeline(esClient, definition, logger); - } - - if (installState.transforms.history) { - await stopAndDeleteHistoryTransform(esClient, definition, logger); - } + await Promise.all([ + stopAndDeleteHistoryTransform(esClient, definition, logger), + isBackfillEnabled(definition) + ? stopAndDeleteHistoryBackfillTransform(esClient, definition, logger) + : Promise.resolve(), + stopAndDeleteLatestTransform(esClient, definition, logger), + ]); - if (installState.transforms.backfill) { - await stopAndDeleteHistoryBackfillTransform(esClient, definition, logger); - } + await Promise.all([ + deleteHistoryIngestPipeline(esClient, definition, logger), + deleteLatestIngestPipeline(esClient, definition, logger), + ]); - if (installState.transforms.latest) { - await stopAndDeleteLatestTransform(esClient, definition, logger); - } - - if (installState.indexTemplates.history) { - await deleteTemplate({ + await Promise.all([ + deleteTemplate({ esClient, logger, - name: getEntityHistoryIndexTemplateV1(definition.id), - }); - } - if (installState.indexTemplates.latest) { - await deleteTemplate({ + name: generateHistoryIndexTemplateId(definition), + }), + deleteTemplate({ esClient, logger, - name: getEntityLatestIndexTemplateV1(definition.id), - }); - } + name: generateLatestIndexTemplateId(definition), + }), + ]); + + await deleteEntityDefinition(soClient, definition).catch((err) => { + if (err instanceof EntityDefinitionNotFound) { + return; + } + throw err; + }); throw e; } @@ -159,62 +132,158 @@ export async function installBuiltInEntityDefinitions({ esClient, soClient, logger, - builtInDefinitions, - installOnly, + definitions, }: Omit & { - builtInDefinitions: EntityDefinition[]; - installOnly?: boolean; + definitions: EntityDefinition[]; }): Promise { - if (builtInDefinitions.length === 0) return []; + if (definitions.length === 0) return []; - logger.debug(`Starting installation of ${builtInDefinitions.length} built-in definitions`); - const installPromises = builtInDefinitions.map(async (builtInDefinition) => { - const definitions = await findEntityDefinitions({ + logger.debug(`Starting installation of ${definitions.length} built-in definitions`); + const installPromises = definitions.map(async (builtInDefinition) => { + const installedDefinitions = await findEntityDefinitions({ esClient, soClient, id: builtInDefinition.id, }); - if (definitions.length === 0) { - return await installAndStartDefinition({ + if (installedDefinitions.length === 0) { + return await installEntityDefinition({ definition: builtInDefinition, esClient, soClient, logger, - installOnly, }); } - const definition = definitions[0]; - // verify current installation - if (!definition.state.installed) { - logger.debug(`Detected partial installation of definition [${definition.id}], reinstalling`); - await uninstallEntityDefinition({ esClient, soClient, logger, definition }); - return await installAndStartDefinition({ - definition: builtInDefinition, - esClient, - soClient, - logger, - installOnly, - }); + // verify existing installation + const installedDefinition = installedDefinitions[0]; + if (!shouldReinstall(installedDefinition, builtInDefinition)) { + return installedDefinition; } - if (!definition.state.running) { - logger.debug(`Starting transforms for definition [${definition.id}]`); - await startTransform(esClient, definition, logger); - } - return definition; + logger.debug( + `Detected failed or outdated installation of definition [${installedDefinition.id}] v${installedDefinition.version}, installing v${builtInDefinition.version}` + ); + return await reinstall({ + soClient, + esClient, + logger, + definition: installedDefinition, + latestDefinition: builtInDefinition, + }); }); return await Promise.all(installPromises); } -async function installAndStartDefinition( - params: InstallDefinitionParams & { installOnly?: boolean } -) { - const definition = await installEntityDefinition(params); - if (!params.installOnly) { - await startTransform(params.esClient, definition, params.logger); +// perform installation of an entity definition components. +// assume definition saved object is already persisted +async function install({ + esClient, + soClient, + definition, + logger, +}: InstallDefinitionParams): Promise { + logger.debug( + () => + `Installing definition ${definition.id} v${definition.version}\n${JSON.stringify( + definition, + null, + 2 + )}` + ); + + logger.debug(`Installing index templates for definition ${definition.id}`); + await Promise.allSettled([ + upsertTemplate({ + esClient, + logger, + template: generateEntitiesHistoryIndexTemplateConfig(definition), + }), + upsertTemplate({ + esClient, + logger, + template: generateEntitiesLatestIndexTemplateConfig(definition), + }), + ]).then(throwIfRejected); + + logger.debug(`Installing ingest pipelines for definition ${definition.id}`); + await Promise.allSettled([ + createAndInstallHistoryIngestPipeline(esClient, definition, logger), + createAndInstallLatestIngestPipeline(esClient, definition, logger), + ]).then(throwIfRejected); + + logger.debug(`Installing transforms for definition ${definition.id}`); + await Promise.allSettled([ + createAndInstallHistoryTransform(esClient, definition, logger), + isBackfillEnabled(definition) + ? createAndInstallHistoryBackfillTransform(esClient, definition, logger) + : Promise.resolve(), + createAndInstallLatestTransform(esClient, definition, logger), + ]).then(throwIfRejected); + + await updateEntityDefinition(soClient, definition.id, { installStatus: 'installed' }); + + return { ...definition, installStatus: 'installed' }; +} + +// stop and delete the current transforms and reinstall all the components +async function reinstall({ + esClient, + soClient, + definition, + latestDefinition, + logger, +}: InstallDefinitionParams & { latestDefinition: EntityDefinition }): Promise { + logger.debug( + `Reinstalling definition ${definition.id} from v${definition.version} to v${latestDefinition.version}` + ); + + try { + await updateEntityDefinition(soClient, latestDefinition.id, { + ...latestDefinition, + installStatus: 'upgrading', + installStartedAt: new Date().toISOString(), + }); + + logger.debug(`Stopping transforms for definition ${definition.id} v${definition.version}`); + await Promise.all([ + stopAndDeleteHistoryTransform(esClient, definition, logger), + isBackfillEnabled(definition) + ? stopAndDeleteHistoryBackfillTransform(esClient, definition, logger) + : Promise.resolve(), + stopAndDeleteLatestTransform(esClient, definition, logger), + ]); + + return await install({ + esClient, + soClient, + logger, + definition: latestDefinition, + }); + } catch (err) { + await updateEntityDefinition(soClient, latestDefinition.id, { + installStatus: 'failed', + }); + + throw err; } - return definition; } + +const INSTALLATION_TIMEOUT = 5 * 60 * 1000; +const shouldReinstall = ( + definition: EntityDefinitionWithState, + latestDefinition: EntityDefinition +) => { + const { installStatus, installStartedAt } = definition; + + const isStale = + (installStatus === 'installing' || installStatus === 'upgrading') && + Date.now() - Date.parse(installStartedAt!) >= INSTALLATION_TIMEOUT; + const isOutdated = + installStatus === 'installed' && semver.neq(definition.version, latestDefinition.version); + const isFailed = installStatus === 'failed'; + const isPartial = installStatus === 'installed' && !definition.state.installed; + + return isStale || isOutdated || isFailed || isPartial; +}; diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/save_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/save_entity_definition.ts index 5b6d5fe0e933bf..2dff5178aeeaf5 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/save_entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/save_entity_definition.ts @@ -8,26 +8,11 @@ import { SavedObjectsClientContract } from '@kbn/core/server'; import { EntityDefinition } from '@kbn/entities-schema'; import { SO_ENTITY_DEFINITION_TYPE } from '../../saved_objects'; -import { EntityIdConflict } from './errors/entity_id_conflict_error'; export async function saveEntityDefinition( soClient: SavedObjectsClientContract, definition: EntityDefinition ): Promise { - const response = await soClient.find({ - type: SO_ENTITY_DEFINITION_TYPE, - page: 1, - perPage: 1, - filter: `${SO_ENTITY_DEFINITION_TYPE}.attributes.id:(${definition.id})`, - }); - - if (response.total === 1) { - throw new EntityIdConflict( - `Entity definition with [${definition.id}] already exists.`, - definition - ); - } - await soClient.create(SO_ENTITY_DEFINITION_TYPE, definition, { id: definition.id, managed: definition.managed, @@ -36,3 +21,25 @@ export async function saveEntityDefinition( return definition; } + +export async function entityDefinitionExists( + soClient: SavedObjectsClientContract, + id: string +): Promise { + const response = await soClient.find({ + type: SO_ENTITY_DEFINITION_TYPE, + page: 1, + perPage: 1, + filter: `${SO_ENTITY_DEFINITION_TYPE}.attributes.id:(${id})`, + }); + + return response.total === 1; +} + +export async function updateEntityDefinition( + soClient: SavedObjectsClientContract, + id: string, + definition: Partial +) { + await soClient.update(SO_ENTITY_DEFINITION_TYPE, id, definition); +} diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_history_template.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_history_template.test.ts.snap index 464293cc1bca8e..2d0aa66c662e6c 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_history_template.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_history_template.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`getEntitiesHistoryIndexTemplateConfig(definitionId) should generate a valid index template 1`] = ` +exports[`generateEntitiesHistoryIndexTemplateConfig(definition) should generate a valid index template 1`] = ` Object { "_meta": Object { "description": "Index template for indices managed by the Elastic Entity Model's entity discovery framework for the history dataset", diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap index 448286b16d84aa..a3ed6ea45f53dc 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`getEntitiesLatestIndexTemplateConfig(definitionId) should generate a valid index template 1`] = ` +exports[`generateEntitiesLatestIndexTemplateConfig(definition) should generate a valid index template 1`] = ` Object { "_meta": Object { "description": "Index template for indices managed by the Elastic Entity Model's entity discovery framework for the latest dataset", diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.test.ts index 055ebe75cd6081..33a934032c6867 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.test.ts @@ -6,11 +6,11 @@ */ import { entityDefinition } from '../helpers/fixtures/entity_definition'; -import { getEntitiesHistoryIndexTemplateConfig } from './entities_history_template'; +import { generateEntitiesHistoryIndexTemplateConfig } from './entities_history_template'; -describe('getEntitiesHistoryIndexTemplateConfig(definitionId)', () => { +describe('generateEntitiesHistoryIndexTemplateConfig(definition)', () => { it('should generate a valid index template', () => { - const template = getEntitiesHistoryIndexTemplateConfig(entityDefinition); + const template = generateEntitiesHistoryIndexTemplateConfig(entityDefinition); expect(template).toMatchSnapshot(); }); }); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.ts index d6007e82871385..5fa88367c04d1c 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_history_template.ts @@ -13,7 +13,7 @@ import { entitiesAliasPattern, ENTITY_SCHEMA_VERSION_V1, } from '@kbn/entities-schema'; -import { getEntityHistoryIndexTemplateV1 } from '../../../../common/helpers'; +import { generateHistoryIndexTemplateId } from '../helpers/generate_component_id'; import { ENTITY_ENTITY_COMPONENT_TEMPLATE_V1, ENTITY_EVENT_COMPONENT_TEMPLATE_V1, @@ -21,10 +21,10 @@ import { } from '../../../../common/constants_entities'; import { getCustomHistoryTemplateComponents } from '../../../templates/components/helpers'; -export const getEntitiesHistoryIndexTemplateConfig = ( +export const generateEntitiesHistoryIndexTemplateConfig = ( definition: EntityDefinition ): IndicesPutIndexTemplateRequest => ({ - name: getEntityHistoryIndexTemplateV1(definition.id), + name: generateHistoryIndexTemplateId(definition), _meta: { description: "Index template for indices managed by the Elastic Entity Model's entity discovery framework for the history dataset", diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts index f1012d0bcb7f7c..44dc91b72da449 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts @@ -6,11 +6,11 @@ */ import { entityDefinition } from '../helpers/fixtures/entity_definition'; -import { getEntitiesLatestIndexTemplateConfig } from './entities_latest_template'; +import { generateEntitiesLatestIndexTemplateConfig } from './entities_latest_template'; -describe('getEntitiesLatestIndexTemplateConfig(definitionId)', () => { +describe('generateEntitiesLatestIndexTemplateConfig(definition)', () => { it('should generate a valid index template', () => { - const template = getEntitiesLatestIndexTemplateConfig(entityDefinition); + const template = generateEntitiesLatestIndexTemplateConfig(entityDefinition); expect(template).toMatchSnapshot(); }); }); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.ts index e97be68e696d11..b4eeb18d9435c6 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/templates/entities_latest_template.ts @@ -13,7 +13,7 @@ import { entitiesIndexPattern, entitiesAliasPattern, } from '@kbn/entities-schema'; -import { getEntityLatestIndexTemplateV1 } from '../../../../common/helpers'; +import { generateLatestIndexTemplateId } from '../helpers/generate_component_id'; import { ENTITY_ENTITY_COMPONENT_TEMPLATE_V1, ENTITY_EVENT_COMPONENT_TEMPLATE_V1, @@ -21,10 +21,10 @@ import { } from '../../../../common/constants_entities'; import { getCustomLatestTemplateComponents } from '../../../templates/components/helpers'; -export const getEntitiesLatestIndexTemplateConfig = ( +export const generateEntitiesLatestIndexTemplateConfig = ( definition: EntityDefinition ): IndicesPutIndexTemplateRequest => ({ - name: getEntityLatestIndexTemplateV1(definition.id), + name: generateLatestIndexTemplateId(definition), _meta: { description: "Index template for indices managed by the Elastic Entity Model's entity discovery framework for the latest dataset", diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap index 30b8912a532d77..93c440038c3e69 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_history_transform.test.ts.snap @@ -155,7 +155,7 @@ Object { exports[`generateHistoryTransform(definition) should generate a valid history transform 1`] = ` Object { "_meta": Object { - "definitionVersion": "999.999.999", + "definitionVersion": "1.0.0", "managed": false, }, "defer_validation": true, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap index f7fe9d8339932c..ca4cda934328e6 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap @@ -3,7 +3,7 @@ exports[`generateLatestTransform(definition) should generate a valid latest transform 1`] = ` Object { "_meta": Object { - "definitionVersion": "999.999.999", + "definitionVersion": "1.0.0", "managed": false, }, "defer_validation": true, diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/validate_transform_ids.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/validate_transform_ids.ts index c124870da85916..c16b7f126ddedd 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/validate_transform_ids.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/transform/validate_transform_ids.ts @@ -8,6 +8,7 @@ import { EntityDefinition } from '@kbn/entities-schema'; import { EntityDefinitionIdInvalid } from '../errors/entity_definition_id_invalid'; import { + generateHistoryBackfillTransformId, generateHistoryTransformId, generateLatestTransformId, } from '../helpers/generate_component_id'; @@ -17,9 +18,15 @@ const TRANSFORM_ID_MAX_LENGTH = 64; export function validateDefinitionCanCreateValidTransformIds(definition: EntityDefinition) { const historyTransformId = generateHistoryTransformId(definition); const latestTransformId = generateLatestTransformId(definition); + const historyBackfillTransformId = generateHistoryBackfillTransformId(definition); const spareChars = - TRANSFORM_ID_MAX_LENGTH - Math.max(historyTransformId.length, latestTransformId.length); + TRANSFORM_ID_MAX_LENGTH - + Math.max( + historyTransformId.length, + latestTransformId.length, + historyBackfillTransformId.length + ); if (spareChars < 0) { throw new EntityDefinitionIdInvalid( diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/types.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/types.ts index 1f3498a9354a5f..2cb4eb43791c2c 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/types.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/types.ts @@ -7,6 +7,10 @@ import { EntityDefinition } from '@kbn/entities-schema'; +// state is the *live* state of the definition. since a definition +// is composed of several elasticsearch components that can be +// modified or deleted outside of the entity manager apis, this can +// be used to verify the actual installation is complete and running export type EntityDefinitionWithState = EntityDefinition & { state: { installed: boolean; running: boolean }; }; diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/uninstall_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/uninstall_entity_definition.ts index 11f772ce2e9383..64871084333c37 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/uninstall_entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/uninstall_entity_definition.ts @@ -9,10 +9,6 @@ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { EntityDefinition } from '@kbn/entities-schema'; import { Logger } from '@kbn/logging'; -import { - getEntityHistoryIndexTemplateV1, - getEntityLatestIndexTemplateV1, -} from '../../../common/helpers'; import { deleteEntityDefinition } from './delete_entity_definition'; import { deleteIndices } from './delete_index'; import { deleteHistoryIngestPipeline, deleteLatestIngestPipeline } from './delete_ingest_pipeline'; @@ -23,6 +19,10 @@ import { stopAndDeleteLatestTransform, } from './stop_and_delete_transform'; import { isBackfillEnabled } from './helpers/is_backfill_enabled'; +import { + generateHistoryIndexTemplateId, + generateLatestIndexTemplateId, +} from './helpers/generate_component_id'; import { deleteTemplate } from '../manage_index_templates'; export async function uninstallEntityDefinition({ @@ -38,20 +38,29 @@ export async function uninstallEntityDefinition({ logger: Logger; deleteData?: boolean; }) { - await stopAndDeleteHistoryTransform(esClient, definition, logger); - if (isBackfillEnabled(definition)) { - await stopAndDeleteHistoryBackfillTransform(esClient, definition, logger); - } - await stopAndDeleteLatestTransform(esClient, definition, logger); - await deleteHistoryIngestPipeline(esClient, definition, logger); - await deleteLatestIngestPipeline(esClient, definition, logger); - await deleteEntityDefinition(soClient, definition, logger); - await deleteTemplate({ esClient, logger, name: getEntityHistoryIndexTemplateV1(definition.id) }); - await deleteTemplate({ esClient, logger, name: getEntityLatestIndexTemplateV1(definition.id) }); + await Promise.all([ + stopAndDeleteHistoryTransform(esClient, definition, logger), + stopAndDeleteLatestTransform(esClient, definition, logger), + isBackfillEnabled(definition) + ? stopAndDeleteHistoryBackfillTransform(esClient, definition, logger) + : Promise.resolve(), + ]); + + await Promise.all([ + deleteHistoryIngestPipeline(esClient, definition, logger), + deleteLatestIngestPipeline(esClient, definition, logger), + ]); if (deleteData) { await deleteIndices(esClient, definition, logger); } + + await Promise.all([ + deleteTemplate({ esClient, logger, name: generateHistoryIndexTemplateId(definition) }), + deleteTemplate({ esClient, logger, name: generateLatestIndexTemplateId(definition) }), + ]); + + await deleteEntityDefinition(soClient, definition); } export async function uninstallBuiltInEntityDefinitions({ diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/upgrade_entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/upgrade_entity_definition.ts new file mode 100644 index 00000000000000..aa94160039b047 --- /dev/null +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/entities/upgrade_entity_definition.ts @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EntityDefinition } from '@kbn/entities-schema'; +import { installBuiltInEntityDefinitions } from './install_entity_definition'; +import { startTransform } from './start_transform'; +import { EntityManagerServerSetup } from '../../types'; +import { checkIfEntityDiscoveryAPIKeyIsValid, readEntityDiscoveryAPIKey } from '../auth'; +import { getClientsFromAPIKey } from '../utils'; +import { ERROR_API_KEY_NOT_FOUND } from '../../../common/errors'; + +export async function upgradeBuiltInEntityDefinitions({ + definitions, + server, +}: { + definitions: EntityDefinition[]; + server: EntityManagerServerSetup; +}): Promise< + { success: true; definitions: EntityDefinition[] } | { success: false; reason: string } +> { + const { logger } = server; + const apiKey = await readEntityDiscoveryAPIKey(server); + if (!apiKey) { + return { success: false, reason: ERROR_API_KEY_NOT_FOUND }; + } + + const isValid = await checkIfEntityDiscoveryAPIKeyIsValid(server, apiKey); + if (!isValid) { + throw new Error( + 'Stored API key is not valid, skipping built-in definition upgrade. You can re-enable Entity Discovery to update the key.' + ); + } + + const { esClient, soClient } = getClientsFromAPIKey({ apiKey, server }); + + logger.debug(`Starting built-in definitions upgrade`); + const upgradedDefinitions = await installBuiltInEntityDefinitions({ + esClient, + soClient, + definitions, + logger, + }); + + await Promise.all( + upgradedDefinitions.map((definition) => startTransform(esClient, definition, logger)) + ); + + return { success: true, definitions: upgradedDefinitions }; +} diff --git a/x-pack/plugins/observability_solution/entity_manager/server/lib/manage_index_templates.ts b/x-pack/plugins/observability_solution/entity_manager/server/lib/manage_index_templates.ts index f300df4a92c1d8..b0789b6cf2769f 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/lib/manage_index_templates.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/lib/manage_index_templates.ts @@ -10,6 +10,10 @@ import { IndicesPutIndexTemplateRequest, } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { entitiesHistoryBaseComponentTemplateConfig } from '../templates/components/base_history'; +import { entitiesLatestBaseComponentTemplateConfig } from '../templates/components/base_latest'; +import { entitiesEntityComponentTemplateConfig } from '../templates/components/entity'; +import { entitiesEventComponentTemplateConfig } from '../templates/components/event'; import { retryTransientEsErrors } from './entities/helpers/retry'; interface TemplateManagementOptions { @@ -24,6 +28,37 @@ interface ComponentManagementOptions { logger: Logger; } +export const installEntityManagerTemplates = async ({ + esClient, + logger, +}: { + esClient: ElasticsearchClient; + logger: Logger; +}) => { + await Promise.all([ + upsertComponent({ + esClient, + logger, + component: entitiesHistoryBaseComponentTemplateConfig, + }), + upsertComponent({ + esClient, + logger, + component: entitiesLatestBaseComponentTemplateConfig, + }), + upsertComponent({ + esClient, + logger, + component: entitiesEventComponentTemplateConfig, + }), + upsertComponent({ + esClient, + logger, + component: entitiesEntityComponentTemplateConfig, + }), + ]); +}; + interface DeleteTemplateOptions { esClient: ElasticsearchClient; name: string; @@ -33,15 +68,11 @@ interface DeleteTemplateOptions { export async function upsertTemplate({ esClient, template, logger }: TemplateManagementOptions) { try { await retryTransientEsErrors(() => esClient.indices.putIndexTemplate(template), { logger }); + logger.debug(() => `Installed entity manager index template: ${JSON.stringify(template)}`); } catch (error: any) { logger.error(`Error updating entity manager index template: ${error.message}`); throw error; } - - logger.info( - `Entity manager index template is up to date (use debug logging to see what was installed)` - ); - logger.debug(() => `Entity manager index template: ${JSON.stringify(template)}`); } export async function deleteTemplate({ esClient, name, logger }: DeleteTemplateOptions) { @@ -61,13 +92,9 @@ export async function upsertComponent({ esClient, component, logger }: Component await retryTransientEsErrors(() => esClient.cluster.putComponentTemplate(component), { logger, }); + logger.debug(() => `Installed entity manager component template: ${JSON.stringify(component)}`); } catch (error: any) { logger.error(`Error updating entity manager component template: ${error.message}`); throw error; } - - logger.info( - `Entity manager component template is up to date (use debug logging to see what was installed)` - ); - logger.debug(() => `Entity manager component template: ${JSON.stringify(component)}`); } diff --git a/x-pack/plugins/observability_solution/entity_manager/server/plugin.ts b/x-pack/plugins/observability_solution/entity_manager/server/plugin.ts index 80154149e24023..de9e8bec2826fb 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/plugin.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/plugin.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { firstValueFrom } from 'rxjs'; import { Plugin, CoreSetup, @@ -14,7 +15,7 @@ import { PluginConfigDescriptor, Logger, } from '@kbn/core/server'; -import { upsertComponent } from './lib/manage_index_templates'; +import { installEntityManagerTemplates } from './lib/manage_index_templates'; import { setupRoutes } from './routes'; import { EntityManagerPluginSetupDependencies, @@ -22,11 +23,9 @@ import { EntityManagerServerSetup, } from './types'; import { EntityManagerConfig, configSchema, exposeToBrowserConfig } from '../common/config'; -import { entitiesEventComponentTemplateConfig } from './templates/components/event'; import { entityDefinition, EntityDiscoveryApiKeyType } from './saved_objects'; -import { entitiesEntityComponentTemplateConfig } from './templates/components/entity'; -import { entitiesLatestBaseComponentTemplateConfig } from './templates/components/base_latest'; -import { entitiesHistoryBaseComponentTemplateConfig } from './templates/components/base_history'; +import { upgradeBuiltInEntityDefinitions } from './lib/entities/upgrade_entity_definition'; +import { builtInDefinitions } from './lib/entities/built_in'; export type EntityManagerServerPluginSetup = ReturnType; export type EntityManagerServerPluginStart = ReturnType; @@ -89,29 +88,21 @@ export class EntityManagerServerPlugin const esClient = core.elasticsearch.client.asInternalUser; - // Install entities component templates and index template - Promise.all([ - upsertComponent({ - esClient, - logger: this.logger, - component: entitiesHistoryBaseComponentTemplateConfig, - }), - upsertComponent({ - esClient, - logger: this.logger, - component: entitiesLatestBaseComponentTemplateConfig, - }), - upsertComponent({ - esClient, - logger: this.logger, - component: entitiesEventComponentTemplateConfig, - }), - upsertComponent({ - esClient, - logger: this.logger, - component: entitiesEntityComponentTemplateConfig, - }), - ]).catch(() => {}); + installEntityManagerTemplates({ esClient, logger: this.logger }) + .then(async () => { + // the api key validation requires a check against the cluster license + // which is lazily loaded. we ensure it gets loaded before the update + await firstValueFrom(plugins.licensing.license$); + const { success } = await upgradeBuiltInEntityDefinitions({ + definitions: builtInDefinitions, + server: this.server!, + }); + + if (success) { + this.logger.info('Builtin definitions were successfully upgraded'); + } + }) + .catch((err) => this.logger.error(err)); return {}; } diff --git a/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/check.ts b/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/check.ts index 23343026e33328..0332e65249e385 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/check.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/check.ts @@ -5,12 +5,14 @@ * 2.0. */ +import semver from 'semver'; import { RequestHandlerContext } from '@kbn/core/server'; import { SetupRouteOptions } from '../types'; import { checkIfEntityDiscoveryAPIKeyIsValid, readEntityDiscoveryAPIKey } from '../../lib/auth'; import { ERROR_API_KEY_NOT_FOUND, ERROR_API_KEY_NOT_VALID, + ERROR_BUILTIN_UPGRADE_REQUIRED, ERROR_DEFINITION_STOPPED, ERROR_PARTIAL_BUILTIN_INSTALLATION, } from '../../../common/errors'; @@ -54,17 +56,21 @@ export function checkEntityDiscoveryEnabledRoute results.reduce( - (state, definition) => { + (state, { installedDefinition, builtInDefinition }) => { return { - installed: Boolean(state.installed && definition?.state.installed), - running: Boolean(state.running && definition?.state.running), + installed: Boolean(state.installed && installedDefinition?.state.installed), + running: Boolean(state.running && installedDefinition?.state.running), + outdated: + state.outdated || + (installedDefinition && + semver.neq(installedDefinition.version, builtInDefinition.version)), }; }, - { installed: true, running: true } + { installed: true, running: true, outdated: false } ) ); @@ -76,6 +82,10 @@ export function checkEntityDiscoveryEnabledRoute({ }, }); } + const soClient = (await context.core).savedObjects.getClient({ includedHiddenTypes: [EntityDiscoveryApiKeyType.name], }); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/enable.ts b/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/enable.ts index 34dac8788d6a8a..6e3e7569a15a6c 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/enable.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/routes/enablement/enable.ts @@ -25,6 +25,7 @@ import { builtInDefinitions } from '../../lib/entities/built_in'; import { installBuiltInEntityDefinitions } from '../../lib/entities/install_entity_definition'; import { ERROR_API_KEY_SERVICE_DISABLED } from '../../../common/errors'; import { EntityDiscoveryApiKeyType } from '../../saved_objects'; +import { startTransform } from '../../lib/entities/start_transform'; export function enableEntityDiscoveryRoute({ router, @@ -89,14 +90,21 @@ export function enableEntityDiscoveryRoute({ await saveEntityDiscoveryAPIKey(soClient, apiKey); - await installBuiltInEntityDefinitions({ - logger, - builtInDefinitions, + const installedDefinitions = await installBuiltInEntityDefinitions({ esClient, soClient, - installOnly: req.query.installOnly, + logger, + definitions: builtInDefinitions, }); + if (!req.query.installOnly) { + await Promise.all( + installedDefinitions.map((installedDefinition) => + startTransform(esClient, installedDefinition, logger) + ) + ); + } + return res.ok({ body: { success: true } }); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/observability_solution/entity_manager/server/saved_objects/entity_definition.ts b/x-pack/plugins/observability_solution/entity_manager/server/saved_objects/entity_definition.ts index b4bf24580d632d..fdf2510e8627e7 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/saved_objects/entity_definition.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/saved_objects/entity_definition.ts @@ -49,5 +49,20 @@ export const entityDefinition: SavedObjectsType = { }, ], }, + '2': { + changes: [ + { + type: 'data_backfill', + backfillFn: () => { + return { + attributes: { + installStatus: 'installed', + installStartedAt: new Date().toISOString(), + }, + }; + }, + }, + ], + }, }, }; diff --git a/x-pack/plugins/observability_solution/entity_manager/server/types.ts b/x-pack/plugins/observability_solution/entity_manager/server/types.ts index 2215b50285c82e..cd7a4a49b98824 100644 --- a/x-pack/plugins/observability_solution/entity_manager/server/types.ts +++ b/x-pack/plugins/observability_solution/entity_manager/server/types.ts @@ -11,6 +11,7 @@ import { EncryptedSavedObjectsPluginSetup, EncryptedSavedObjectsPluginStart, } from '@kbn/encrypted-saved-objects-plugin/server'; +import { LicensingPluginStart } from '@kbn/licensing-plugin/server'; import { EntityManagerConfig } from '../common/config'; export interface EntityManagerServerSetup { @@ -33,4 +34,5 @@ export interface EntityManagerPluginSetupDependencies { export interface EntityManagerPluginStartDependencies { security: SecurityPluginStart; encryptedSavedObjects: EncryptedSavedObjectsPluginStart; + licensing: LicensingPluginStart; } diff --git a/x-pack/plugins/observability_solution/entity_manager/tsconfig.json b/x-pack/plugins/observability_solution/entity_manager/tsconfig.json index 4b9d394a62f12e..66dbddf1a261e7 100644 --- a/x-pack/plugins/observability_solution/entity_manager/tsconfig.json +++ b/x-pack/plugins/observability_solution/entity_manager/tsconfig.json @@ -28,5 +28,6 @@ "@kbn/security-plugin", "@kbn/encrypted-saved-objects-plugin", "@kbn/logging-mocks", + "@kbn/licensing-plugin", ] } diff --git a/x-pack/test/api_integration/apis/entity_manager/builtin_definitions.ts b/x-pack/test/api_integration/apis/entity_manager/builtin_definitions.ts new file mode 100644 index 00000000000000..d5d92e75179fe3 --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/builtin_definitions.ts @@ -0,0 +1,192 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import semver from 'semver'; +import expect from '@kbn/expect'; +import { builtInDefinitions } from '@kbn/entityManager-plugin/server/lib/entities/built_in'; +import { ERROR_API_KEY_NOT_FOUND } from '@kbn/entityManager-plugin/public'; +import { builtInEntityDefinition as mockBuiltInEntityDefinition } from '@kbn/entityManager-plugin/server/lib/entities/helpers/fixtures'; +import { EntityDefinition } from '@kbn/entities-schema'; +import { EntityDefinitionWithState } from '@kbn/entityManager-plugin/server/lib/entities/types'; +import { FtrProviderContext } from '../../ftr_provider_context'; +import { createAdmin, createRuntimeUser } from './helpers/user'; +import { Auth, getInstalledDefinitions, upgradeBuiltinDefinitions } from './helpers/request'; + +export default function ({ getService }: FtrProviderContext) { + const esClient = getService('es'); + const supertest = getService('supertest'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + + const enablementRequest = + (method: 'get' | 'put' | 'delete') => + async (auth: Auth, expectedCode: number, query: { [key: string]: any } = {}) => { + const response = await supertestWithoutAuth[method]('/internal/entities/managed/enablement') + .auth(auth.username, auth.password) + .query(query) + .set('kbn-xsrf', 'xxx') + .send() + .expect(expectedCode); + return response.body; + }; + + const entityDiscoveryState = enablementRequest('get'); + const enableEntityDiscovery = enablementRequest('put'); + const disableEntityDiscovery = enablementRequest('delete'); + + const expectNoInstalledDefinitions = async () => { + const definitionsResponse = await getInstalledDefinitions(supertest); + expect(definitionsResponse.definitions).to.eql([]); + }; + + const isInstalledAndRunning = ( + definition: EntityDefinition, + installedDefinitions: EntityDefinitionWithState[] + ) => { + return installedDefinitions.find((installedDefinition) => { + return ( + installedDefinition.id === definition.id && + installedDefinition.version === definition.version && + installedDefinition.state.installed && + installedDefinition.state.running + ); + }); + }; + + describe('Entity discovery builtin definitions', () => { + let authorizedUser: { username: string; password: string }; + let unauthorizedUser: { username: string; password: string }; + + before(async () => { + [authorizedUser, unauthorizedUser] = await Promise.all([ + createAdmin({ esClient }), + createRuntimeUser({ esClient }), + ]); + }); + + describe('enablement/disablement', () => { + describe('with authorized user', () => { + it('should enable and disable entity discovery', async () => { + const enableResponse = await enableEntityDiscovery(authorizedUser, 200); + expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); + + const definitionsResponse = await getInstalledDefinitions( + supertestWithoutAuth, + authorizedUser + ); + expect(definitionsResponse.definitions.length).to.eql(builtInDefinitions.length); + expect( + builtInDefinitions.every((builtin) => + isInstalledAndRunning(builtin, definitionsResponse.definitions) + ) + ).to.eql(true, 'all builtin definitions are not installed/running'); + + let stateResponse = await entityDiscoveryState(authorizedUser, 200); + expect(stateResponse.enabled).to.eql( + true, + `EEM is not enabled; response: ${JSON.stringify(stateResponse)}` + ); + + const disableResponse = await disableEntityDiscovery(authorizedUser, 200, { + deleteData: false, + }); + expect(disableResponse.success).to.eql( + true, + `authorized user failed to disable EEM; response: ${JSON.stringify(disableResponse)}` + ); + + stateResponse = await entityDiscoveryState(authorizedUser, 200); + expect(stateResponse.enabled).to.eql(false, 'EEM is not disabled'); + + await expectNoInstalledDefinitions(); + }); + }); + + describe('with unauthorized user', () => { + it('should fail to enable entity discovery', async () => { + await enableEntityDiscovery(unauthorizedUser, 403); + + const stateResponse = await entityDiscoveryState(unauthorizedUser, 200); + expect(stateResponse.enabled).to.eql(false, 'EEM is enabled'); + + await expectNoInstalledDefinitions(); + }); + + it('should fail to disable entity discovery', async () => { + const enableResponse = await enableEntityDiscovery(authorizedUser, 200); + expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); + + await disableEntityDiscovery(unauthorizedUser, 403); + + const disableResponse = await disableEntityDiscovery(authorizedUser, 200); + expect(disableResponse.success).to.eql(true, "authorized user can't disable EEM"); + }); + }); + }); + + describe('upgrade', () => { + it('should noop when no api key stored', async () => { + const result = await upgradeBuiltinDefinitions(supertest, []); + expect(result).to.eql({ success: false, reason: ERROR_API_KEY_NOT_FOUND }); + }); + + it('should upgrade existing definitions', async () => { + await expectNoInstalledDefinitions(); + + const enableResponse = await enableEntityDiscovery(authorizedUser, 200); + expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); + + let definitionsResponse = await getInstalledDefinitions(supertest); + expect(definitionsResponse.definitions.length).to.eql(builtInDefinitions.length); + + // increment the version of builtin definitions + const updatedBuiltinDefinitions = definitionsResponse.definitions.map((definition) => { + return { + ...definition, + version: semver.inc(definition.version, 'minor')!, + }; + }); + + const upgradeResponse = await upgradeBuiltinDefinitions( + supertest, + updatedBuiltinDefinitions + ); + expect(upgradeResponse.success).to.eql(true); + + // check builtin definitions are running the latest version + definitionsResponse = await getInstalledDefinitions(supertest); + expect(definitionsResponse.definitions.length).to.eql(builtInDefinitions.length); + expect( + updatedBuiltinDefinitions.every((builtin) => + isInstalledAndRunning(builtin, definitionsResponse.definitions) + ) + ).to.eql(true, 'all builtin definitions are not installed/running'); + + await disableEntityDiscovery(authorizedUser, 200); + }); + }); + + it('should install new builtin definitions', async () => { + await expectNoInstalledDefinitions(); + + const enableResponse = await enableEntityDiscovery(authorizedUser, 200); + expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); + + // inject definition to simulate release of new builtin definition + const latestBuiltInDefinitions = [...builtInDefinitions, mockBuiltInEntityDefinition]; + const upgradeResponse = await upgradeBuiltinDefinitions(supertest, latestBuiltInDefinitions); + expect(upgradeResponse.success).to.eql(true, 'upgrade was not successful'); + + const definitionsResponse = await getInstalledDefinitions(supertest); + expect(definitionsResponse.definitions.length).to.eql(latestBuiltInDefinitions.length); + expect( + isInstalledAndRunning(mockBuiltInEntityDefinition, definitionsResponse.definitions) + ).to.ok(); + + await disableEntityDiscovery(authorizedUser, 200); + }); + }); +} diff --git a/x-pack/test/api_integration/apis/entity_manager/config.ts b/x-pack/test/api_integration/apis/entity_manager/config.ts index 4280c8a0393efa..eb84cd768c3f8a 100644 --- a/x-pack/test/api_integration/apis/entity_manager/config.ts +++ b/x-pack/test/api_integration/apis/entity_manager/config.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { resolve } from 'path'; import { FtrConfigProviderContext, GenericFtrProviderContext } from '@kbn/test'; import { FtrProviderContext } from '../../ftr_provider_context'; @@ -21,10 +22,18 @@ export default async function createTestConfig({ }: FtrConfigProviderContext): Promise { const baseIntegrationTestsConfig = await readConfigFile(require.resolve('../../config.ts')); const services = baseIntegrationTestsConfig.get('services'); + const entityManagerFixturePlugin = resolve(__dirname, './fixture_plugin'); return { ...baseIntegrationTestsConfig.getAll(), testFiles: [require.resolve('.')], + kbnTestServer: { + ...baseIntegrationTestsConfig.get('kbnTestServer'), + serverArgs: [ + ...baseIntegrationTestsConfig.get('kbnTestServer.serverArgs'), + `--plugin-path=${entityManagerFixturePlugin}`, + ], + }, services: { ...services, }, diff --git a/x-pack/test/api_integration/apis/entity_manager/enablement.ts b/x-pack/test/api_integration/apis/entity_manager/enablement.ts deleted file mode 100644 index 0745a526c443d6..00000000000000 --- a/x-pack/test/api_integration/apis/entity_manager/enablement.ts +++ /dev/null @@ -1,111 +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 expect from '@kbn/expect'; -import { builtInDefinitions } from '@kbn/entityManager-plugin/server/lib/entities/built_in'; -import { EntityDefinitionWithState } from '@kbn/entityManager-plugin/server/lib/entities/types'; -import { FtrProviderContext } from '../../ftr_provider_context'; -import { createAdmin, createRuntimeUser } from './helpers/user'; -import { Auth, getInstalledDefinitions } from './helpers/request'; - -export default function ({ getService }: FtrProviderContext) { - const esClient = getService('es'); - const supertest = getService('supertestWithoutAuth'); - - const enablementRequest = - (method: 'get' | 'put' | 'delete') => - async (auth: Auth, expectedCode: number, query: { [key: string]: any } = {}) => { - const response = await supertest[method]('/internal/entities/managed/enablement') - .auth(auth.username, auth.password) - .query(query) - .set('kbn-xsrf', 'xxx') - .send() - .expect(expectedCode); - return response.body; - }; - - const entityDiscoveryState = enablementRequest('get'); - const enableEntityDiscovery = enablementRequest('put'); - const disableEntityDiscovery = enablementRequest('delete'); - - describe('Entity discovery enablement', () => { - let authorizedUser: { username: string; password: string }; - let unauthorizedUser: { username: string; password: string }; - - before(async () => { - [authorizedUser, unauthorizedUser] = await Promise.all([ - createAdmin({ esClient }), - createRuntimeUser({ esClient }), - ]); - }); - - describe('with authorized user', () => { - it('should enable and disable entity discovery', async () => { - const enableResponse = await enableEntityDiscovery(authorizedUser, 200); - expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); - - let definitionsResponse = await getInstalledDefinitions(supertest, authorizedUser); - expect(definitionsResponse.definitions.length).to.eql(builtInDefinitions.length); - expect( - builtInDefinitions.every((builtin) => { - return definitionsResponse.definitions.find( - (installedDefinition: EntityDefinitionWithState) => { - return ( - installedDefinition.id === builtin.id && - installedDefinition.state.installed && - installedDefinition.state.running - ); - } - ); - }) - ).to.eql(true, 'all builtin definitions are not installed/running'); - - let stateResponse = await entityDiscoveryState(authorizedUser, 200); - expect(stateResponse.enabled).to.eql( - true, - `EEM is not enabled; response: ${JSON.stringify(stateResponse)}` - ); - - const disableResponse = await disableEntityDiscovery(authorizedUser, 200, { - deleteData: false, - }); - expect(disableResponse.success).to.eql( - true, - `authorized user failed to disable EEM; response: ${JSON.stringify(disableResponse)}` - ); - - stateResponse = await entityDiscoveryState(authorizedUser, 200); - expect(stateResponse.enabled).to.eql(false, 'EEM is not disabled'); - - definitionsResponse = await getInstalledDefinitions(supertest, authorizedUser); - expect(definitionsResponse.definitions).to.eql([]); - }); - }); - - describe('with unauthorized user', () => { - it('should fail to enable entity discovery', async () => { - await enableEntityDiscovery(unauthorizedUser, 403); - - const stateResponse = await entityDiscoveryState(unauthorizedUser, 200); - expect(stateResponse.enabled).to.eql(false, 'EEM is enabled'); - - const definitionsResponse = await getInstalledDefinitions(supertest, unauthorizedUser); - expect(definitionsResponse.definitions).to.eql([]); - }); - - it('should fail to disable entity discovery', async () => { - const enableResponse = await enableEntityDiscovery(authorizedUser, 200); - expect(enableResponse.success).to.eql(true, "authorized user can't enable EEM"); - - let disableResponse = await disableEntityDiscovery(unauthorizedUser, 403); - - disableResponse = await disableEntityDiscovery(authorizedUser, 200); - expect(disableResponse.success).to.eql(true, "authorized user can't disable EEM"); - }); - }); - }); -} diff --git a/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/kibana.jsonc b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/kibana.jsonc new file mode 100644 index 00000000000000..ca3d05aea0f8f5 --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/kibana.jsonc @@ -0,0 +1,15 @@ +{ + "type": "plugin", + "id": "@kbn/entity-manager-fixture-plugin", + "owner": "@elastic/obs-entities", + "plugin": { + "id": "entityManagerFixture", + "server": true, + "browser": false, + "requiredPlugins": [ + "encryptedSavedObjects", + "security", + ], + "optionalPlugins": [] + } +} diff --git a/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/package.json b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/package.json new file mode 100644 index 00000000000000..b06e2193de9909 --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/package.json @@ -0,0 +1,13 @@ +{ + "name": "@kbn/entity-manager-fixture-plugin", + "version": "1.0.0", + "kibana": { + "version": "kibana", + "templateVersion": "1.0.0" + }, + "scripts": { + "kbn": "node ../../../../../../scripts/kbn.js", + "build": "rm -rf './target' && ../../../../../../node_modules/.bin/tsc" + }, + "license": "Elastic License 2.0" +} \ No newline at end of file diff --git a/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/index.ts b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/index.ts new file mode 100644 index 00000000000000..b9896f3e88d556 --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { PluginInitializerContext } from '@kbn/core-plugins-server'; +import { FixturePlugin } from './plugin'; + +export const plugin = async (context: PluginInitializerContext<{}>) => { + return new FixturePlugin(context); +}; diff --git a/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/plugin.ts b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/plugin.ts new file mode 100644 index 00000000000000..65469bf7c1a8cc --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/server/plugin.ts @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; +import { + Plugin, + CoreSetup, + RequestHandlerContext, + KibanaRequest, + KibanaResponseFactory, + Logger, + PluginInitializerContext, +} from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; +import { upgradeBuiltInEntityDefinitions } from '@kbn/entityManager-plugin/server/lib/entities/upgrade_entity_definition'; +import { SecurityPluginStart } from '@kbn/security-plugin-types-server'; +import { EncryptedSavedObjectsPluginStart } from '@kbn/encrypted-saved-objects-plugin/server'; +import { entityDefinitionSchema } from '@kbn/entities-schema'; + +interface FixtureStartDeps { + encryptedSavedObjects: EncryptedSavedObjectsPluginStart; + security: SecurityPluginStart; +} + +export class FixturePlugin implements Plugin { + private logger: Logger; + + constructor(context: PluginInitializerContext<{}>) { + this.logger = context.logger.get(); + } + + public setup(core: CoreSetup) { + core.http.createRouter().post( + { + path: '/api/entities/upgrade_builtin_definitions', + validate: { + body: buildRouteValidationWithZod( + z.object({ + definitions: z.array(entityDefinitionSchema), + }) + ), + }, + }, + async ( + context: RequestHandlerContext, + req: KibanaRequest, + res: KibanaResponseFactory + ) => { + const [coreStart, { encryptedSavedObjects, security }] = await core.getStartServices(); + + const result = await upgradeBuiltInEntityDefinitions({ + definitions: req.body.definitions, + server: { + encryptedSavedObjects, + security, + core: coreStart, + logger: this.logger, + config: {}, + isServerless: false, + }, + }); + + return res.ok({ body: result }); + } + ); + } + + public start() {} + public stop() {} +} diff --git a/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/tsconfig.json b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/tsconfig.json new file mode 100644 index 00000000000000..ab011eaef3eef2 --- /dev/null +++ b/x-pack/test/api_integration/apis/entity_manager/fixture_plugin/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "isolatedModules": true + }, + "include": [ + "server/**/**/*", + ], + "kbn_references": [ + "@kbn/core", + "@kbn/encrypted-saved-objects-plugin", + "@kbn/core-plugins-server", + "@kbn/zod-helpers", + "@kbn/entityManager-plugin", + "@kbn/security-plugin-types-server", + "@kbn/entities-schema", + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts b/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts index 8c4eaaee7e3b6c..e69cb950afe42d 100644 --- a/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts +++ b/x-pack/test/api_integration/apis/entity_manager/helpers/request.ts @@ -47,3 +47,15 @@ export const uninstallDefinition = (supertest: Agent, id: string, deleteData = f .send() .expect(200); }; + +export const upgradeBuiltinDefinitions = async ( + supertest: Agent, + definitions: EntityDefinition[] +): Promise<{ success: boolean }> => { + const response = await supertest + .post('/api/entities/upgrade_builtin_definitions') + .set('kbn-xsrf', 'xxx') + .send({ definitions }) + .expect(200); + return response.body; +}; diff --git a/x-pack/test/api_integration/apis/entity_manager/index.ts b/x-pack/test/api_integration/apis/entity_manager/index.ts index b6876849ef6826..8f7af35e5c8ad0 100644 --- a/x-pack/test/api_integration/apis/entity_manager/index.ts +++ b/x-pack/test/api_integration/apis/entity_manager/index.ts @@ -11,7 +11,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('Entity Manager', function () { this.tags(['entityManager']); - loadTestFile(require.resolve('./enablement')); + loadTestFile(require.resolve('./builtin_definitions')); loadTestFile(require.resolve('./definitions')); }); } diff --git a/yarn.lock b/yarn.lock index 0ceb5fdc498c21..e697962b2caff3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4859,6 +4859,10 @@ version "0.0.0" uid "" +"@kbn/entity-manager-fixture-plugin@link:x-pack/test/api_integration/apis/entity_manager/fixture_plugin": + version "0.0.0" + uid "" + "@kbn/entityManager-plugin@link:x-pack/plugins/observability_solution/entity_manager": version "0.0.0" uid "" From 1aeecaf24f9ee97127f13cf859f6011f94333ce9 Mon Sep 17 00:00:00 2001 From: Robert Oskamp Date: Thu, 15 Aug 2024 17:06:50 +0200 Subject: [PATCH 92/92] Skip some serverless tests after roles and spaces changes in QA (#190599) ## Summary This PR skips some serverless tests after changes on roles and spaces have been applied to the QA environment. ### Details After role management and multiple spaces have been enabled in the QA environment, a number of tests started to fail when running against MKI. Since we run the same set of tests against QA and Staging, we can't just fix the tests to work with the changes in QA because then they would fail when running against Staging. After carefully checking the assertions in the tests (mainly checking that certain things are NOT available, while we gradually make them available again env by env), we decided in a small group discussion it's the best way forward to temporarily skip these tests and revisit them once the change has been applied to all environments. Some of the tests might be deleted then, others might be adjusted to the new behavior. To be clear: this is not ideal and this outcome is a trade-off for this specific situation and should not be used as future guidance to handle this kind of problem. We have some ideas of how to deal with changes that are applied gradually to the environments, but it takes more time to consolidate these. In the interest of moving forward quickly, the test skip was considered the best solution for now. --- .../test_suites/common/management/spaces.ts | 4 +++- .../test_suites/common/platform_security/authorization.ts | 8 ++++++-- .../common/management/data_views/serverless.ts | 4 +++- .../test_suites/common/management/landing_page.ts | 8 ++++++-- .../test_suites/common/spaces/spaces_selection.ts | 4 +++- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/management/spaces.ts b/x-pack/test_serverless/api_integration/test_suites/common/management/spaces.ts index 4a8f65e4a9514a..5c1e22811bdc37 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/management/spaces.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/management/spaces.ts @@ -39,7 +39,9 @@ export default function ({ getService }: FtrProviderContext) { svlCommonApi.assertResponseStatusCode(400, status, body); }); - it('#create', async () => { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + it.skip('#create', async () => { const { body, status } = await supertestWithoutAuth .post('/api/spaces/space') .set(internalRequestHeader) diff --git a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts index 7c7f3caea85266..95277f9ea8d798 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/platform_security/authorization.ts @@ -42,7 +42,9 @@ export default function ({ getService }: FtrProviderContext) { describe('route access', () => { describe('internal', () => { describe('disabled', () => { - it('get all privileges', async () => { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + it.skip('get all privileges', async () => { const { body, status } = await supertestWithoutAuth .get('/api/security/privileges') .set(svlCommonApi.getInternalRequestHeader()) @@ -50,7 +52,9 @@ export default function ({ getService }: FtrProviderContext) { svlCommonApi.assertApiNotFound(body, status); }); - it('get built-in elasticsearch privileges', async () => { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + it.skip('get built-in elasticsearch privileges', async () => { const { body, status } = await supertestWithoutAuth .get('/internal/security/esPrivileges/builtin') .set(svlCommonApi.getInternalRequestHeader()) diff --git a/x-pack/test_serverless/functional/test_suites/common/management/data_views/serverless.ts b/x-pack/test_serverless/functional/test_suites/common/management/data_views/serverless.ts index 83f70a465a49eb..d97ee9fce2cd43 100644 --- a/x-pack/test_serverless/functional/test_suites/common/management/data_views/serverless.ts +++ b/x-pack/test_serverless/functional/test_suites/common/management/data_views/serverless.ts @@ -100,7 +100,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); }); - describe('when in single space mode', function () { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + describe.skip('when in single space mode', function () { let dataViewId = ''; before(async () => { await esArchiver.load( diff --git a/x-pack/test_serverless/functional/test_suites/common/management/landing_page.ts b/x-pack/test_serverless/functional/test_suites/common/management/landing_page.ts index 1796997bd7d77b..1080ba0bc5c6b4 100644 --- a/x-pack/test_serverless/functional/test_suites/common/management/landing_page.ts +++ b/x-pack/test_serverless/functional/test_suites/common/management/landing_page.ts @@ -47,7 +47,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }).not.to.throwError(); }); - describe('Roles management card', () => { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + describe.skip('Roles management card', () => { it('should not be displayed by default', async () => { await retry.waitFor('page to be visible', async () => { return await testSubjects.exists('cards-navigation-page'); @@ -56,7 +58,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); - describe('Organization members management card', () => { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + describe.skip('Organization members management card', () => { it('should not be displayed by default', async () => { await retry.waitFor('page to be visible', async () => { return await testSubjects.exists('cards-navigation-page'); diff --git a/x-pack/test_serverless/functional/test_suites/common/spaces/spaces_selection.ts b/x-pack/test_serverless/functional/test_suites/common/spaces/spaces_selection.ts index 47c63fc2371370..526d0b3db5a410 100644 --- a/x-pack/test_serverless/functional/test_suites/common/spaces/spaces_selection.ts +++ b/x-pack/test_serverless/functional/test_suites/common/spaces/spaces_selection.ts @@ -12,7 +12,9 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { const svlCommonNavigation = getService('svlCommonNavigation'); const testSubjects = getService('testSubjects'); - describe('space selection', function () { + // Skipped due to change in QA environment for role management and spaces + // TODO: revisit once the change is rolled out to all environments + describe.skip('space selection', function () { before(async () => { await svlCommonPage.loginAsViewer(); });